Last week software development was frustratingly slow again. I'd fallen into one of the two major ways to waste time in software development... again. Here's a quick overview of what those two time wasters are., and how to avoid them.

Time Waster 1: Writing Code Without Planning

You may get started faster if you skip the planning phase, and write code almost without thinking. However, you're almost guaranteed to get stuck later due to not thinking about how you structure your code. This leads to code rewrites; lots of rewrites. That can suck up a lot of time.

Time Waster 2: Overthinking Design Decisions

Thinking carefully about how you structure the code will cut down on repeated code rewrites. It won't eliminate rewrites entirely, though, because you're often having to make decisions without all the data and experience you need. And, requirements change.

Trying to "get things perfect" leads to debilitating overthinking. It's possible to waste huge amounts of time agonizing over every single decision, and that really adds up.

What To Do About It

First, figure out which tendency you have. I'm guessing more software developers are like me, and have a tendency to overthink (after getting caught out by time waster 1 a few times too often...). That's what was driving the slow progress last week. I underestimated the time needed for tasks due to forgetting about the extra support code that would be needed. Then, overthinking kicked in as I, once again, tried to "future-proof" design decisions.

Fixing Time Waster 1 (Writing Code Without Planning)

If you tend to write code without planning, then it's time to train yourself to stop, and think about the code structure. It sounds simple, but can be hard to do when you're used to diving right in.

Perhaps your frustration with code rewrites can be an added motivator, but beware of flipping over to the other extreme (overthinking). You want to aim for that sweet-spot in the middle where you're minimising both unnecessary code rewrites and overthinking.

Fixing Time Waster 2 (Overthinking)

If overthinking is your thing, then you need to limit the decision time. You could try setting a time limit, after which you just go with the best option you've thought of. Also, bear in mind the results of repeated experiments in quality vs quantity. For example:

A ceramics teacher divided the class into two. One half were told that they'd be graded on the quantity of ceramic pots they produced. The other half were told they only needed to make one pot, and would be graded on quality. The class went away and followed their respective objectives. Surprisingly, the highest quality pots came from the group being graded on quantity.

Why is this? Well, the group cranking out pots quickly had more learning cycles. Each new pot they made was a chance to experiment and learn. So, learning from their mistakes and successes, they got better and better. I've been told this experiment has been done in other fields, with the same results.

It is through producing large quantity that you gain higher quality. And, as a bonus, you deliver higher quality at higher speed. So, work hard at cutting out the overthinking, and aim for that sweet spot in the middle.

Remember, You're Fighting a Habit

I've known about the quality vs quantity experiment for years, yet I still get sucked into overthinking from time to time. That's because it's a habit, and will take consistent effort to overcome. So, cut yourself some slack when you slip up, and then resolve to do better next time. And the next time after that. And, the next time...