Less than a year ago, all of my Python code lived in a single file called main.py. I wondered what Classes were all about. I didn't know what an API was. I had absolutely no knowledge of databases or Docker. I would browse GitHub every now and then — repository filled with folders, subfolders, configuration files, requirements files, test files — and wonder what kind of magic was stored in there. It looked less like code and more like an entire civilisation, and I couldn't imagine ever being the person who built one.
Then I started learning properly. Not just tutorials — actual building, actual breaking things, actual confusion, actual breakthrough. And yesterday, I shipped a fully functional application.
- Next.js (frontend)
- Google login via NextAuth.js
- FastAPI (backend)
- Supabase (Postgres)
- Docker (local dev)
- ngrok (public tunneling)
To folks in the industry, I know: this is Tuesday. This is a 5-minute scaffold. I know. But to me, less than a year ago, this was the Moon.
What Actually Changed
The technical growth is one thing. What I didn't anticipate was how much the mental model would shift.
At first I wasn't using Docker at all. I was running three terminal windows in parallel — one for the frontend, one for the backend, one for the database — and it was a permanent state of mild chaos. Tabs everywhere. "Which terminal is this?" Processes dying mysteriously. Starting over. Now I run everything with one command. One. The whole thing spins up, the services find each other, and I can think about the actual problem instead of the scaffolding.
This is what experience actually looks like, I think. Not necessarily knowing more facts, but having fewer things to worry about so your attention can go where it matters.
On AI-Assisted Development
Yes, AI wrote the frontend. I'm not going to pretend otherwise, and I don't think I need to be ashamed of it. The frontend wasn't the point. The point was the architecture: understanding how a request flows from the browser through the Next.js server to the FastAPI backend, gets authenticated, hits the database, and comes back. I did all of that myself. I configured the auth. I wrote the API routes. I set up the Docker compose file. I wired Supabase to the backend.
Understanding the system matters more than authoring every line. Any senior developer will tell you that. AI is a tool. Using it well — knowing when to reach for it, what to ask, how to evaluate what it gives you — is itself a skill.
The Dopamine, Revisited
I'm still riding the dopamine rush. I keep going back to the app just to click things and watch it work. I watch a button click trigger a request, the request hit the backend, the backend write a row to Supabase, the frontend update. Over and over. It doesn't get old.
I've written before about how coding triggers the same reward circuits as gaming or exercise. But there's something particular about this milestone — about looking at something genuinely complex that you built yourself and understanding every piece of it. Not just that it works, but why it works. That specific satisfaction doesn't come from tutorials. It comes from building something real.
The GitHub repos full of mysterious folders are a little less mysterious now. I'm slowly becoming the person who builds civilisations. 🙂