My Takes on Software and Life

What Minimal Structure at Work Actually Requires
One weekly alignment is all the structure my job imposes. The rest moved into my own system, and it holds on trust that has to be earned.

When Not to Use Kubernetes for a Small Team: Lessons in Avoiding Premature Complexity
Kubernetes can solve real problems. But for small teams, its complexity often costs more than it returns. In our case, the real cost wasn’t infra. It was lost product capacity.

Maintaining a Symfony PHP App in 2026: Email Delivery, OAuth, and Boring Reliability
Nothing like a silent failure to remind you what the product actually is: emails leaving the building. When booking emails were no longer sent, I avoided the rewrite fantasy. I migrated SMTP, added OAuth token fetch and refresh, pulled the system into a repo with Docker Compose dev parity, and added health checks that page me when it breaks. Legacy systems don’t need drama. They need boring reliability.

Revisiting Small Systems, Long Horizons
In June I argued small systems outlast big ones. Then a job search, a move and a new job tested it. They held by changing shape cheaply.

How My Finnish Is Actually Doing
A week in Helsinki confirmed my text first Finnish system. Speaking is the hardest part to train, because Finns switch to English.

Done Chasing Running Times
I set three running times this year and hit all three. What came next was not a fourth target. It was noticing I did not want one.

My Path Into Software Didn't Start With a CS Degree
My software career started in an economics degree during Covid, not a CS one. The master's came last, for the paper and for the subject.

Learning to Accept Uncertainty
Several things unresolved at once, none on a timeline I controlled. What that year taught me about operating under uncertainty.

Optimizing for Restartability
Restartability isn't one technique. Some things need the practice kept warm. Others only need the output to keep going.

Not Every Hobby Wants the Same Kind of Structure
Three of my hobbies ended up in three different places this year: one that never wanted structure, one that got measurably better for it, and one where the structure was simply sized wrong. The skill is not having a philosophy about structure. It is diagnosing which case you are in.

Most of Working With AI Has Nothing to Do With AI
I used to think the leverage in working with AI came from the model and the prompt. It doesn't. It's attention, process shape, honest context, and delegation, the same things that mattered before any of it had "AI" in the name.

The Difference Between Structure and Control
Structure and control can look identical from the outside. Both involve rules, defaults, plans made in advance. The difference only shows up once reality refuses to cooperate.

How I Ended Up at Orbit
I joined Orbit this week. Knowing what I wanted, a small company with real ownership, never got me there. Widening how I searched for it did, and the hiring process that finally worked said more about the job than the offer did.

How I Evaluate New Technologies
New technology doesn't earn a place in my stack by looking good on paper. It earns it by surviving a small, disposable trial first.

Learning Faster vs Learning Longer
My thesis and my Finnish flashcards ran through the same year on completely opposite clocks, one compressed into six forced months, the other still running with no deadline in sight. Comparing them directly shows that speed was never the variable that actually mattered.

Getting Better at Explaining Things
One piece of interview feedback felt like a diagnosis. Then I found out it wasn't personal, and that turned out not to matter.

A Minimal GitHub Actions CI/CD Setup
Most CI/CD advice assumes a team. Here's the smallest pipeline that still catches real problems, and where the line is before you're overbuilding it.

What Claude Code Got Right (and Wrong) Building a Terraform Provider
Shipping a Terraform provider with an AI assistant went smoothly. The interesting part is what stayed my job anyway.

Planning Without Predictability
Good planning doesn't mean predicting the future accurately. It means building in the ability to be wrong without everything falling apart.

What I Cut When I Redesigned leolem.dev
The redesign added a new color palette and a simpler structure. The part that actually mattered was what I deleted.

Using Devcontainers Without Overcomplicating Your Setup
Devcontainers work best when they stay small. Here is the approach that has held up over another year of using them daily.

