Wednesday, December 29, 2004

Are Requirements Required?

Are requirements required? Steve McConnell discusses a Barry Boehm study that shows that requirement defects found in the field are 50-200 times as expensive to fix then if the defect was fixed during requirements definition. So the answer is yes - requirements are required unless you want to pay a lot more money then necessary to build your software. The one exception may be if you are writing some small piece of software only for yourself, but even then it is still probably a good idea to at least scribble a few notes about requirements.

Lately, I have been discussing requirements with various developers and I’m amazed at the number of developers that say that get no or poorly written requirements. What’s happening? Why don’t the requirements get properly written?

I have heard and personally experienced many excuses about why requirements are unwritten or poorly written. Here are the major excuses:

  1. No time. We didn’t have time to write requirements.
  2. No clarity. We couldn’t make up our mind about what to build.
  3. No usefulness. We tried writing requirements and they weren’t very useful.
  4. No reviews. We wrote requirements but we couldn’t get any users to review them.
  5. Hungry dog. My dog ate the requirements.

Except for the fifth excuse, I will dispute and make suggestions for overcoming each excuse.

No Time
This is the most common excuse. I once worked on a product that helps insurance agents create insurance proposals. The company was small and the president of the company was “visionary”. The problem for the product was that his “vision” changed every day and sometimes several times per day. He refused to write down any requirements because there was “no time”. We needed to “get the product out”. Of course, there was no way to complete the product because nobody could define what the product was. I left the project before it was completed because I found the situation hopeless. I don’t know if they ever finished it or not.

Saying that you have no time to write requirements is like saying you don’t have time to create blueprints for a house before you starting building it. How many rooms? How many square feet? How many bathrooms? Can you imagine starting the construction of a house without a basic blueprint? I can’t.

If you find yourself in this situation, try getting commitment from management to at least create a mini-requirements specification of a few pages. Reviewing the mini-requirements specification may make management realize that something more complete needs to be written.

No Clarity
We couldn’t clarify what to build so we didn’t write requirements. I once worked on a 401K management system. The project suffered from “analysis paralysis”. We documented requirements religiously, but we never actually started any real development because requirements were never complete. One year and $3 million later, the project was cancelled. A wise friend on the project said “If you don’t see any signs of a visible system after 3 months, investigate the project. If you don’t see any signs of a visible system after 6 months, cancel the project because the team will never produce anything.” I agree and, in fact, the timeframes should probably be even shorter.

If you find yourself in this situation, then try a more agile methodology like Scrum. Define some small set of requirements, implement the requirements, test the implementation, and then start again. Another possibility is to create a prototype to clarify requirements.

No Usefulness
We created the requirements, but they were not useful. I once worked on a Cable Monitoring system. We were working with an Indian outsourcing firm that was CMM level 5. Like all good CMM level 5 organizations, they had a really long requirements template that all projects should use. Unfortunately, most of the sections were not relevant to our project and could be filled in with boilerplate or pro-forma information. This made the document really long and it looked good but it actually contained very little useful information.

Let’s go back to the house blueprint analogy. What if I created a blueprint that consisted of the square footage of the house, the color of the carpet, and the brand of windows to install? It contained no information about room configuration and window and door placement. Would you build the house? I wouldn’t.

If you find yourself in this situation, sit down, identify the most important aspects of requirements to capture, and then create a document template that captures those aspects. After you fill in the template, you will have pretty good requirements.

No Reviews
We wrote the requirements, but we couldn’t get the right people to review the requirements. I worked on a Shop Floor Control system once. (The advantage of being an old timer like me is that you worked on everything at least once.) We created requirements documents that were over 100 pages long and really boring. We used to have a single, all day long, requirements review meeting. After the first couple of hours, I watched the product manager’s eyes glaze over. Participants started finding good excuses (like my pen ran out of ink, my car needs an oil change, or my glasses are dirty) to leave the room. Sometimes a participant never came back.

If you were build a house and created a very detailed blueprint that you never showed to the owners of the house, would you build the house? I wouldn’t.

