Skip to content

Observations on Modern Software Engineering

August 25, 2004 by devinhedge

Devin Discusses His Successes,Failures and Lessons Learned.
History, Definitions and My Approach
There is a vast difference between Software Development and Software Engineering. Both serve a purpose. To understand the progression of information technology and its use in modern businesses, you have to first understand the history of technology in civilization. Of course, if someone had told me that back in college I would have laughed at them had I not participated in part of the evolution of the Personal Computer.

Jump To:

Computers I Have Used
Apple II (II, IIc, IIe) The Commodore PET The Commodore 64 Tandy Radio Shack's TRS-80 Model I/III IBM System 360 IBM PC Texas Instruments TI-88 IBM 3083 Processor Complex Tandy Radio Shack Color Computer Osborne I Tandy Radio Shack Color Computer 3 Apple Macintosh IBM PC-AT IBM PS/2 IBM x86 Clones Commodore NeXT Step Apple 68000 Macintosh Digital Equipment PDP-11/VAX-11 Sun Microsystems Sun-3/80 Sun Microsystems Sun-4 (SPARC) IBM System 390 SPARCstation 1 SPARCstation 10 Sun Enterprise 9000 Apple iBook Various Intel/AMD Based Systems

I define Software Development as the development of application software apart from the same same discipline of practice found in other engineering fields (e.g. Electrical, Civil, Aerospace, Mechanical, and Software Engineering.) Software developers typically have little formal training, and even if formally trained in Computer Science, they do not follow the same progression of professional development found in other fields. For example, an engineer goes through an apprenticeship, then progresses to a Junior Engineer. Eventually, the Junior Engineer turns into a full Engineer with all of the rights and responsibilities of an Engineer.
Software Engineering is much more formal and is usually corresponds to a much larger system. For example, Software Engineering is a part of the Mars Rover system development. Software Engineering should also be used for new product development, particularly in systems that are mission critical, info-tech related (e.g. An Accounting or Billing System).
 

For More Information
The Computer History Museum

Application Development has become a joke in the United States largely due to lack of proper management. In the late 1990's, demand for rapidly developed Internet solutions caused a shortage in skilled software developers. As a result, hiring managers hired software developers if all skill sets. One project I worked on in particular had an average of one per every five employees that were formally trained in software development much less software engineering. The fall-out of the Dot-Com era of computing as left us with three camps in Application Development. The are:

  • Software Engineers
  • Computer Scientists
  • "Script Kiddies", Hackers, Crackers, Webmonkeys, Bobo The Webmonkey, and B1FFs

Software Engineer: A software engineer is a licensed professional engineer who is schooled and skilled in the application of engineering discipline to the creation of software. A software engineer is often confused with a programmer, but the two are vastly different disciplines. While a programmer creates the codes that make a program run, a software engineer creates the designs the programmer implements. By U.S. law no person may use the title "engineer" (of any type) unless the person holds a professional engineering license from a state licensing board and are in good standing. A software engineer is also held accountable to a specific code of ethics. (Source: PC Webopaedia)
Computer science is a discipline that involves the understanding and design of computers and computational processes. In its most general form it is concerned with the understanding of information transfer and transformation. Particular interest is placed on making processes efficient and endowing them with some form of intelligence. The discipline ranges from theoretical studies of algorithms to practical problems of implementation in terms of computational hardware and software. A central focus is on processes for handling and manipulating information. Thus, the discipline spans both advancing and fundamental understanding of algorithms and information processes in general as well as the practical design of efficient reliable software and hardware to meet given specifications. Computer science is a young discipline that is evolving rapidly from its beginnings in the 1940's. As such it includes theoretical studies, experimental methods, and engineering design all in one discipline. This differs radically from most physical sciences that separate the understanding and advancement of the science from the applications of the science in fields of engineering design and implementation. In computer science there is an inherent intermingling of the theoretical concepts of computability and algorithmic efficiency with the modern practical advancements in electronics that continue to stimulate advances in the discipline. It is this close interaction of the theoretical and design aspects of the field that binds them together into a single discipline.
Because of the rapid evolution it is difficult to provide a complete list of computer science areas. Yet it is clear that some of the crucial areas are theory, algorithms and data structures, programming methodology and languages, and computer elements and architecture. Other areas include software engineering, artificial intelligence, computer networking and communication, computer graphics, operating systems, and numerical and symbolic computation.
 

IBM 80-column Punched Card Format

