For ItInsightsWorld SoftwareDevelopment readers, the practical problem is no longer simply who wrote the file but who can answer when a service behaves oddly at night. A recent CI episode showed the shift: SonarQube flagged App.tsx, Codex had filled it with compact code, npm was ruled out as the cause, and the owner had to decide how deep to investigate before shipping.
The pipeline stopped with an unexpected signal. At first glance, a flaky CI or environment mismatch seemed plausible. Then SonarQube appeared to complain about App.tsx, and the question became whether npm had brought in a new suspicious dependency. It had not. The actual warning was cyclomatic complexity.
App.tsx contained about 30 lines of code, except 15 of those lines were complete components that Codex had written each on a single line. Formatting with prettier would have solved the surface problem, but it would not explain the complexity. Each component carried a substantial amount of display and business logic.
After formatting, the inspection showed the logic was largely correct. Codex had covered edge cases carefully and had slightly over-engineered parts. Because the complexity matched the business requirements, the fix was structural: ask Codex to make SonarQube happy. It refactored and split the work into 10 files. CI passed, and the change shipped. The incident resolved quickly, but it could have gone badly, because the responsible human had never seen the code.
The analogy is a boat, a bag, and a mining job. For a long time, collecting nuggets meant diving by hand. As conditions changed, machinery appeared, operators maintained it, and later more capable divebots could descend and report back. The last few years brought that idea into software: agents can generate code, update systems, and surface results while the operator decides what to do next.
The optimistic camp treats the divebot as labor: relax and focus on throughput. The skeptical camp warns of lost machines and fake treasure: Wait till your divebots go too deep and get lost, or Haha your divebots brought you stuff that looks like gold but is actually shiny octopus poop. Both camps describe real risks, and both can become caricatures when pushed to extremes.
Traditional wisdom says maintaining a non-trivial system requires a working model of it. That model usually came from writing code, reading code, fixing incidents, and shipping changes. In this context, ownership meant being the person called when something breaks, often at 2AM.
Agents reverse the default. They produce output faster than anyone can absorb. In older complex systems, one could assume code had passed through human hands at some point; that is no longer guaranteed. Experienced practitioners can now manage fleets of divebots and create software at a scale that once required teams. The hard question is how to train the next generation.
One common answer assumes economic reality that many companies will not accept: sponsor juniors for years while they learn to do it by hand. The opposite answer tells operators to make sure you understand every line your agent wrote, pair with a senior, or perform careful code reviews. These practices may help in small settings, but they do not describe a viable industry-wide path. Equally reputable voices say not to look at the code at all, put energy into deciding what to build, and forget how it is built; that also seems wrong.
For an architect, lead, or CTO, success depends on having a chart of the waters, not a perfect memory of every object. Think of a 1-million line codebase written and expanded over years. During a production issue, the person resolving it at 2AM does not need to have authored every layer. They need to know where to dive, where the monsters live, and how to jump into an unknown codebase, push a hotfix, and describe the incident clearly.
We manage complexity through abstractions. Each layer lets us build a bit more, but abstractions go all the way down and leak. The owner needs the map plus the ability to dive. There is a big difference between I wrote module X and know it inside out and I have an appropriate model of the system abstractions and can dive into any module and fix it when it breaks.
The future owner needs three pillars: fundamentals, breadth, and just-in-time depth. The first is fundamentals. In complex systems, some failures are quiet. Things mostly work, but the system may become slower, error rates may rise, or it may fail every 19th attempt. That may not trigger a page, but it creates the feeling that something is off. To reason about this, operators need data structures, algorithms, networking, concurrency, distributed systems, and similar mental models. These can be learned by reading, exploring, and reflecting on incidents.
A simple divebot mission shows why fundamentals matter. You send it down 2m, and it returns in 4s. You send it 4m, and it takes 16s. You send it 16m, and it takes 256s. The pattern suggests something is wrong. If the operator recognizes quadratic complexity, the mission is not merely odd; it is a teachable failure.
The second pillar is breadth. Many successful engineers can discuss almost any topic and weave concepts from different disciplines together. That is the high-level map. Breadth tells you which seas are dangerous and gives you enough orientation to say let's dive here. Someone asked how do we teach breadth? a survey class on everything? but there is no Everything 101. The best answer is maintained curiosity: read widely, remember incidents, notice oh crap moments, and connect prior knowledge to current work.
The third pillar is just-in-time depth. It is the willingness to learn whatever is required, even in uncharted waters, and the humility to know when a dive is beyond your capabilities and help is needed. Some months ago, while working on my agent orchestrator, I ran into stability issues and lifecycle bugs. The agents were crashing repeatedly, in an hour, and the divebots could not fix their own mess. A Kubernetes book read years earlier brought the phrase level-triggered state machine back into view. Taking a deeper dive, even into the electrical engineering origin of level-triggered, made it possible to redesign the core architecture.
| Element | Observed role in the incident | Engineering takeaway |
|---|---|---|
| SonarQube | Flagged cyclomatic complexity in App.tsx. | Static analysis can point to structural debt, not only logic defects. |
| npm | Suspicion that a new dependency caused the failure; it was not the cause. | Dependency review is a first-order safety check during release work. |
| Codex | Wrote single-line components and later split them into 10 files. | Agents can generate and refactor code, but the operator sets acceptance criteria. |
| prettier | Would have fixed formatting but not complexity. | Formatting is not a substitute for architecture review. |
| Kubernetes | Earlier reading supplied the phrase level-triggered state machine. | Breadth from adjacent systems can guide later design dives. |
So start with a high-level map of the ocean, which is the system, and understand that it is layers of abstraction all the way to the bottom. Since all of those abstractions leak, your job as system owner is to know where to dive and how deep.

The new way of building things requires a generalist who can dive deep into the unknown, a quick learner under pressure and not in the resume-padded way. I have interviewed many people over the years, and when people put quick learner in their resume, a useful follow-up is to ask about a time they had to learn a complex system quickly. This checks whether the person can recognize when the map is incomplete and still make a safe dive.
No. It requires enough fundamentals, breadth, and just-in-time depth to know when something is wrong and dive when needed.
Quiet failures: mostly working systems that slow down, raise errors, or fail every 19th attempt.
Not as Everything 101. It is maintained by curiosity, reading, incident memory, and connecting work to prior knowledge.
When the dive is beyond your capabilities. Just-in-time depth includes humility to recognize limits.
Future ownership will not belong only to the person who typed every file. It will depend on operators who can combine the three pillars: fundamentals, breadth, and just-in-time depth. They can accept correct but unfamiliar code, inspect enough to trust it, and dive when an abstraction leaks. For ItInsightsWorld SoftwareDevelopment, the practical answer is clear: build a map, keep learning across domains, and be willing to go deep when the system needs a human.