There are a couple of several ways to resolve this problem. First, you can create a prototype to show users and other stakeholders. They generally like looking at prototypes a lot more than they like looking at requirements. You can then focus on things that aren’t part of the prototype in the requirements specification. Second, create a small portion of the requirements specification, review that small portion, and then move on to the next portion. Third, try to make the requirements specification a little amusing. Throw in a few small jokes. This is an idea from Joel Spolsky and I think it is good.

Sunday, November 28, 2004

Your Next Career Move

As I discussed in Software Development in the Year 2009, I believe that software development jobs are moving offshore. The December 6th edition of Business Week has an article that further confirms my views. There were 3 million computer jobs in 2002. Business Week thinks that many of these jobs will move offshore:

Year ----- Percentage of U.S. Computer Jobs Moving Offshore
2004 ---------------------5%
2008 ---------------------9%
2015 --------------------20%

I’m sure the situation is similar in Europe.

So assuming you are a professional software developmer, what should you do? Well, you could wallow in self-pity and pine for the late 1990s. This won’t really solve anything and it won’t even make you feel better. You could also try to prevent work from moving offshore by advocating legislation that bans offshore development. This seems about as likely as your chances of shipping zero defect software after your boss made the team work all night to fix the “last few bugs”.

The best thing you can do is take a more proactive approach to managing your career. You might want to read more about being proactive in Steve Pavlina’s excellent blog. I can think of five different alternatives:
  1. Do Only Programming: Assuming that youare primarily a programmer, you can continue to do what you have been doing. Your real wages will decline over time, but the enjoyment that you get from programming might out weigh the loss of pay. If you choose this path, you should make a concerted effort to become a programmer that is in the top 10% of all programmers.
  2. Do Business Analysis: Learn more about the business so that you are invaluable at using software to resolve business problems. This work is very difficult to move offshore if most of your business people are onshore.
  3. Do Architecture: Become a high-level designer or architect for your domain. I personally know several independent consultants that are using this strategy in order to maintain competitiveness.
  4. Do Project Management: Become a project manager and learn how to coordinate offshore and onshore teams.
  5. Exit Software Development: Drop out of software development completely and pursue a new career. This might be a good time to open up the Dunkin Donuts franchise (free donuts all the time!) that you always wanted.

You could also do some combination of 1 thru 4. The important thing is to think about your career and make a conscious decision about where you want to go. Then make a plan to get there. If you are proactive, I promise you that you will feel a lot better about your future!


Monday, November 15, 2004

SD Times Articles

For those of you that are interested, I'm quoted this week in two differenet SD Times articles:

  1. C# Gets Sharper
  2. C# and VB.Net - What's the Difference?

These articles provide various opinions about C# and VB.Net.



Sunday, October 31, 2004

A Programmer and His Language(s)

If you are a developer today, your life is not easy. Today's projects often require that a you know many languages:
  • HTML
  • Java
  • SQL
  • Javascript
  • C#
  • VB
  • C
  • C++
  • XML
  • UML

Of course, this doesn't include any of the non-language things you may need to know:

  • Domain knowledge
  • Architecture
  • Class design
  • Relational database design
  • Development tools (Ant, Visual Studio, Eclipse, etc.)
  • Agile methodologies (Xtreme Programming, Scrum, TDD, etc.)
  • Traditional methodoliges (RUP, waterfall, staged delivery, etc.)

Does this seem like enough? Don't forget that many of these language and non-language items are continuously changing. Feeling overwhelmed yet? I know I feel about as overwhelmed as a new parent with triplets during feeding time; I need all the help that I can get.

Pick One Language: VB.Net or C#
In Code Complete 2nd Edition, author Steve McConnell sites several studies that your familiarity with a programming language significantly improves your productivity. One study that he sited showed that programmers who had extensive experience with a programming language were three times more productive than programmers with minimal experience. How many programming languages can you have "extensive experience" with? Be honest. 2? 3? 4?

You used to choose a programming language for its fit with the problem that needed to be solved. For instance, older versions of VB were very good for rapid prototyping and fast development of small applications. C++ was used for more low-level control and power. SQL is for manipulating data in relational databases.

Microsoft latest language incarnations are VB.Net and C#. The differences between VB.Net and C# are basically syntactical; they both rely on the same .Net framework. I guess Microsoft tried to strike a balance between the ease-of-use of the old VB and the power of C++ with VB.Net and C#. I'll let you decide whether Microsoft succeeded in striking the right balance.

