Simo Virokannas

Writings and ramblings

There is a persistent myth in software development that great products emerge from chaos, that a small band of developers, fueled by wit, caffeine and improvisation can figure it out as they go. In reality, most failed software projects do not fail because the team lacked talent. They fail because they lacked a plan.

A plan is not red tape. A plan is not a gantt chart no one holds on to. A plan is not “we’ll do agile development”.

Planning is the deliberate act of deciding what matters, what comes first, and what can wait.

When There Is No Plan

Software is deceptively intangible, you cannot see it growing. Progress lives inside hundreds of little abstractions in code, architecture, APIs and edge cases.

Without a plan, things will still happen, just not the way you’d like. In a blast of semantic irony, the first thing you’ll lose sight of is scope.

When there’s no plan, assumptions take its place. This means the scope organically grows to accommodate all of those assumptions. Even with a shared idea of what the end goal is, everyone involved will have their own views of how the project should get done. All of these views are inherently correct.

After the scope monster has consumed all the views, the next thing that vanishes in a puff of logic is the estimate. And even if you agree that estimates are never correct, they usually do provide a ballpark: is this going to take days, weeks or months (if the project takes years, split it up, it’ll be obsolete on launch day).

Maybe estimates don’t matter for your project – it’s too important to fail and it just needs to be completed no matter the cost – the next casualty is quality. Unchecked assumptions and missing blueprints are a breeding ground for technical debt. Technical debt leads to degradation of overall code quality.

Once estimate and quality are gone, following very close behind is trust. If your project is backed by investors, or has been commissioned, or even if you yourself are the customer, trust will be eroded if deadlines or undocumented assumptions aren’t met.

When There Is A Plan

Planning creates alignment. It forces clarity. It makes trade-offs explicit instead of accidental.

When variables change, as they always do, a good roadmap is what allows a project to survive its own birth.

Most importantly, a plan is the process of transforming hope into strategy.

What Planning Actually Means

A well-planned software project usually includes:

1. Clear Problem Definition

Software development is problem solving – even if big audiences are unaware of the problem. If no one needs the software, or realizes they need it when they see it, why would you be making it?

Before discussing features, define the problem in one or two precise paragraphs.

  • Who is this for?
  • What pain or problem does it remove?
  • What measurable outcome defines success?

If any one of these three is fuzzy, everything downstream will be unstable.

2. Scope Definition (What Is Not Included)

An often-cited but unverified quote by Michelangelo goes something like ‘Every block of stone has a statue inside it and it is the task of the sculptor to discover it.‘ or ‘It was easy – I just removed everything that wasn’t David‘.

You could say software is a very long sequence of “ON”-bits, you just need to figure out which ones turn off to make it functional. But in a larger sense, you need to decisively chip away everything that is not the project.

Define:

  • Core features required for first delivery
  • Explicit exclusions
  • Assumptions that, if false, would change the approach

The most powerful tool in planning meetings is the sentence:

“That’s a great idea – for version two.”

3. Architecture Decisions Early

Not every technical decision must be finalized up front. But some choices dramatically affect everything else:

  • Monolithic or distributed?
  • Hosted or on-prem?
  • Compiled binary or a bytecode / interpreted project?
  • What third-party integrations are needed?
  • What is the authentication and authorization model?
  • What are the core data model principles*

Early architectural clarity reduces expensive rewrites later.

*it is important not to make the data model rigid until halfway through the project at earliest. More on this in a follow-up article.

4. Milestones Instead of a Single Deadline

A single launch date is not a plan. It is a cliff.

Break delivery into:

  • Internal technical milestones. For each separate component, you can internally release small tech tests that developers can play around with. If you have something developers can showcase to each other, that creates positive pressure to excel.
  • MVP milestone. It’s important everyone understands what Minimum Viable Product means. It is minimum, it is viable, and it is a product. It is something you could sell, but might not want to just yet.
  • Limited user release (alpha, beta, prerelease, whatever you want to call it)
  • Public release

Milestones create checkpoints for reassessment. They also create psychological momentum.

The Roadmap: A Living Instrument

Roadmap is not a promise, it is a directional commitment. It is an integral part of a solid plan, because no project ever stops at version 1.0.

Roadmap answers:

  • What are we building first?
  • What comes next?
  • Why this order?

The roadmap exists to guide decisions when trade-offs appear.

When new requests arrive, you will compare them against the roadmap:

  • Does this accelerate our goal?
  • Does it delay first delivery?
  • Is this a distraction disguised as opportunity?

Without a roadmap, every request feels urgent. With a roadmap, you can say “not yet” without hesitation.

“But Requirements Change”

Yes, they will. Markets shift. Users behave differently than expected. Investors and stakeholders rethink priorities.

This is not a failure of planning. It is the environment in which any planning operates.

A good roadmap is:

  • Flexible in implementation
  • Stable in direction

If the goal is stable (solve this problem for these users and this is how we know that’s accomplished), changing some features does not derail the project. It refines it.

Result: Planning Reduces Stress

Sometimes there’s resistance to planning because it feels restrictive.

In reality, lack of planning is what creates stress. Late surprises lead to emergency refactors, then scope explosions, reputational damage and ultimately burnout.

Planning shifts stress from crisis response to controlled decision-making by replacing panic with intention.

Excercise: Start Planning

You’re beginning a new software project tomorrow.

  1. Write a one-page problem definition.
  2. Perform the steps 1-4 under the subheading “What Planning Actually Means”.
  3. Deliver!


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.