Most junior engineers measure productivity in lines added. Senior engineers measure productivity in lines deleted. Watch a seasoned developer work on a mature codebase and you'll spot something strange. They spend huge chunks of their day hunting down abstractions, removing dead modules, and shrinking bloated classes.
They don't hate writing software. Code is a liability, not an asset. Every function, helper class, and config file you check into version control is a permanent tax on future maintenance. It adds to team cognitive load, slows down the test suite, and expands the bug surface area.
AI coding assistants and LLMs put this dynamic on steroids. Generating a thousand lines of boilerplate takes seconds. Tab-autocomplete fills out entire functional components before you finish naming your variables. The dev bottleneck shifted. Writing code is free now. Reading, debugging, and maintaining it remains brutally expensive.
When code generation has zero friction, the codebase expands fast. Teams drown in micro-abstractions and redundant utility functions generated by an AI missing system architecture context. Your repo ends up with three ways to parse a date and four caching layers that don't talk to each other.
The main job of a senior engineer is acting as an immune system for the codebase. They reject complexity. When a feature request lands, the best answer is figuring out how to build it using existing primitives, or refusing to build it at all.
Picture a standard refactoring session. You pull down a messy feature branch. Instead of adding logic, you spend two hours untangling a spaghetti dependency graph. You delete an entire service layer built for a requirement abandoned months ago. You rip out a custom caching mechanism because standard database queries are fast enough now.
Our tooling is optimized for the wrong metric. We build better autocomplete engines, faster syntax highlighters, and smarter chat interfaces to help developers write more text. The industry actually needs intelligent deletion tools. We need systems that analyze a repo, trace execution paths, and prove mathematically that a block of code has zero callers and zero side effects, making it safe to purge.
Until those tools arrive in our IDEs, the burden is on us. Stop treating your codebase like a museum where every line ever written gets preserved. Treat it like a garden. Prune the dead wood. Measure output by what you remove, and watch system stability climb as total line counts drop.
Top comments (0)