The programming press and IT journals are full of stories about the failure of software outsourcing. The statistics are sobering. Less than 50% of outsourcing meets financial objectives. The outsourcing of many business processes besides software development also has the same less-than-stellar results.
Forrester reports the top three causes of outsourcing failure are:
- No process for specifying the work to be done
- Poor project management
- No metrics for measuring success
In my opinion, unless you solve the first one, then being excellent at the other two won’t make a difference.
Is that specification finished, Tolstoy?
Some people believe you need hundreds of pages of detailed specifications as complex as War and Peace to make outsourcing work. Then they hire inexperienced junior programmers that will do only what they are told, at least most of the time. Creativity and innovation are not required or even welcome.
These people get what they deserve: boring software that is never complete and sometimes never even used! That’s because there is no way you can think of everything before development begins. It is virtually impossible to describe everything you need in a specification and then use it alone to govern the software development process.
Software development in its most powerful form is a creative and collaborative process. The trick is to specify just enough to move your programmers in the right direction and unlock their creative powers. It is not a carte blanche to let your programmers to do whatever they want. The best specifications contain guidelines and a good description of the end goal or vision of what the software will do. It’s the how and why of the software your customers will use.
Just tell us what you need!
You see, for an engineer the fun part is not figuring out what to do. The fun part is figuring out how to do something, how to achieve the goal that is clearly defined for your software users.
I remember the first Russian software development team I worked with. I was unsure they could implement the software I needed. Sensing my skepticism, the team leader finally said, “Look, we can do anything! You just have to tell us what you need.”
He was right, they were amazing programmers. I never had to tell them how to do something. I just had to tell them what I needed. That responsibility was put back on my shoulders, where it squarely belonged.
The most important and often missing piece is what your customers see everyday!
Luckily, I had enough experience with software development that I knew what to give them to get started. But many people don’t, as indicated by the Forrester discovery that most of outsourcing fails because of a lack of process to describe the work to be done.
The most important missing piece is to describe how you want your software to behave when your customers use it. It is the use cases and user stories: the sequence of steps the various kinds of your users will carry out in going from screen to screen of the application to accomplish the tasks, goals and dreams that the software can do for them.
You must have a description of how your users will actually use your software screen-by-screen, with as many details as possible.
- Your project management will fail or more accurately you will be managing a project destined to failure.
- Your metrics will measure only your delays and rework required before working software can be delivered.
In my opinion, the main reason for failure of outsourced software development is not bad project management. It’s not having a clear definition of success.