Skip links

Engineering Culture

Running a Remote Engineering Team Across Time Zones

Managing a remote engineering team sounds straightforward until you have developers in Lahore, designers in Lisbon, and a client in Los Angeles. That is a 13-hour spread. When your backend engineer in Pakistan starts their day, your frontend developer in Portugal is having lunch, and

Event-Driven Architecture with Python: A Complete Guide

Request-response is the default architecture for web applications, and for good reason. A client sends a request, a server processes it synchronously, and returns a response. Simple, predictable, easy to debug. This works beautifully for straightforward CRUD operations where a single action has a single

The Art of Writing Useful Error Messages

In 2023, we shipped an internal tool at Harbor Software that had a particularly unhelpful error message: “Operation failed.” No error code. No context. No suggestion of what to do next. Within the first week, our support channel had 47 messages that were all variations

Database Migrations in Production: A Zero-Downtime Approach

It’s 3 PM on a Tuesday. Your migration is halfway through altering a 200-million-row table. The application is throwing 500 errors. Your CEO just messaged the engineering Slack channel with a screenshot of a blank page. The database is locked. You can’t roll back because

Implementing Role-Based Access Control from Scratch

Access control is one of those features that seems simple in the elevator pitch and complex in the implementation. “Users have roles, roles have permissions, check the permission before doing the thing.” That covers about 20% of the real design. The remaining 80% involves permission

Infrastructure as Code with Terraform: Lessons from Production

We migrated Harbor Software’s infrastructure to Terraform three years ago. In that time, we have managed over 400 resources across three AWS accounts, handled two major Terraform version upgrades, and recovered from exactly one state file corruption incident that cost us a full day of

CI/CD for Small Teams: Getting Maximum Value With Minimal Overhead

CI/CD pipelines at large companies are maintained by dedicated platform engineering teams with six-figure infrastructure budgets. At a 4-person startup, you are the platform engineering team, the SRE team, and the development team—simultaneously. Your CI budget is whatever GitHub Actions’ free tier provides, and every

An Introduction to Retrieval-Augmented Generation

Large language models are remarkably capable and fundamentally limited. They can generate fluent, contextually appropriate text on almost any topic, but they cannot access information beyond their training data cutoff. Ask GPT-3 about a document you wrote last week, and it will either confess ignorance

The Real Cost of Technical Debt in Early-Stage Startups

Technical debt is the most abused metaphor in software engineering. Every shortcut gets labeled “tech debt.” Every framework migration gets justified as “paying down tech debt.” The term has become so elastic it is almost meaningless. At Harbor Software, we have been building for about
Explore
Drag