Summaries > Technology > Uncle Bob > Why Hardcore Technical Focus Still Matters Big Time | Uncle Bob (Clean Code, Clea...
https://www.youtube.com/watch?v=rNdfQ6mRXAQ
TLDR AI is shifting engineers from writing every line of code toward understanding customers, shaping products, and directing AI agents. Uncle Bob argues that strong technical skills still matter, but engineers must connect technical decisions to real customer needs and outcomes. AI-generated code should be kept reliable with measurable standards, automated architecture checks, and layered tests, while human engineers focus on system design, sound judgment, and verifying that the software solves the right problem.
Before estimating or implementing a feature, clarify who it serves, what problem they face, and what outcome would help them. Engineers can build this understanding through direct customer contact, such as observing customers at work or helping with support requests. These experiences reveal practical constraints that are easy to miss from inside a technical team. Clear customer context also helps AI agents produce solutions that address the real need rather than merely satisfy a prompt.
Important customer needs can disappear when engineers change or projects grow, so capture them as explicit, testable requirements. For example, a response-time target should remain visible in documentation and automated checks rather than live only in the memory of early team members. Review these requirements as the product evolves, and investigate when system behavior drifts from them. This keeps technical decisions connected to the people and business outcomes they are meant to support.
AI can take on more implementation work, but engineers still need technical judgment to evaluate the systems it produces. They should also understand the business context, communicate product needs clearly, and question whether a proposed solution is appropriate. Avoid separating technical teams from customer and product concerns; infrastructure and platform work also affects users and business outcomes. Deep specialists remain essential where the work requires advanced technical knowledge.
Do not rely on prompts alone to keep AI-generated code maintainable, because agents may not consistently remember informal instructions. Use deterministic tools to check code quality and have agents revise their work until it meets defined standards. Useful checks include complexity combined with test coverage, code duplication, and rules for which modules may depend on one another. For example, dependency rules can expose cycles or unwanted relationships before they become difficult to change.
Ask agents to create unit tests, acceptance tests, and tests that exercise the product through its human interface. Run these checks automatically, and spot-check acceptance tests to confirm they represent genuine user needs. Mutation testing can reveal weak tests by making small code changes and checking whether the suite catches them. Together, these practices make regressions harder to introduce and encourage code that is easier to test.
Passing tests are valuable evidence, but they do not replace an engineer’s understanding of the system. Spot-check important code and tests, ask agents to explain how components work, and challenge those explanations against your own mental model. Pay particular attention to clear names, module boundaries, function size, and manageable interfaces; for example, an eight-argument function is a strong candidate for redesign. Use engineering judgment to decide when an agent’s output needs further review.
AI is shifting engineers’ emphasis from low-level coding toward product engineering. Engineers still need technical skills, but they must increasingly understand customers and business needs, communicate requirements to AI agents, and evaluate whether the resulting software solves the right problem.
Direct customer contact helps engineers understand how their work affects people using the product. Martin recalls riding with a telephone repairman and later helping customers on support lines; both experiences gave engineers a clearer view of customer needs that could otherwise be missed.
Important product requirements can fade as teams grow or change. For example, a terminal command that once had to respond in under one second came to take three seconds because newer engineers no longer knew why the original response-time requirement mattered.
They should understand the customer problem and desired outcome before estimating or implementing a solution. Technical decisions should be judged in the context of the business and customer need, rather than treated as isolated feature work.
Use clear standards and deterministic tools to measure code quality, then have agents work in a loop until the code meets those standards. This is more reliable than depending only on prompt instructions that an agent may forget.
He recommends measuring function-level complexity and test coverage with the CRAP metric, aiming for a score below six, and using code-duplication detection. These checks encourage agents to add tests, split complex functions, improve names, reduce repetition, and create appropriate abstractions.
Specify permitted dependencies between modules in a text file and use a deterministic tool to check the code against those rules. Agents can then address violations by changing dependency direction, splitting modules, or removing dependency cycles.
Agents should write unit tests, Gherkin acceptance tests, and QA tests that exercise the product through its human interface. Engineers can spot-check the acceptance and QA tests, run them with deterministic tools, and use mutation testing to identify tests that fail to catch small code changes.
Three interconnected layers of tests—unit, acceptance, and QA—make it harder for agents to break existing behavior unnoticed. Agents can often write tests first and then make them pass, which encourages more testable code and reduces coupling.
Martin does not routinely review every test or line of production code. He uses light spot checks and asks agents questions about the system’s structure and behavior to build and challenge his own mental model. He pays particular attention to the names and overall shape of functions, modules, and classes, while relying on tests to provide confidence.
Agents can sometimes be held to looser limits than humans because they have stronger short-term memory, but standards still matter. Martin generally prefers functions to have no more than three arguments, might accept four or five, and would ask an agent to change a function with eight.
No. AI makes it easier for nontechnical people to contribute, but prompting or building simple tools does not replace engineers’ deep understanding of systems, skepticism, and ability to design challenging tests. Deep technical specialists also remain essential for fields such as AI training, finite element analysis, scientific data analysis, and game-engine physics.
Product and design thinking help engineers connect infrastructure and platform work to the people and outcomes it serves. Understanding customer and business needs is valuable beyond teams that build visible product features.