brain dust

The Absolute.

Thursday, March 02, 2006

The State of Software Engineering

I am a software engineer. I design, code and connect systems. I think the software industry, more specifically Software Engineering, is in a sad state of disarray.

Take these two scenarios for example:

#1. How to build a new modem for a computer:
Step 1:
Conceptualize an idea. Describe everything feature wise you could ever want to support.
Step 2:
Design the system. An Electrical Engineer, or a team of Engineers, would sit down and draw several specs for the hardware.
Step 3:
Peer Review. You would usually get the people together who had the idea along with Engineers and go through a rigorous review process. No stone unturned. Modifications are made at this point.
Step 4:
Mockup. A workbench model is made of the device to make sure it fits the specified form factor and interfaces connect.
Step 5:
Prototype. This new model allows you to stick the device in a machine and test its interfaces. It doesn't work 100% but you are still in the proof of concept phase.
Step 6:
Working Model. This new model usually works, but has to be reviewed and reworked several times due to bugs.
Step 7:
QA Model. This new working model is what QA starts testing against. They test against industry standards and the design documentation.
Step 8:
Beta Testing. Some of said that end users are your best testers. They will use your equipment better and in different ways than a QA person would. This is usually where the ship date is set. Notice that it is often not a drop dead date.
Step 9:
Production. Now the specs are sent off to manufacturing before they hit the market. There will also be another round of manufacturing QA tests to make sure that manufacturing is building it right.

#2. How to build a Sales Lead Manager web application

Step 1:
Conceptualize. A client brings a problem to you or your team. Here is usually where a drop dead date is set. Notice that this often happens in the conceptualization stage and not further down the process.

Step 2:
Design. Usually 1-3 Software Engineers gather in a conference room for a few days to "white board" the idea and systems. The date has already been set, so you must "Trim the Fat" in order to meet your deadline.

Step 3:
Code. Code Code. Code.

Step 4:
Beta. Notice that I did not include QA? In most small to medium software organizations the QA process is either too small to mention or non-existent. Why? Because QA does not fall in line with the business push for the hard deadline.

Step 4.5:
Add in the additional 3 requirements that were not discussed in the conceptual stage, but that the CEO says are required now. Why didn't we think of these when he was describing it to us before?

Step 5:
Fix bugs. As many as you can. Some are tolerable, but you now have been working 20 hour days for three weeks now, so you don't really care. Cover up as many bugs from the end user as possible.

Step 6:
Roll out to production.

Step 6.1:
Oh crap. We missed several bugs introduced because of the feature creep. Rush to fix and re-roll.

Step 6.2: Oh crap. We missed several bugs introduced because of the feature creep. Rush to fix and re-roll.

Step 6.3: Oh crap. We missed several bugs introduced because of the feature creep. Rush to fix and re-roll.

Step 7:
Start designing the next release to fix the things you messed up in the first release.

See any problems here? There are no real standards for software development. Timeframes are not always relative to the scope of the project. Also, I can't think of a place I have been in the last 10 years of software design that scope creep has not happened. Even when my managers would issue a "Feature Freeze" he would always be overridden.

Hardware Engineering cost millions to make happen right. But the people who sell hardware know that's what it takes. The current Software Engineering landscape cost millions and then millions to fix, which could be prevented if it were treated like Hardware Engineering.

I think this causes the industry to get a black eye. I think it won't change unless industry leaders start treating Software Engineering as if it were Hardware Engineering. Hardware Engineering is so rigorous because they basically get one chance to get it right. But with Software Engineering we have this idea that we can always fix it later, that business has abused over the last decade or so.

0 Comments:

Post a Comment

<< Home