Michael Leigh

@michael-leigh.bsky.social

Software Engineer based in Switzerland React • TypeScript • Node.js • Full-stack Building products and sharing what I learn about software, AI & tech.

Software engineers are going to write more code with AI. But more code does not automatically mean more progress. I read somewhere one recent study found coding agents increased code output far more than actual releases. The bottleneck is not always typing code.

There is a big difference between: “I built this with AI.” and “I built this, and AI helped me.” The second mindset keeps the developer responsible for the result. That is how I want to use AI.

One thing I’m learning as a developer: You do not need to know everything. You need to know how to find the answer, test it, understand it and decide whether it belongs in your project. That skill becomes even more important with AI.

AI is changing software engineering, but I don’t think it makes developers less important. Writing code is only one part of the job. Knowing what to build, spotting bad decisions, asking the right questions and taking responsibility still matter.

AI makes writing syntax easier. That does not make syntax irrelevant. If anything, developers now need to be better at reading code they did not write. You should be able to look at generated code and quickly tell: What does it do? What can fail? Would I ship it?

A React component becoming 500 lines long is usually a warning. Not because 500 is a magic number. It often means: • too many responsibilities • too much state • too many conditions • business logic mixed with UI Split by responsibility, not just file size.

AI-generated code still needs code review. Check for: • unnecessary dependencies • missing error handling • duplicated logic • security issues • code you cannot explain Generating code is fast. Owning what goes into production is still your responsibility.

One of the best debugging habits: Stop changing multiple things at once. Change one thing. Run the code. Check the result. Repeat. When five things change together, you may fix the bug without ever knowing what caused it.

Before installing another npm package, ask: • Can the platform already do this? • Is the package maintained? • How many dependencies does it add? • Would 10 lines of code replace it? Dependencies save time, but every dependency is also code you inherit.

A REST API does not need 40 endpoints to be good. Good APIs are predictable. GET /users GET /users/:id POST /users PATCH /users/:id DELETE /users/:id Boring naming is often good naming. Your API should not make developers guess.

One habit that improved my TypeScript code: Don’t use any just to make an error disappear. That error is often telling you something important about your data. Fix the type instead of hiding the problem. So you will have fewer surprises.

A lot of frontend bugs are not React problems. They come from: • unclear state ownership • duplicated data • too many effects • components doing too much Before adding another hook, check whether the component itself needs to be simpler.

AI can write code faster than most developers. That makes reading code more important, not less. If you use AI, don't just ask: “Does it run?” Ask: • Can I explain every line? • Can I spot the bug? • Can I maintain it six months from now? Speed is cheap. Understanding is still the skill.