Shipping Something That Isn't Useful
I just released my debut EP, *Months*, under my music project Again and Again. It won't become a product, and it probably won't make any money. That's exactly why I'm glad I made it.

My Solo Developer Stack in 2026 (Next.js, Vercel, Firebase, and Why I Chose Them)
Most stacks are designed for scale. Mine is designed to stay simple. This is what I actually use, and why.

Small Systems, Long Horizons
Long-term goals create pressure to build complex systems. But the systems that actually last tend to stay small. Not because the goal is small, but because the system survives.

I Don’t Write Weekly
It looks like I write consistently. A post every Sunday. No gaps. But that’s publishing, not writing.

Lightweight Architecture for Solo Builders: A Practical Guide
As a solo builder, your bottleneck is not scale. It is complexity. Lightweight architecture is not about building less. It is about building something you can actually operate alone. Simplicity scales further than you think.

Finding My Lane in Software Engineering
I started interviewing expecting technical evaluation. I ended up learning much more about fit, communication, and the kind of problems I actually enjoy solving.

Interesting Ideas vs Defensible Research
I started my thesis expecting exploration and experimentation. I finished it understanding how much research is really about defensibility. And why I probably do not want to stay in academia.

Designing for Future-Me
I used to think good systems were about optimization. Now I think they are mostly about removing decisions. A good system does not make future-you better. It asks less of them.

How I Decide What Not to Build
We are rewarded for adding things. Features. Tools. Processes. Commitments. But the real skill is deciding what not to add.

The Plateau Problem: Progress Is Not Linear
Progress rarely feels like progress. It comes in bursts, separated by long periods that look flat. The plateau is not where things stop. It is where most of the work happens.

How I Rebuilt Almost? From a Reflection App Into a Behavior Change System
Almost? started as a reflection app for logging near misses. I rebuilt it into a behavior change system that captures almosts, reviews patterns, and turns them into practical adjustments.

Keeping Routines While Traveling
The four lightweight habits I keep while moving through South America, so travel stays energizing instead of ungrounding.

Designing Systems That Survive Your Absence
I left for a month without a laptop. Only my phone. It forced a simple test: what in my life and work actually keeps running without me? So before leaving, I designed for absence: automate the boring parts, make defaults safe, document what used to live in my head, and remove workflows that require constant supervision. Absence is a design tool. Remove yourself from the loop and the hidden dependencies show up immediately.

Preparing to Disappear for a Month
On letting go of control, stepping out of momentum, and what it means to actually be gone.

OneSignal Subscriptions for a Static Blog: Email + Web Push Without Overengineering
I wanted blog subscriptions, not a new SaaS project. So I used OneSignal for email + push and wired notifications into CI using frontmatter dates. No backend. No user table. No admin UI. The best system is the one you stop thinking about.

Vigil III: What Feedback Actually Changed in My Thesis
Feedback did not just polish my thesis. It changed the framework early on, and later changed how that framework had to be written.

Shipping Experiments Instead of Chasing Outcomes
I used to chase outcomes: perfection, being "done", traction. Now I try to ship experiments instead: small, real slices I can evaluate and iterate on. Outcomes are noisy. Shipping is controllable.

Vigil II: From Draft to Defensible
How I turned months of building Vigil into a thesis that can survive being read, by writing in phases, using ChatGPT for early drafts, and treating case studies as pressure tests rather than proof.

How to Stay Consistent Learning Finnish: Systems Over Motivation
I stopped trying to stay motivated to learn Finnish and started designing the system around it. Once exposure, retrieval, and feedback had defaults, progress became boring and reliable.

Vigil I: Designing a Framework for Verifying Behavior
How a fuzzy thesis topic turned into a framework I could actually run.

The Orthodox Jews On Their Way To America
How Orthodox Jewish migrants fleeing tsarist Russia became trapped between disease, politics, and transatlantic power struggles.

What Keeps Me Steady Right Now
After travel and transitions, I’m returning to a few simple basics that make everyday life feel manageable again.

