In this blog post, I’m describing 3 key elements that make software development successful and why they are important. I hope I can help a little in your journey of building an awesome app!
During my career as a software developer and as a normal end user, I have seen it all: The good, The bad and The ugly. I think most of the time, software is bad and fails because key elements of what makes software development successful are rushed or missed. I think also that sometimes software development is approached with a certain degree of naivety and key elements are missed because nobody knew about them.
Understand the problem
The full understanding of the problem is quite crucial to make software development successful. And, the reasons for that are quite different.
The first reason that comes to my mind is, that the understanding of a problem is like the treatment of a disease. A doctor asks a lot of questions even for obvious matters. A doctor is doing that to understand the reason for the indisposition and to treat the problem in a correct manner. Nobody wants to be guinea pig! Also, the doctor does not base its opinion on the patients analyses. Trust me, if you tell a doctor your stomach hurts because the bacteria are upside down – the doctor will not believe you. Instead, the doctor will ask you how big the pain in your stomach is and what you ate the previous day. It is similar to software development. It is OK to take the comments from the user as a starting point but the analyses has to be done by an expert.
Another reason why it is important to fully understand a problem, is that a problem can have multiple aspects to it. And, when examining a problem for the first time, not all aspects might be obvious immediately. A good example might be a hamburger. Initially, you could say that a hamburger consists of a bun and a patty. But for some people, a hamburger is only a hamburger when it has a slice of gherkin on it. Other may prefer ketchup or want cheese on top. And some people might prefer a vegan option instead of meat. Now, in software development it is an option to provide a bare-bone solution (bun and patty) – but, when diving deeper into different aspects (with or without gherkin, cheese, vegan), the solution becomes clearer.
Create a feedback loop
Imagine you are a race car builder. You understand the problem – the competition is faster than you because your car is too slow. So, you invest time and heaps of money into development of a new race car. On paper, the numbers are better. You are proud and finalize development. You announce to the press that you have a new car and that you enter Le Mans. And then, one fine day when the sun shines onto the famous French race track, a racing driver starts the engine and drives a couple of laps for the first time. The driver stops and runs away. (Actually, the driver joined another team.)
Weird story. But the point I like to make is, that it is important to involve the user of the software as early as possible. To be honest, being a tester of alpha-versions is not as exiting as being a race driver. So it is important to keep the users at testing and providing feedback (which is an art in itself). Interacting with the user during development creates higher chances to build a solution the user is happy with!
Deliver a solution
When I have the problem that I’m hungry, I go to a restaurant. I order, wait and the service is so kind to bring the food to my table. Let’s dig in and solve my problem (being hungry). But – I don’t have a fork and knife. In this simple example, the foundation to solve my problem is provided (a meal) – but I don’t have a solution. Because to be able to solve my problem, I have to be able to eat the meal. I would leave the restaurant and get something not so good but quick around the corner.
The analogy to software development is that the actual development process (and compiling without errors) is not the final solution. In some cases it is necessary to provide additional elements to finalize the solution. Examples are users in a platform, templates for creativity applications or something simple as a list of countries the user can select from.
I did deep dive into what makes a software development successful that involves a software vendor here!