Logo
All writing
4 min read

Building a Restaurant Platform Taught Me 5 Things Side Projects Never Did

In my side projects, the only user was me. Then I started working on a platform real restaurants depend on, and everything I thought I knew about finished changed.

Software EngineeringWeb DevelopmentReactCareer

In my side projects, the only user was me.

Then I started working on a restaurant platform that real businesses depend on to take orders, and everything I thought I knew about "finished" changed.

TabTake is an all-in-one restaurant platform. Online ordering, delivery and collection, QR ordering at the table, reservations, menu management, kitchen printing, and multiple locations from one dashboard.

I work across the frontend and the backend on it.

Before this, I had built plenty of projects. A tailor shop management system. A game discovery platform. A Notion-style collaborative table. IoT systems for my own home.

I was proud of them. I still am.

But side projects and production software are not the same thing.

Here are five things building a real platform taught me that my own projects never did.

1. Your user is not sitting calmly at a desk

When I built my own projects, I imagined a user like me.

Patient. On a laptop. Reading the interface carefully.

That user does not exist in a restaurant.

The real user is a staff member during the Friday evening rush. Three orders are waiting. A delivery driver is at the door. The phone is ringing.

They are not going to read your helpful tooltip.

They are going to tap the biggest thing on the screen.

That changed how I build interfaces. Bigger targets. Fewer choices on screen at once. The most common action always in the same place.

If someone has to think about your interface while under pressure, the interface has failed. Not the person.

2. The edge cases are the product

In a side project, I built the happy path.

Order placed. Order confirmed. Done.

Real hospitality is not a happy path.

The kitchen printer runs out of paper. The customer orders a dish that just sold out. A delivery address sits right on the boundary of a delivery zone. An order arrives one minute before closing time.

None of these are rare. They happen every single day.

I used to think of these as edge cases to handle later.

Now I understand something different.

For the restaurant, those moments are not edges. They are the job. And the software that handles them badly is the software that gets replaced.

The happy path is what you demo. The edge cases are what you get paid for.

3. Multi-tenant changes how you think about everything

My own projects had one user and one set of data.

A platform serving many restaurants does not work like that.

One restaurant group can have several locations. Each location has its own menu, its own opening hours, its own delivery zones, its own staff and their permissions.

Every single feature has to answer a question I never had to ask before:

Whose data is this, and who is allowed to see it?

I had to start thinking about data boundaries before thinking about the UI. Not after.

That is a habit I did not have a year ago, and it is probably the biggest technical shift in how I work.

4. Slow is the same as broken

On my own projects, if a page took three seconds, I shrugged.

It worked. It just took a moment.

A hungry customer on their phone does not shrug. They leave.

A slow page in an ordering flow is not a performance issue. It is a lost order for a business that is paying for the platform.

That reframing made performance feel real to me in a way no tutorial had.

I started paying real attention to what loads first, what can wait, what can be cached, and what should never block the screen.

Nobody thanks you for a fast page. They just finish their order.

5. You are writing for the person who comes after you

This is the one I did not expect.

On a personal project, I could write something clever, understand it perfectly, and move on.

Six months later, on a real codebase, someone else opens that file. Sometimes that someone is me, and I remember nothing.

Working with a team taught me that clear code beats clever code every time.

Good names. Small pieces. Comments that explain why, not what.

I also learned to read other people's code properly before changing it. Most of the work on a mature product is not writing new code. It is understanding what already exists and changing it without breaking anything.

The best code is not the code that impresses people. It is the code someone else can safely change.

What actually changed

When I look back at my first side projects and compare them to how I work now, the syntax has not changed much.

It is still React. Still Next.js. Still TypeScript and Node.

What changed is what I think about before writing anything.

Who is going to use this, and in what situation.

What happens when it goes wrong.

Whose data is this.

What happens when this is slow.

Who maintains this after me.

Side projects taught me how to build things.

Production taught me how to build things that other people can depend on.

If you are still only building your own projects, keep building them. They are how I got here, and they are still the fastest way to learn.

But if you get the chance to work on something real, with real users and real consequences, take it.

It will be uncomfortable.

That discomfort is the lesson.