Today was the fifth day of my schedule, and the first time I worked on a personal project instead of interview exercises.
Personal Project
I’m reviving a personal project that I started earlier this year: a personal finance tool that helps people manage their money with an envelope-style budget.
The web client was mostly finished last time, and it’s a standalone service that I can reuse. The backend was a monolith inside a Next.js app, and I’m starting it over from scratch.
Why Start Over?
This project is for learning. I’m not trying to market an app or make money from it, so I’ve set myself two goals:
- Write the code myself: AI tools can point me in the right direction when I need it, but I want to write the code by hand to build on my comfort level with Python.
- Use a microservice architecture: splitting the backend into separate services will deepen my understanding of the infrastructure that holds them together, including container orchestration with Kubernetes, networking and service-to-service communication, API gateways, and event-driven messaging.
This approach might be considered overkill for a personal project, but that’s fine, since the goal is just to learn.
An Initial System Design
I gave Claude the parameters for the project and asked for an initial system design to get me started. This is what it came up with:

Claude first recommended starting with the identity service. When I probed deeper with some follow-up prompts, it suggested I begin one step earlier: set up the Kubernetes cluster and API gateway, and get a dummy Python app running in place of the identity service.
Setting Up a Local Cluster
The first step was learning more about Kubernetes. I set up a local cluster with kind, which runs Kubernetes nodes inside Docker containers.
Adding an API Gateway
Next, I used Helm to install Envoy Gateway as an API gateway inside the cluster. I’m only beginning to learn about it, and I’ll need a better understanding of it as the other pieces start to fit in. For now, these are the jobs I expect it to handle:
- A single entry point: client applications connect to the gateway, and it routes traffic internally to the right microservice.
- Authentication: validating JWTs before requests reach the services.
- CORS: handling cross-origin requests from the web client.
- Rate limiting: I haven’t decided yet whether I want to explore this for this project.
Hello, World
Following what I was learning from Claude, I set up a dummy “hello world” service behind the gateway. Sending a request to the gateway’s port and getting a successful response back confirmed that the gateway was proxying requests to the service correctly.
I ended up reading through a lot of the Kubernetes, Helm, and kind documentation along the way, and I spent longer on this initial scaffolding than I had originally planned for the day.
When I come back to this project, the next step is to scaffold the real identity service.
Unfinished Tasks
I started late in the day, so I didn’t get to the two remaining time blocks: an hour of introductory Python exercises and an hour of DSA practice. My calendar only has predefined time blocks for Monday through Friday, so I’ll move both of them to the weekend.
I’m also rethinking the dedicated time blocks for AI tooling, and I may reshape my calendar for the coming weeks. AI tools will naturally be part of the time I spend on personal projects, so a separate block may not be necessary.
That doesn’t mean AI tooling is less of a priority. In every interview I’ve had over the past few months, I’ve been asked how I’m using AI, and I want a more nuanced answer than “I use Claude.” Beyond interviews, I also want to get better at using these tools to boost my own productivity.
Part of the problem is that I’m struggling to find good resources on going beyond the basics of tools like Claude Code, and on how software engineers use them in a professional setting. I’ll keep searching for those outside the scheduled blocks.
Takeaways
Today felt different from the rest of the week. Instead of short exercises with clear answers, I was learning by building, and it was easy to lose track of time going down the documentation rabbit hole.
A single “hello world” response isn’t much to show for a day’s work, but it means the cluster, the gateway, and the routing between them are all working. That’s the foundation that every other service in the diagram will be built on.
