|Software development does not have to be |
a train wreck.
Last week I was exposed to a great blog article from Headspring consulting. In it, they talk about the latest report from the Standish group. Software developers are getting better at delivering products on time and on budget, but the success rates still resemble batting averages from baseball instead of a mature industry. This week I want to discuss this blog and why it is so damn hard to write software.
The present success rate for software projects is still below 50%. This means if you are a business owner you have a less than 50% chance of a project coming in on time and on budget. I have to agree with blog author Jeffrey Palermo, this is unacceptable. This is why I suspect that many business owners do not want to spend money or time on software and technology because they know that the investment is risky.
I have a few theories why software is so risky.
First, software is the only technology product which is not automated. Computer, smart phones, and mice are all manufactured on factory assembly lines. Software is created by a bunch of engineers by hand. This process is similar to writing a novel but it is done by committee and under often unrealistic deadlines. This hand crafting of software means that there are no standardized parts. So communicating with a database can be done a myriad of ways instead of one standard fashion.
Next technology environments are heterogeneous. It is common for a large company to have servers which run UNIX, desktop computers which run windows and staffs which have Android phones. This means that software developers spend a great deal of time fitting square pegs into round holes. The data on your UNIX servers needs to get on your sales forces smart phones. It is up to your software developer to figure that out.
Third, software engineering is a craft that needs to be learned on the job. When you hire a welder, you know that if he is hired from a union that he has spent countless hours training both in the classroom and mentored on the job. The same holds true when you hire a plumber. These trades have long apprenticeships where the skills to succeed on the job are taught by more skilled artisans. Sadly, no such system exists for software engineers. Entry level developers can be self-taught or they can be graduates from prestigious programs. This means that no two developers are going to have the same base knowledge.
Next, there are so many different languages and design patterns for software development and no one agrees which is best. If you want to start a fight among software developers mention that Java is a superior language to C#. Developers are very territorial about their skills and if they are confronted with individuals who don't see design patterns and languages the same way there is going to be conflict and non-cooperation.
Finally, many of the people who lead software teams do not have any knowledge of how software works. If you are going into surgery you want the lead surgeon to be a doctor just like the other surgeons. In technology, you often don't have a software engineer leading the project. You have a manager with project management or sales experience. This means they do not understand the challenges of the people who are actually doing the work. It also means that they do not have the skills to help a team when it becomes "stuck" or faces unrealistic combinations of resources, time, and money.
This is one of the reasons why I founded E3 systems. I wanted to do software development properly. Since we have launched the company we have gone through two major revisions to our Sully Business Intelligence Platform. We do an upgrade on average every three weeks and each time a potential customer has asked for a feature we have delivered it in the next release. We are pretty proud of that record and if you would like to know more you can contact us here.
So you can take your chances developing your own software and have a less than 50% chance of success or you can hire a team that does software development the way it is supposed to be done. I hope you give us a call.
Until next time.