Why Many Software Projects Fail
In professional software development, there are many aspects to be aware of for achieving excellent results. Last time, we talked about The Most Important Thing in Software Engineering , which is understanding customer needs in order to “build the right thing”. Assuming you have invested well in this first step, you might fall into a different trap that I want to illustrate with an example.
Imagine you want to buy a bicycle. You are frequently putting in long hours in front of the computer and therefore decide to be more active to support your health and wellbeing. Excited about this idea, you browse several online shops for a new bicycle. There is even a section where you can configure a bike to your personal needs. You click on the wizard that advises you about your new bike. After entering your size and weight, it asks you to rate following needs:
- Speed: How fast do you want to ride your bike?
- Transportable: How heavy or light is your bike allowed to be? Does it need to be foldable?
- Pedal support: Do you want to ride by muscle or get supported by an electric engine?
- Distance and altitude: How long is your typical trip and how much altitude do you need to climb?
- Storage space: How much space do you need for transportation, e.g. is any bag space needed?
- Accessories: Which lights, bells, helmet, seat etc. do you need?
Excited about all these options, you max out all the criteria. Speed is good, because who knows, maybe you want to participate in a local race someday. Transportable is important since you might want to take your bike with you in the car or in a train. It should be light, so you can carry it over a staircase. Of course, electric pedal support is popular, and it can compensate for just starting to get back into shape. It should have a strong engine and a large battery for reaching your destination fast, even in high altitude. Sometimes you want to carry a few bags around, maybe for picnicking with your family. And for sure you need a comfortable seat, very good lights and a bell that is loud like a ship’s horn to make those nasty car drivers aware of you.
You click on the next button to see a summary of your ideal bike. Wow, there are a lot of features: Tons of gears, a completely foldable frame, the best electric pedal support on the market, a huge battery and many other extras. The price is completely mind-blowing and well above what you originally intended to spend. But after all, it’s for your health plus it shall be good enough for many years to come. So you decide to order it full of anticipation.
As it turns out, delivery takes way longer than expected. You contact customer support multiple times, and they tell you about some special parts of your bike not being available on store. They need to wait for the supplier and ask you to be patient. Two months later, your bike finally arrives. It has a massive engine and battery, enabling you to drive long distances really fast and without much effort if you want. However, it is very heavy. Carrying it over a staircase will not work, and even lifting the folded bike into your car is a job for two people. Again, you contact customer support to complain about the weight. You paid premium prices, but they got you a monster bike instead of a light one. Customer support says they built you the lightest bike they could under your given requirements. The strong engine and battery account for more than half of the total weight. A bit irritated, you go back to riding your bike. A few months later, while on a trip, your gear shift stops working. You bring your bike to a mechanic to get it fixed. At least you are still within warranty and don’t need to pay the repair yourself. However, the mechanic tells you he cannot fix it. The gearshift is a special model that is tightly coupled with the electric engine and therefore needs to be fixed by the manufacturer. A bit furious, you call customer support, and they tell you to prepare the bike for them picking it up for repair. Now it will take another few weeks until you have your bike back in a normal state for riding…
What went wrong here? The bike manufacturer did a bad job in advising you and failed to communicate tradeoffs. Instead, the shop could have done the following:
- Communicate clearly that certain features and options will require longer (possibly unknown) delivery times. Show which items are on store and which are currently unavailable.
- Detect and explain conflicts like a strong engine plus battery VS light transportation expectations. Ask the client to decide between one of these options.
- Indicate long-term implications for maintenance. For example, they could explain that the highly advanced gear shift can only be repaired by the manufacturer itself and offer alternative (more common) systems as a choice.
Similar dynamics can be observed in software development. Results tend to be poor when there is no awareness about the need for tradeoffs and priorities. Here are some common aspects to consider in most software projects:
- Features
- Quality
- Cost
- Delivery speed
- Performance and resource usage
- Security
These dimensions are connected to each other which can lead to conflicts. Finding appropriate tradeoffs is one of the most important skills of an experienced software engineer. Why? Because failing to do this will result in massive problems like huge delivery delays, exploding costs, expensive bugs and security breaches.
What has been your experience with prioritizing and finding suitable tradeoffs?
Note: You can also find this episode on YouTube and Spotify.