← Back to list

I Was Good at Spring Boot Until a System Design Interview Humbled Me

For years, I believed I was on the right path.

Java Interview · 2026-06-03 15:40 · 41 claps · 5.4 min read paywalled
#java #spring-boot #design-systems #system-design-interview #software-engineering
Open on Medium ↗
Wiki topics: PRD · Product Design

I Was Good at Spring Boot Until a System Design Interview Humbled Me

For years, I believed I was on the right path.

I had spent countless hours learning Java, Spring Boot, Hibernate, REST APIs, Microservices, and databases. I could build complete applications from scratch. Give me a requirement, and I’d create controllers, services, repositories, DTOs, and APIs without breaking a sweat.

My confidence was high.

After all, I had successfully delivered projects, fixed production bugs, optimized SQL queries, and even mentored junior developers.

Then came a system design interview.

And within 30 minutes, I realized there was a huge gap between building applications and designing systems.

That interview didn’t just expose my weakness — it completely changed the way I think about software engineering.

The Interview Started Perfectly

The first round was exactly what I expected.

The interviewer asked:

  • Java Collections
  • Multithreading
  • Spring Boot Annotations
  • JPA and Hibernate
  • Microservices
  • REST APIs

Everything went smoothly.

I answered confidently.

I explained the difference between HashMap and ConcurrentHashMap.

I discussed @Transactional propagation levels.

I explained Kafka consumers and partitions.

The interviewer seemed satisfied.

Then he opened a blank document and asked:

“Let’s design a ticket booking system similar to BookMyShow.”

I immediately started thinking about entities.

Movie. Theater. Screen. Show. Booking.

The interviewer stopped me.

“Forget code for a moment. Think about the system.”

That was the moment I realized we were playing a completely different game.

Most Java Developers Focus on Implementation

This is not a criticism.

It’s simply how many of us learn.

When we start our careers, success is measured by our ability to write working code.

We focus on:

  • Writing APIs
  • Connecting databases
  • Creating UI screens
  • Fixing bugs
  • Deploying applications

Naturally, our brains become trained to think at the code level.

A requirement comes in.

We immediately think:

  • Which controller should I create?
  • Which service should I add?
  • Which database table should I use?

System design requires a different mindset.

Instead of thinking about classes, you think about traffic.

Instead of thinking about methods, you think about scale.

Instead of thinking about APIs, you think about architecture.

The Difference Between a Developer and a System Designer

Imagine someone asks:

“Design a food delivery application.”

A developer might think:

  • Create Restaurant API
  • Create Order API
  • Create Payment API

A system designer asks:

  • What happens during lunch hours when traffic increases 20x?
  • How do we handle thousands of concurrent orders?
  • How do we track drivers in real time?
  • What happens if the payment service fails?
  • How do we prevent double ordering?
  • How do we maintain availability during deployments?

Both perspectives are important.

But only one prepares you for senior engineering roles.

My Biggest Realization

The interviewer wasn’t interested in whether I could write code.

He already assumed I could.

That’s why my resume got me into the interview.

What he wanted to evaluate was whether I understood how software behaves in the real world.

Because real-world systems are messy.

Users don’t arrive one at a time.

Servers don’t run forever.

Databases become slow.

Networks fail.

Services crash.

Unexpected traffic appears.

A system that works perfectly for 100 users may completely collapse with 100,000 users.

That’s where system design becomes critical.

The Question That Broke My Confidence

The interviewer asked:

“Imagine tickets for a cricket world cup final become available. One million users try to book seats at exactly the same time. What happens?”

My answer:

“Users call the booking API and tickets get reserved.”

The interviewer smiled.

Then asked:

“What if ten thousand people try to book the same seat simultaneously?”

I had no answer.

The issue wasn’t coding.

The issue was concurrency.

The problem wasn’t Spring Boot.

The problem was architecture.

Real Systems Have Problems That Tutorials Rarely Teach

Most tutorials teach happy-path scenarios.

Create API. Save data. Return response.

But production systems face challenges such as:

Race Conditions

Two users trying to reserve the same seat.

Network Failures

One service cannot reach another.

Database Bottlenecks

Millions of reads overwhelming a database.

Traffic Spikes

Black Friday sales.

IPL ticket bookings.

Flash sales.

Distributed Transactions

Data spread across multiple services.

Partial Failures

Some components working while others fail.

These challenges cannot be solved by adding more annotations.

They require system design thinking.

Learning System Design Changed Everything

After that interview, I started studying topics I had previously ignored.

At first, it felt overwhelming.

Terms like:

  • Load Balancing
  • CAP Theorem
  • Eventual Consistency
  • Distributed Locks
  • Database Sharding
  • Replication
  • Message Queues

Sounded complicated.

But gradually, things started connecting.

I realized these concepts explain why large-scale systems work.

Understanding Scalability

One of the first lessons I learned was scalability.

Many applications start like this:

Users
  |
Application
  |
Database