A professional computer scientist must have a firm foundation in the crucial areas of the field and will most likely have an in-depth knowledge in one or more of the other areas of the discipline, depending on the person's particular area of practice. Thus, a well educated computer scientist should be able to apply the fundamental concepts and techniques of computation, algorithms, and computer design to a specific design problem. This work includes detailing of specifications, analysis of the problem, and provides a design that functions as desired, has satisfactory performance, is reliable and maintainable, and meets desired cost criteria. Clearly, the computer scientist must not only have sufficient training in the computer science areas to be able to accomplish such tasks, but must also have a firm understanding in areas of mathematics and science, as well as a broad education in liberal studies to provide a basis for understanding the societal implications of the work being performed.
(Source: The Computer Sciences Accreditation Board)
Script Kiddies: A person, normally someone who is not technologically sophisticated, who randomly seeks out a specific weakness over the Internet in order to gain root access to a system without really understanding what it is s/he is exploiting because the weakness was discovered by someone else. A script kiddie is not looking to target specific information or a specific company but rather uses knowledge of a vulnerability to scan the entire Internet for a victim that possesses that vulnerability. (Source: The Webopedia
 

B1FF
/bif/ ("BIFF" or "B1FF", from Usenet) The most famous pseudo, and the prototypical newbie. Articles from BIFF are characterized by all uppercase letters sprinkled liberally with bangs, typos, "cute" misspellings (EVRY BUDY LUVS GOOD OLD BIFF CUZ HE'S A K00L DOOD AN HE RITES REEL AWESUM THINGZ IN CAPITULL LETTRS LIKE THIS!!!), use (and often misuse) of fragments of chat abbreviations, a long sig block (sometimes even a doubled sig), and unbounded naivete. BIFF posts articles using his elder brother's VIC-20. BIFF's location is a mystery, as his articles appear to come from a variety of sites. However, BITNET seems to be the most frequent origin. The theory that BIFF is a denizen of BITNET is supported by BIFF's (unfortunately invalid) electronic mail address: <BIFF@BIT.NET>.
[1993: Now It Can Be Told! My spies inform me that BIFF was originally created by Joe Talmadge <jat@cup.hp.com>, also the author of the infamous and much-plagiarised "Flamer's Bible". The BIFF filter he wrote was later passed to Richard Sexton, who posted BIFFisms much more widely. Versions have since been posted for the amusement of the net at large. - ESR] (Source: hyperdictionary)
Bobo The Webmonkey
What B1FF was to BITNET users, Bobo the Webmonkey is to webmonkeys - the mythical prototype of incompetent web designers everywhere. In fact, Bobo may be what B1FF became when he grew up.
Bobo knows about HTML only what he has learned from viewing the source of other people's Web pages.
Bobo doesn't know what a MIME type is, even though someone gave him a hardcopy of the FOLDOC entry for it.
Bobo may have used an HTML code validator before, but isn't sure.
Bobo doesn't know what the difference between GIF and JPEG is. He thinks PNG is a foreign country.
All the pages Bobo has designed say "Welcome to [organisation] online!" at the top, and say "click here!" at least three times per page.
Bobo has used Photoshop before; he doesn't understand why people keep asking if he's ever been tested for color-blindness.
Bobo never got that "its" / "it's" distinction real clear, as you can tell from his pages. (Source: hyperdictionary)

A Script kiddy (sometimes spelled kiddie) is a derogative term, originated by the more sophisticated crackers of computer security systems, for the more immature, but unfortunately often just as dangerous exploiter of security lapses on the Internet. The typical script kiddy uses existing and frequently well-known and easy-to-find techniques and programs or scripts to search for and exploit weaknesses in other computers on the Internet - often randomly and with little regard or perhaps even understanding of the potentially harmful consequences. Hackers view script kiddies with alarm and contempt since they do nothing to advance the "art" of hacking but sometimes unleashing the wrath of authority on the entire hacker community.
While a hacker will take pride in the quality of an attack - leaving no trace of an intrusion, for example - a script kiddy may aim at quantity, seeing the number of attacks that can be mounted as a way to obtain attention and notoriety. Script kiddies are sometimes portrayed in media as bored, lonely teenagers seeking recognition from their peers.(Source: searchSecurity.com)
A Hacker is a slang term for a computer enthusiast, i.e., a person who enjoys learning programming languages and computer systems and can often be considered an expert on the subject(s). Among professional programmers, depending on how it used, the term can be either complimentary or derogatory, although it is developing an increasingly derogatory connotation. The pejorative sense of hacker is becoming more prominent largely because the popular press has coopted the term to refer to individuals who gain unauthorized access to computer systems for the purpose of stealing and corrupting data. Hackers, themselves, maintain that the proper term for such individuals is cracker. (Source: The Webopedia)
The term Cracker was coined in the mid-80s by hackers who wanted to differentiate themselves from individuals whose sole purpose is to sneak through security systems. Whereas crackers sole aim is to break into secure systems, hackers are more interested in gaining knowledge about computer systems and possibly using this knowledge for playful pranks. Although hackers still argue that there's a big difference between what they do and what crackers do, the mass media has failed to understand the distinction, so the two terms -- hack and crack -- are often used interchangeably. (Source: The Webopedia)
A Webmonkey is a largely unskilled Web worker - one with a passable understanding of HTML but little else. It is often supposed that, in the New Media food chain, there is nothing lower than a webmonkey. Alas, there is: people who barely have the skills to use FrontPage; these people are called "typists".
The B1FF of webmonkeys is personified as Bobo the Webmonkey. (Source: hyperdictionary)
Unfortunately, the majority of people working as Programmer/Analysts are "Script Kiddies" due to the hiring practices of companies desperate to find talent during the Dot-Com era. Adding insult to injury, most but not all Executives keep assuming that they know enough about information systems to guide the process of technology creation or technology adoption. Consider the definition of the Software Engineer."While a programmer creates the codes that make a program run, a software engineer creates the designs the programmer implements. By U.S. law no person may use the title 'engineer' (of any type) unless the person holds a professional engineering license from a state licensing board and are in good standing. A software engineer is also held accountable to a specific code of ethics." I don't that many Executives that are qualified to create the design that a programmer implements.


Early Keypunch Machine: IBM 026 Keypunch (Courtesy IBM)

It is also important to note that one of the primary differences between a Software Engineer and a Computer Scientist is that the Software Engineer is an board accredited professional and that a Computer Scientist is typically focused on discovery of new ways to use information technology in a scientific or academic setting. Given the new accountability laws regarding accounting practices and reporting, how many Executives want to hire a Computer Scientist to find a "new way" to do accounting?
This sounds obtuse, and in most cases it is; however, my personal experience states that most Computer Scientists, much like legitimate "Hackers" have a preference for academic knowledge sharing (good), communal work (ok), and theoretical exploration (not what you want in business). For example, everyone would agree that Re-factoring of units of code is a good thing; however, I have found that Hackers, Script Kiddies, and Computer Scientists become so obsessed with code optimization that they never produce a unit of code that works.
Then there is the another side of this phenomenon: I have had several Computer Scientists argue, if we can just change this business rule, then this process will take 30% less time. The business rule happened to be European VAT taxation rules for telecommunication traffic. "Oh sure, throw out the regulation and everything runs smoother." The interesting effect of my telling this "enlightened" Computer Scientist that the tax rules were set in stone was that he left because I was "cramping his style".
Is this the professionalism we want in our businesses? Is this the caliber of people we want to work with? This is most definitely not the caliber of people I want to work with. Unfortunately, project managers rarely get to choose the project members.
So here are some personal rules I use when developing information systems:
RULE #1: The Subject Matter Experts (SMEs) and Domain Experts make decisions about their domains. If it is not in their domain of expertise, they can provide input but are not to be decision makers.
RULE #2: Deadlines are set using software size estimations and the software size estimations are generated by the software developers: not project managers, not program managers, and not the customer of the software development effort.
RULE #3: Use the software engineering methodology and process that fits the type of software development effort.
My approach is pragmatic. While I am not a board certified Software Engineer, I am a technology manager that prefers to use Software Engineering practices and codes of conduct. For this reason, every system I have ever put into production has been secure. For this reason, every system I have ever put into production was within ±3% of budget and was delivered within ±5% of schedule. How do I know? It was measured. Here are the some of the things I like to measure on a software project:

  • Man hours
  • Lines of Code
  • Function Points
  • Number of Modules (Logical Units of Code)

By measuring as many things about my projects, I have been able to accurately predict the outcome of a project overtime. The Software Engineering Institute would look at this as being managing projects and teams at the Capability Maturity Model (CMM ) level of 4 or 5. Since I have never worked at an organization that subjected themselves to a SEI CMM, I am still waiting to see if my Magic is as good as I say. Any takers?
Successes
It is always a good thing to look at your sucesses and revel in them. I say this not promoting selfish pride, but to say that this is the only satisfaction a computer geek can derive from building an information system. Unlike a carpenter or welder, the technology professional works in the ethereal and thus personal satisfaction is often fleeting. So here are a few of my favourite Software Engineering success stories:
US Army/Alabama Army National Guard BellSouth HealthSouth Baptist Health System Telia Swisscom Dutch Telecom Air National Guard National Recruiting Internet Content Rating Association National Geographic Society: Sharks! National Association of Home Builders Concert/BT/MCI/AT&T (Joint Venture) International Consumer Electronics Show Netifice New Pig AOL.COM Customer Service Centers PBS The World Bank Group Hanley-Wood, LLC eBuild.com U.S. Department of State
Failures
HealthSouth Baptist Health System Concert/BT/MCI/AT&T (Joint Venture) FBR.com (Friedman, Billings and Ramsey, Inc.)
Lessons Learned
LESSON #1: Fire bad clients that aren't committed to excellence or paying thier bills.
LESSON #2: Stock Options are nice, profits are better.
LESSON #3: Client involvement all the way through the process ensures a successful project. Make the client a team member.
LESSON #4: Tell them what you know and what you don't know. Never mislead the client into thinking you know something you don't.
LESSON #5: Get it writing up front, before you sign the dotted line. The Honeymoon ends when the contract is signed.
LESSON #6: Itemize your time. Understand not just where your spent your time, but why you spent your time.

AdaptiveThemes