DEV Community

Dulaj Thiwanka
Dulaj Thiwanka

Posted on

Before I Write Any Code, I Do This First (A Practical Project Walkthrough)

Thinking

Most people believe software projects fail because of bad code.

That’s rarely true.

They fail because:

  • The problem wasn’t clear
  • The scope was too big
  • Decisions were made too late
  • Structure was an afterthought

I used to jump straight into coding. It felt productive. It felt exciting.

But I kept hitting the same wall:

  • Rewriting things
  • Adding features endlessly
  • Losing motivation halfway
  • Abandoning projects that should have worked

Eventually, I realized something simple but uncomfortable:

If I’m confused while building, it’s because I was confused before I started.

So now, before I write any code, I structure the project carefully. This article shows exactly how, step by step, using a real project example—no tech background required.


The Example Project We’ll Use

To keep this real and relatable, let’s use a practical example:

A very simple expense-tracking app
(Not a startup, not a “next big thing” — just something useful.)

This makes it easier to see how each step affects real decisions.


Step 1: I Slow Down and Kill the “Build Something” Urge

Defining the Problem

The first thing I do is nothing.

No editor.
No framework.
No repo.

Why?

Because excitement is dangerous. When you’re excited, you say yes to everything—and regret it later.

Instead, I open a blank document and write one sentence:

“What problem am I trying to solve?”

For our example, the wrong answer would be:

  • “People need a finance app”

The better answer is:

“People don’t know where their money goes, and most tracking apps feel too complex to use daily.”

This sentence becomes the foundation of everything else.


Step 2: I Remove All Technical Language on Purpose

Removing Technical Complexity
At this stage, technical words are banned.

No:

  • Database
  • API
  • Backend
  • UI
  • Stack

Only human language.

If I can’t explain the project without tech words, it means I don’t understand it well enough.

This step forces clarity—and clarity is power.


Step 3: I Choose a Single, Specific User

Choosing One Target User

This is where many projects quietly fail.

I don’t build for:

  • “Everyone”
  • “All users”
  • “The market”

I build for one type of person.

For our expense app:

“A busy person who wants to quickly log expenses without thinking.”

This single decision eliminates dozens of future arguments:

  • Do we need advanced charts? → No
  • Do we need onboarding tutorials? → Minimal
  • Do we need customization? → Probably not

When the user is clear, complexity drops.


Step 4: I Write the User’s Day as a Story

Writing the User Story

Now I imagine the project in real life.

I write something like this:

“It’s the end of the day.
The user bought lunch and paid for transport.
They open the app.
They immediately see an ‘Add Expense’ option.
They enter amount and category.
They see today’s total spending.
They close the app feeling calm and aware.”

This story does several things:

  • It removes unnecessary features
  • It highlights the main action
  • It shows what really matters

If something doesn’t appear in the story, it probably doesn’t belong in version one.


Step 5: I Define the Core Promise of the Project

Defining the Core Promise

Now I write one sentence called the core promise:

“This app helps you quickly record expenses and see how much you spent today.”

Not five promises.
Not a feature list.

Just one promise.

Every future decision must support this sentence.
If it doesn’t, it waits.


Step 6: I Ruthlessly Cut Features (Before They Exist)

Ruthlessly Cut Features

This is uncomfortable—but critical.

I create a section called:

“Things This Project Will NOT Do (Yet)”

For our example:

  • No monthly budgeting
  • No charts or graphs
  • No bank syncing
  • No user accounts
  • No cloud backup
  • No AI insights

Writing this down feels risky, but it creates focus and peace.

Instead of feeling like I’m behind, I feel intentional.


Step 7: I Break the Project Into Mental Building Blocks

Breaking the Project into Parts

Now—and only now—I think about structure.

Not code.
Not files.

Just parts.

For the expense tracker:

  1. Input expenses
  2. Save expenses
  3. Show today’s total
  4. Basic settings

That’s the entire system.

If I can’t describe the project in 4–6 blocks, it’s too big.


Step 8: I Sketch the Flow (Very Rough)

Sketching the Flow
I might draw:

  • Boxes on paper
  • Arrows between screens
  • Or just bullet points

Example flow:

  • Home → Add Expense → Back to Home
  • Home → Today’s Summary

No design.
No polish.

Just logic.

This step catches problems early—when fixing them is cheap.


Step 9: I Write a “Project Blueprint” Document

Project Blueprint Document

Before coding, I always write this. Always.

Here’s what it looks like for our example:


Project Name

Simple Expense Tracker

Problem

People struggle to track daily spending because existing apps feel complex.

Target User

Busy individuals who want fast, low-effort expense tracking.

Core Promise

Log expenses quickly and see daily totals.

Main Actions

  • Add expense
  • View today’s spending

Out of Scope

Budgets, charts, syncing, accounts, analytics

Success Looks Like

A user can add an expense in under 10 seconds without confusion.


This document is my anchor.

Future me will thank present me for this.


Step 10: Only Now Do I Touch Technology

Only after everything above do I ask:

  • Is this web or mobile?
  • How simple can the tech be?
  • What’s the least complex solution?

Because now:

  • Overengineering feels silly
  • Decisions are obvious
  • Trade-offs are clear

Technology becomes a tool—not the driver.


Why This Process Works So Well

It looks slow.
It feels boring at first.

But it saves enormous time later by:

  • Reducing rewrites
  • Preventing scope creep
  • Making decisions easier
  • Increasing the chance of finishing

You trade early excitement for long-term momentum.


This Isn’t Just for Developers

This approach works for:

  • SaaS ideas
  • Freelance projects
  • Content platforms
  • Newsletters
  • Startups
  • Personal side projects

The pattern is universal:
Clarity → Structure → Execution


Final Thought

Final Thought

Writing code feels productive.

But knowing exactly what you’re building is what actually gets projects finished.

Now, whenever I feel stuck, I ask myself:

“Did I skip the thinking part?”

Most of the time, the answer is yes.

So I go back—before the code.

Top comments (0)