Since there is no practical difference between VB.Net and C#, why would you choose one language over the other? Well, there is really no reason other than what language you were familiar with when Microsoft released .Net. VB programmers migrated to VB.Net and C++ programmers migrated to C#. Unfortunately, this migration has lead to a situation where many projects contain a combination of VB.Net and C# code, even though there is no practical difference between the languages.

Given your current brain overload, do you really want to learn VB.Net if you are a C# programmer and vice versa? Probably not. You usually are more dominant and productive in one language and therefore weaker and less productive in the other. Every time you try to write VB.Net code (if you are a C# programmer), you have to slow down and think about the VB.Net syntax. You go through a slow (relative to a computer), manual translation in your head.

Computers are really good at programming language translation in general and at translation between VB.Net and C# specifically. The reason that we developed our tool was to at least solve one-half of this translation problem. We tried to do our small bit at reducing your information overload and make a little money (gotta feed those triplets!) at the same time.




Thursday, September 30, 2004

Software Development in the Year 2009

At the risk of being flamed, ridiculed, and otherwise spit on, I am going to try to predict the future of software development. Here are nine predictions about how software development will look in 2009.
  1. Linux is running on 30% of consumer and business desktop and laptop machines. In 2004, the penetrations was only 3%, but this rapidly escalated because Linux is free and former 3rd world countries like China and India are growing more rapidly than the West. They have a bias for free software because their labor costs are so low that even if the TCO in the US is higher for Linux than Windows, the economics are reversed in India and China. Most software companies release software for both Linux and Windows.
  2. Software engineers in India are still cheaper than in the US, but not as cheap as in countries in Africa and China. India is forced to start paying attention to reducing costs of software development through software development tools.
  3. Businesses have a bias for solutions that are based on Open Source software. Many consulting companies (IBM is largest) make money by cobbling together Open Source components into real world business solutions. Some small consulting companies have small pieces of proprietary software that glue together Open Source component in a way that gives them an advantage in their vertical market.
  4. Microsoft is shrinking. The market for its Office and OS products is competing with OpenOffice and Linux. It is hard to compete with free, but Microsoft continually reduces prices internationally and tries to add new features that are ahead of Open Source solutions. It is slowly failing as it tries to penetrate new “safe markets” like consumer electronics, pet robots, and cell phones with built in “quiet-mode” hair dryers that can dry Suzie Teenager's hair while your are talking with her friend. Microsoft is contemplating porting Office to Linux and seeding their OS to Open Source.
  5. Most companies have switched to Open Source databases. Oracle is still used in the highest end of the market, but that market is being gradually eroded. Microsoft has ported MS SQL Server to Linux in an effort to retain any market share.
  6. Developers are using Open Source software development tools wherever possible. Eclipse has become the dominant tool for developers. Microsoft has drastically reduced the price of its software development tools so that it can try and hold on to existing customers.
  7. Many new Open Source code only companies have sprung up. Vulcan makes an excellent business rules engine that is the basis for most logical business work flow. Vulcan makes all its money by selling consulting and canned business rules scripts. Klingon is a security company that has used Open Source code to replace Norton Anti-virus and runs on both Linux and Windows. Klingon make all its money by providing anti-virus subscription updates.
  8. The number of software developers in the US has shrunk by 50% since 2004. The most innovative and productive teams are in the US, but other countries (India and China) are catching up.
  9. Software developers are specializing in more narrowly defined areas because the rate of technological change and divergence is greater than the human capacity to absorb new information. For instance, Spock used to program web applications that involved Web design, workflow, and database access. (Ahh..those were the good old days.) Now Spock specializes in modifying Vulcan rule engine scripts. Even then, he doesn’t really know every feature, but can do most of what he needs with 20% of the engine features. He hopes this knowledge will allow him to live long and prosper.

Sunday, September 05, 2004

Blog Purpose

The purpose of this blog is to provide a forum for my advice and opinions about software development:
  1. Trends
  2. Business
  3. Technology
  4. Process

I am a co-owner of Elegance Technologies.