blog thumbnail
entrepreneurship
startup

Your Architecture Is Probably Bad

Deric Yee
26th November 2025

Every engineer has joined a new project and thought:

“Wow, this system is perfect. I wouldn’t change anything.”

That feeling lasts about 6 seconds.

Whether you’re building a learning portal, job-matching engine, student analytics system, or an assessment pipeline, technical debt appears daily. Not because we’re careless, but because we’re shipping to real students with real deadlines and real business needs.

I love clean architecture. I enjoy thinking about modular systems, caching strategies, microservices vs monoliths, event streams, all of it. But I also accept a hard truth:

My architecture is bad, and yours is too. Not today, but eventually.

Let me explain.

Why Your Architecture Will Become Bad

Your system might be “good” right now.

• Maybe it scales to 10x your current load

• Maybe your team understands how everything fits together

• Maybe your patterns are clean

But architecture isn’t judged by the present. It’s judged by how quickly it becomes obsolete.

Your architecture becomes “bad” when:

• Your team grows from 3 engineers to 20

• You shift from bootcamp-only to LMS + job platform + B2B partnerships

• New student flows require new data structures

• Compliance requirements force data residency rules

• Performance expectations change (e.g., interactive editors, real-time code execution)

Great engineers design for change & versatility, not perfection.

And most “bad” architecture isn’t caused by bad engineers.

It’s caused by business decisions that require speed, not purity.

In a startup, that’s normal.

Is There Hope? Yes, But Not the Way You Think.

Technical debt is part of the process.

It’s not evil.

Sometimes it’s the only way to survive.

But debt must eventually be paid.

The trick is knowing how to build for now while keeping the door open for later.

Build for your current scale, while anticipating that the future will look nothing like today.

At Sigma School, we don’t pretend we know exactly where we’ll be in 2 years.

Student behavior changes. Hiring partner needs to change. The LMS will evolve.

Jobier grows in ways we can’t predict.

The only constant is that everything will change.

So the job isn’t to create “perfect” architecture.

The job is to create malleable architecture.

Delay Decisions Whenever Possible

One of the best architectural decisions is simply:

Not deciding yet.

Here’s a (relatable) example:

Let’s say you’re storing student progress data. You know that eventually you’ll need a more complex warehouse or analytics system. But right now:

• You only have a few thousand students

• Queries are simple

• Dashboards are lightweight

• Scale is not the issue

So yes, just put the data in Postgres.

But here’s where many engineers mess up:

They go “all in” on Postgres features:

• Advanced JSONB queries

• Stored procedures

• Tight coupling and JOINs everywhere

Suddenly… the system is married to Postgres.

When you need to migrate?

Pain.

Heavy pain.

Design Around the Fact that Your Current Solution is Temporary

You might use Postgres now, but you should build:

• flatter data structures

• simpler schema

• fewer assumptions

• loosely coupled services

This way, migrating to BigQuery, ClickHouse, or a custom analytics pipeline is not hell.

Great architecture isn’t about being scalable today.

It’s about being changeable tomorrow.

Modularity > cleanliness

Adaptability > premature optimization

Future-proofing > future-guessing

Is This Procrastination? No.

It’s strategic patience.

As engineers, we don’t know:

• how user behavior will shift

• what new features will become core

• how markets will evolve

• which technology will emerge next year

• how the business will pivot

So instead of building a “perfect” system based on assumptions…

We build a good system that’s easy to change once we know more.

That’s the real job.

The Sigma School Philosophy

Our LMS, student support pipeline, matching engine, Jobier backend, all follow the same principles:

• Build the simplest system that solves today’s problem

• Keep components modular

• Avoid tight coupling unless absolutely necessary

• Document every assumption

• Prepare to migrate, rewrite, or replace parts as we grow

• Don’t over-engineer until real data demands it

The future always surprises us.

So instead of pretending to predict it, we build for flexibility.

Final Thought

Your architecture is bad. Mine is too.

Not because we’re sloppy, but because things change.

And that’s the point:

Great architecture isn’t designed to be perfect.

It’s designed to be rewritten.

Related Blogs