Being Back in Hamburg
Coming home doesn’t always mean arriving. Sometimes it just means restarting.

Switching Back to Work After a Long Break
Returning to work is less about tasks and more about re-establishing orientation, especially when systems keep drifting.

New Year's Intentions, Anchored by Systems
Why I still set goals, but rely on systems, reflection, and consistency to carry the year.

Switching Into Vacation Mode
A short reflection on slowing down without dropping my routines over the holidays.

How My Thesis Idea Took Shape
A brief look at how a vague interest turned into a concrete research direction.

My Exchange in Jyväskylä
A short reflection on a semester that changed more than I expected.

Learning Finnish
A reflection on picking up a language that first felt impossible.

My First Paid Freelance Project
A look back at building a small Firebase-powered MVP.

Learning Balance Here
Two months in Finland, finding calm after a fast start.

Why I Ditched Fastlane for Screenshot Automation
When convenience tools become inconvenient.

Counting Milestones
Looking back at my journey as I turn 25.

Contributing to SwiftLint: Enforcing Implicit Optional Initialization Style
Enforcing a consistent style for initializing optional variables in SwiftLint.

ngrms - Simplifying Anagrams with SwiftData and CloudKit
A journey from complexity to simplicity in building a collaborative anagrams game.

Summer semester reflection
Reflecting on my experiences and growth during the summer semester.

StudentScroll?
A full-stack social platform for students, developed in a five-person team during my exchange semester in New Zealand.

Why We Replaced Our Swift Backend with Vercel
Smokes used to use a Swift backend hosted on AWS. Here’s why we replaced it with Vercel.

Why I Use Devcontainers
Isolated, reproducible, and clean environments for modern development.

Almost? From Portfolio to Product
A retrospective on building and rebuilding one of my first iOS apps.

Migrating Domains from Squarespace to Cloudflare
Saving money, gaining analytics, and smoothing out the rough edges.

Building Smokes - From MVP to the App Store
How a small smoking tracker app turned into a published SwiftUI project, and what I learned from it.

Building my website with Astro
A journey through creating my personal website using Astro.

Welcome!
Notes on building things, staying steady, and figuring it out along the way
Get in Touch via [email protected] or Schedule a Call
Catalog, Or What I've Created

Sustainable IT Dashboard
Cloud-native backend system for monitoring sustainability-related IT metrics, built with Quarkus, Terraform, Kubernetes and Google Cloud infrastructure.

Vigil
Behavioural verification framework that runs systems under controlled variation and checks their outputs.

Almost?
It's a reflective iOS journaling app I designed and shipped, focused on learning from near-misses and identifying emotional patterns through a lightweight, structured experience.

Analyzing Climate Opinions
A research project exploring public climate sentiment across social platforms using domain-adapted BERT models, focusing on trend detection rather than generic sentiment scoring.

LaunchLab
An iOS app designed to guide aspiring founders through early startup stages using structured learning paths, AI assistance, and access to real consultants.

leolem.dev
My personal website and writing space, built as a fast, static Astro project to showcase work, document projects, and support regular blogging.

MoinCam
A Raspberry Pi–based livestream camera system I built for the Hamburg office, combining hardware control, real-time video streaming, and a web interface for shared remote access.

Pet Platform
A compact web-based MVP built with Firebase and Next.js, focused on simple pet management, document storage, and shareable emergency profiles.

Smokes
Smokes is a privacy-conscious iOS habit tracker released in 2023. I designed and shipped the app end to end, iterating on architecture choices and deliberately moving to a local-first model to keep costs low and privacy high.

StudentScroll
StudentScroll is a full-stack social platform for university students, built during a semester abroad, featuring posts, follows, and real-time chat with a React frontend and Spring Boot backend.

Terraform Provider for Beszel
An unofficial Terraform provider for Beszel, a self-hosted server monitoring tool, built with Claude Code and released to the public Terraform Registry.