The Seven Deadly Sins of Software Development
Avoid the seven common mistakes of software development that no one should be condemned to repeat.
SIN #1: The sooner you start, the sooner you finish!
How to build a team that would get you forward as soon as possible? The first sin of software projects is thinking “better done than perfect” when it comes to building a team – and then scraping the developers together from wherever you get them fastest and cheapest.
The productivity difference of developers can be massive: a small but highly skilled and efficient team will get shit done faster than a large team of average developers. It’s better to use time to build a top notch team than to scrape together an average team and fix the problems after they have wasted months of time and lots of money.
SIN #2: Overplanning
Thinking before acting is always good, but overplanning is a waste of time. Of course you have an idea of the end result, but as we know, the universe throws obstacles in your path and there’s no way to predict what happens during the ride.
Software development is often a process where you figure things out as you go. Working iteratively saves time and money, so that you don’t suddenly realise the world changed while you were focusing on a product that you didn’t prove was worth building.
In most cases planning exact specs is a waste of time – it’s smarter to make fast iterations instead of excessive amount of guesses.
SIN #3: Sticking with old habits
When developing something from scratch, the first choice you have to make is if you’re building a prototype, whether you need fast (no matter if there’s any later use for the work done), or should you choose the technologies that enable you to build something sustainable for the future, right from the beginning. If your idea has already been validated, it’s pretty clear you should choose something that’s future-proof.
What to consider when thinking of the technologies? What goals or vision does your business have? Will there e.g. be a massive amount of data to process? How much scaling do you expect? Choose something that won’t slow you down in the future but also avoid choosing something too heavy for your use case. From the team building point of view: can you find people who are familiar with the technologies and are they willing to use the ones chosen?
Avoid these when making technology choices:
“This technology has been used for decades, it’ll still be a valid choice for upcoming years.” We all know there’s still lots of Cobol running out there but we also know it probably won’t be the best choice for the future. So, do not choose something that’s already dead.
Choosing something so exotic it’s hard to build a team around it or you’re stuck with no chance to change your vendor (if you’re using outside help).
Choose something that will scale with your business, something that hasn’t already become obsolete, and avoid technologies so exotic you cannot build a team around them.
SIN #4: More is more!
More isn’t more when it comes to code.
Too often you end up adding features even though the right decision would be skipping them (we will come back to this later). Every line of code is a seedbed for bugs and more work to maintain. So thinking before coding is better than coding fiercely without thinking.
The size of your team or the speed of your developers aren’t a guarantee of quality or productivity. The amount of code doesn’t really matter. What matters is that the code is clean, functional and well documented and does what it’s supposed to do. Think about the business goals; you probably should not include all the features you are in love with, only what’s really needed.
SIN #5: What would they know?
Creating something new always requires a strong vision. You might even have a situation where you’re developing something people aren’t aware they will be needing. But don’t get blinded by your vision and ignore your users: researching, involving and listening to them will be essential for your success.
Let’s assume you’ve done the market research and you are actually building something there’s a demand for. As the expert of you product it might not be easy to step into your end users shoes. And people are the wild card when it comes to creating successful software. Do you actually know how your end customers are behaving or are you just making assumptions?
Listen to your users right from the beginning and never assume what they think and how they behave, and you are a long way to building something your end users will love. At the end of the day customers are the ones you have to convince, and if you’re building a product they don’t know how to use, they just aren’t going to use it. And the other way around; any research or mind blowing user interface won’t save you if the code underneath isn’t delivering. Which leads us to the next sin.
SIN #6: Don’t look back!
We’ve all heard the phrase “let’s just fix this quickly and get back to it when we have more time”. Have you ever had the time? Didn’t think so. Let’s talk about technical debt.
It might feel like a waste of time to invest your time in testing and refactoring if you’re in a hurry to get something out there. But if you aren’t in a prototype phase anymore, it’s the only way to ensure your codebase won’t get fluffy and end up slowing down your business in the future. Undocumented, poorly tested code, and bubble gum fixes are also an efficient way to drive away your developers. Make sure the quality is good from the beginning and you will avoid the situation where developers have to use days to do something simple just because the codebase is a mess.
SIN #7: Just do it!
Sometimes developing software is seen as just writing code. If you have experience of programming yourself you probably know it’s actually creative work. The best way of killing the motivation of your developers is expecting them to work like robots: you push some specs in, hear some crackle and then lines of code just pop out of your resources.
We are all different; some love to maintain existing code, some love creating new. Some like staying in their comfort zone, some are hungry to learn and crave new challenges. Know your team and support them individually. One task might light up one but cause nightmares to another. People are at their best when they have motivating work to be done. And no ball pools or fancy office decoration will save you if the work itself feels tedious.
Don’t make the mistake of suffocating your team’s creativity. Hiring smart people and not getting their potential to full use is just a pure waste of talent and money.
Is the sum of all vices constant? What’s your sin?
We had a great discussion at the event and it seems that there are more than seven deadly sins when it comes to software development. And here’s the additional one we had a good chat about:
#8 Promises you cannot keep
Have you bumped into eager sales people who promise the world to customers and ask the dev team afterwards if their promises are even possible to keep? Apparently this is the one vice that generates lots of heat around product development so we recommend also to avoid over promising sales people!