This works perfectly.

Until growth arrives.

As users increase, response times increase.

Database connections become exhausted.

CPU usage spikes.

Memory fills up.

Now the architecture must evolve.

Users
  |
Load Balancer
  |
Multiple Application Instances
  |
Cache
  |
Database Cluster

Suddenly the conversation becomes much bigger than Spring Boot.

Why Caching Became My Favorite Topic

Before learning system design, I viewed performance problems as database problems.

Slow query?

Optimize SQL.

Still slow?

Upgrade server.

Then I learned Redis.

And it changed everything.

Imagine a product page receiving one million requests.

Without caching:

1,000,000 Requests
        |
    Database

The database suffers.

With Redis:

1,000,000 Requests
        |
      Redis
        |
    Database

Database load drops dramatically.

Response times improve.

Infrastructure costs decrease.

One simple concept can transform an entire system.

Kafka Taught Me a New Way to Think

One of the biggest mindset shifts came from Kafka.

Previously I thought:

Request arrives. Process immediately.

But what if processing takes time?

What if traffic spikes suddenly?

That’s where asynchronous processing shines.

Instead of processing instantly:

Client
  |
API
  |
Kafka
  |
Consumers

The API remains fast.

Consumers process requests independently.

The system becomes more resilient.

This pattern powers many large-scale platforms.

The Hidden Cost of Microservices

Many developers love microservices.

I did too.

Until I learned system design.

Microservices provide:

  • Independent deployment
  • Better scalability
  • Team autonomy

But they also introduce:

  • Network latency
  • Service discovery
  • Distributed tracing
  • Data consistency challenges
  • Increased operational complexity

The lesson?

Not every application needs microservices.

Sometimes a well-designed monolith is the better choice.

Understanding these trade-offs is exactly what system design teaches.

The Architecture Topics Every Java Developer Should Learn

If you’re serious about becoming a senior engineer, invest time in:

Databases

Learn:

  • Indexing
  • Query Optimization
  • Replication
  • Partitioning
  • Sharding

Caching

Learn:

  • Redis
  • Cache Aside Pattern
  • Write Through Cache
  • Cache Invalidation

Messaging Systems

Learn:

  • Kafka
  • RabbitMQ
  • Event-Driven Architecture

Cloud Computing

Learn:

  • AWS
  • EC2
  • S3
  • Load Balancers
  • Auto Scaling

Containers

Learn:

  • Docker
  • Kubernetes

Reliability

Learn:

  • Circuit Breakers
  • Retry Mechanisms
  • Rate Limiting
  • Fault Tolerance

Observability

Learn:

  • Logging
  • Metrics
  • Monitoring
  • Distributed Tracing

The Roadmap I Wish Someone Had Given Me Earlier

After mastering Spring Boot:

Phase 1

  • SQL Deep Dive
  • PostgreSQL Internals
  • Redis

Phase 2

  • Kafka
  • Event-Driven Systems
  • Messaging Patterns

Phase 3

  • System Design Fundamentals
  • High-Level Design
  • Low-Level Design

Phase 4

  • Docker
  • Kubernetes

Phase 5

  • AWS

Phase 6

  • Distributed Systems
  • Consistency Models
  • Consensus Algorithms

Phase 7

  • AI Agents
  • Spring AI
  • Modern Architectures

This roadmap would have saved me years.

What Senior Engineers Actually Do

One misconception I had early in my career was:

Senior engineers write more code.

Not necessarily.

Many senior engineers spend most of their time:

  • Designing systems
  • Reviewing architectures
  • Identifying bottlenecks
  • Planning scalability
  • Improving reliability
  • Mentoring teams

The impact comes from decisions, not lines of code.

The Lesson That Stayed With Me

That interview taught me something I will never forget.

Frameworks come and go.

Today it’s Spring Boot.

Tomorrow it may be something else.

But architecture principles remain valuable for decades.

Load balancing. Caching. Messaging. Scalability. Reliability.

These concepts are timeless.

Final Thoughts

If you’re currently learning Spring Boot, keep going.

It’s an excellent framework and one of the best technologies for backend development.

But don’t stop there.

The biggest leap in your career will happen when you move from asking:

“How do I build this feature?”

to asking:

“How will this system behave when a million users use it simultaneously?”

That shift transformed the way I think about software engineering.

And it all started with one interview that humbled me.

Looking back, it was one of the best things that ever happened to my career.


메타데이터
post_id
929b20c64772
slug
i-was-good-at-spring-boot-until-a-system-design-interview-humbled-me-929b20c64772
url
https://medium.com/@kaurharjeet122/i-was-good-at-spring-boot-until-a-system-design-interview-humbled-me-929b20c64772
canonical_url
https://medium.com/@kaurharjeet122/i-was-good-at-spring-boot-until-a-system-design-interview-humbled-me-929b20c64772
author_url
https://medium.com/@kaurharjeet122
status
ok
fetched_at
2026-06-12 07:40:50