Agentic Engineering Lesson #3: Taste

Agentic Engineering Lesson #3: Taste
Photo by Galina Nelyubova / Unsplash

I've often been asked what makes a junior developer into a senior developer. Often it's a junior developer asking me the question. And often my answer is system design skills.

The best developers in your team are the ones you can give any task to. It doesn't matter what it is, you know they're going to work out how to do it, and they're going to exercise their system design skills while they do it. You won't just get a completed job, you'll get something that can hold up to scrutiny, is performant, is easy for other developers to understand and best of all, won't fall apart as it grows and changes in the coming years.

These are skills that junior developers lack simply because they don't yet have much experience in building systems and learning what goes wrong.

And it's something that an AI model (currently) struggles with because they can't hold the context of a whole project the way a senior developer can.

Most senior programmers aren't that much better at programming than the mid-level or even the juniors. What they do have is the wisdom to know when something needs an abstraction or how to design functions the rest of the team won't hate calling.

AI system design isn't great. It's getting better in the frontier models and you can definitely encourage it with the right of choice of skills, but it's no substitute for human taste. And taste is what will make your project better.

The challenge for a junior developer is how do you get that taste. This isn't new. Even before AI it's not something I had an easy answer for. Taste comes with building things and living with the choices you made and up until now that took years because building software took years.

But what you can do now is just build. Build lots of projects. Look at the code, understand it, study it. As previously recommended, Stay in the Loop. Then throw it away and build something else. Or build another the same thing again from scratch with new constraints. Treat each one like a sandbox that you get to learn in.

See what you like, what you don't like, develop your own taste for code that you would be happy to keep working on. How do you want it constructed? How do you want the files organised? What makes you happy when you look at code - from the way it's spaced to how variables are named. Everything is a choice. Decide which ones you want to make.

And when the LLM creates something that doesn't work, don't prompt it for a fix, go try fix it yourself. See what the debugging experience is like. Discover what works and what could be easier.

Most developers just don't see that many projects. They gain experience by moving jobs and finding out how another team decided to name things. But an LLM sandbox can get you that experience faster than ever before.

Human taste is ultimately what will take you closer to senior developer. Then you can direct your LLM like the senior development team used to direct you.