Make it right, maintainable, fast, and pretty (in that order) A software engineer argues that coding agents should be used to rapidly prototype features first, then the resulting code must be made maintainable through ruthless human review before any optimization or polish. The engineer warns that coding agents are "stickier" to existing patterns, so unchecked AI-generated slop compounds into worse output, and stresses that engineers remain responsible and accountable for what they ship. I don't consider myself a vibe coder. I like reading the code. More specifically, I want to architect a feature, debate about its merits, iterate on its implementation, and finally review the code at a high level. I have two main reasons why I still work like this: In practice, I'm aggressively hands-on in a greenfield codebase and generally more hands-off for larger ones where the conventions are already well-established. Much like a child's early development, an early-stage codebase requires more attention to detail because wrong patterns compound with relentless coding agents now in the mix. In a time when writing code is no longer the bottleneck, it is the software engineer's wisdom to say 'no' that makes a world of difference in the long-term maintainability of the codebase and ultimately the product. That is how I keep myself in the loop. I believe this is how we can continue to be responsible and accountable software engineers in the face of abundant code generation. True to Mitchell Hashimoto's philosophy, we must always be ready for the Whiteboard Defense. // Detect dark theme var iframe = document.getElementById 'tweet-2100249348345057389-200' ; if document.body.className.includes 'dark-theme' { iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2100249348345057389&theme=dark" } Needless to say, I was never a fan of the absolutists in the "Don't-Read-Code" school of thought. Again, this is not because I think my work is particularly mission-critical, but because I strongly believe I owe it to my users to be responsible and accountable for what I ship to the software that they depend on every day. After a year and a half of working with coding agents, I found myself converging on an implementation philosophy that balances feature velocity with long-term maintainability. At least for the non-prototype projects that I care about, my work revolved around the following mantras: Exclusively in that exact order. This first step is deceptively simple because it actually asks two things: The former is an engineer's primary concern while the latter is a product manager's concern. To be successful, the key is to dig deep into the two wolves inside you https://knowyourmeme.com/memes/inside-you-there-are-two-wolves . Engineering excellence must be complemented by empathy for the user. As luck may have it, both of these questions can be answered through quick iteration. That's always why the first step is to "make it right". With a prototype-first mindset, the goal is to get a feel for the engineering pitfalls, the UI/UX shortcomings, and the product implications. A scrappy prototype surfaces all of those concerns early. Even if only one of those is dubious, it's back to the drawing board until everything is ironed out. This is where coding agents come to the rescue. Iterate quickly on prototypes to validate an idea or a full feature. Generate UI variants in HTML files. Test if the end-to-end flow works as expected.