Refactoring

How we rewrote our tech stack in under a day

Last week, we deleted 16,000 lines of code, rewrote 11,500, migrated frameworks, ripped out React, and swapped our entire CSS setup with AI. It took less than 6 hours.

Technical debt lost its excuse

Technical debt used to justify meetings, trade-offs, and dedicated sprints. AI has changed that. Cleanup is now fast, cheap, and continuous. Teams that stop debating and start fixing unlock faster delivery and better outcomes.

Onboard the AI like you'd onboard a developer

Legacy codebases are messy, undocumented, and full of decisions nobody remembers making. But if you can explain it to a new developer, you can onboard an AI and that changes everything.

A guide to vibe coding vs AI-assisted development

Vibe coding or AI-assisted development? The choice isn't binary, but getting it wrong at the wrong stage will cost you. This piece breaks down when to embrace speed over architecture, when to take back control, and why the best teams don't pick sides.

Cloudy with a chance of function calls

In the first of a series exploring infrastructure fundamentals, Brenden addresses the most frequently asked questions about what's really happening under the hood with complex pipelines and AI/data systems, bringing the cloud to life.

Why I switched from BugBot to Claude for code reviews

I switched from Cursor's BugBot ($40/month) to Claude Code for code reviews. Setup is straightforward in VS Code, and Claude's bug detection has been notably better. While it still flags null reference checks like most AI reviewers, the difference in catching actual bugs is significant.

The stainless steel lesson: why boring technology outlasts shiny frameworks

Shiny frameworks promise magic, but like cheap non-stick pans, they scratch, peel, and end up in the bin. Boring technology, like stainless steel, isn’t sexy, but it lasts for decades if treated well. The lesson? Build for the long haul, not the quick thrill.

Legacy vs technical debt: how investors can spot hidden risks in software products

What can investors do about legacy code to prevent your startup from failure? What is the difference between legacy and technical debt?

What would it cost to rebuild this software from scratch?

Evaluating the cost of rebuilding software from scratch involves more than counting development hours; it requires recognising the invisible value of user feedback, lessons learned, and embedded experience.

AI writes bad code, but what if that’s the good news?

Should engineers fear messy AI code or embrace it as a tool for fast product validation? This story reveals why your cleanest code might not be your most valuable contribution. Why founders will use AI generated code more and more for MVPs and prototyping and why engineers should embrace this.

Why front-end rewrites are more common than refactors

Why do engineering teams keep rewriting frontends? Let’s explore the leadership bias and tech churn that makes refactors feel harder—yet ultimately more sustainable.

The hidden cost of API migrations

Forced API migrations without a rollback plan? That’s how businesses lose trust—and money.

Embracing brownfield projects & legacy code in SaaS

Balancing innovation with stability is key in managing SaaS legacy code. You explore phased implementations, leveraging existing assets, and continuous learning to maximize legacy code potential. Ideal for tech leads and founders.

Understanding and managing technical debt and legacy code: a guide for founders

Discover effective strategies for managing technical debt and legacy code in software development. This comprehensive guide for founders explores the causes, impacts, and solutions to maintain sustainable growth and high-quality code.

PHP lied to me

We discuss the challenges of using PHPStan at its strictest level for type checking, particularly with 'mixed' types. It explores solutions like using strval() and creating custom functions, but ultimately, the author opts to lower PHPStan's strictness due to complexity, ending with mixed feelings.

Subscribe