将自己编码进系统

3 分•作者: nharziro•大约 1 个月前•原帖
最近,我越来越认真地思考人工智能和自动化对我作为软件工程师的角色可能意味着什么。 我是一家大型组织的首席工程师,十多年来一直在领导一个我特别关心的项目。除了几项由实习生开发的功能外,我几乎写下了每一行代码。 最初的一个应用程序逐渐演变成一个生态系统:一个库、API、一个编排层、命令行工具、定时任务等等。如今,组织在某种程度上依赖于这个生态系统。 这种复杂性并不是一下子出现的,而是通过多年的新需求、集成、边缘案例、架构决策以及组织运作方式的变化逐渐积累起来的。每一层都解决了一个实际问题,而理解系统所需的知识也随之增长。 最终,这一切变得太复杂,无法由一个人来管理,同时还要构建每一个下游功能。因此,我对其中许多部分进行了重新架构。我淘汰了过时的组件,创建了一个REST API层,引入了一个MCP层,以便其他团队可以在其上构建,现代化了CI/CD和测试,并重建或淘汰了用户界面。目标是使生态系统更易于扩展,并减少我的“公交车因子”。 自一月以来,随着人工智能模型的不断改进,我也开始向自主开发转变。我将编码代理集成到工作流程中,创建了专门的代理技能,并为代码库编写了详细的AGENTS.md文件。代码库逐渐不仅仅是源代码,它现在为模型提供了系统架构、约束、约定和历史的编码记录。 该系统可以帮助编写功能票据并可重复地实现它们。它生成的代码基于现有代码库,编写适当的测试,遵循架构边界,并能够挂载和使用底层库来验证假设。 它还可以超越代码库。它可以检查数据库架构,在定义的权限范围内读取和写入数据库,并在故障排除时自主检索应用日志。它可以将这些日志与代码、架构和数据关联起来,以调查故障并验证其假设。它可以访问我在诊断或实施某些内容时使用的许多相同信息源。 昨天,我向另一团队的几位开发人员演示了这一工作流程,他们将为一个新项目贡献代码库。 该系统提取了一个票据,按照我的约束和边界编写代码和测试,打开了拉取请求,并在几分钟内将所有内容部署到测试环境中。我们剩下的工作主要是进行审查和测试。 它按预期工作,但也让我思考这将走向何方。 在过去的几个月里,我实际上已经将更多的自我编码到系统中:技术知识、架构偏好、约定、约束、解决问题的模式,以及来自多年在代码库上工作的判断。 该系统现在生成的工作往往与我自己编写的非常接近。 达到这一点仍然需要多年的领域知识、架构决策、现代化工作,以及对使代理有效的上下文和边界的仔细构建。我仍然是最终的审查关卡,许多决策需要更广泛的技术和组织判断。 我认为,未来的系统将越来越能够研究一个不熟悉的代码库,识别其约定和架构边界,构建自己的上下文,并确定在其中安全工作所需的边界。 如果我的知识、判断和工作方式越来越多地被编码到我周围的系统中,那我还能被留多久呢?
查看原文
Lately, I’ve been thinking more seriously about what AI and automation may mean for my role as a software engineer.<p>I’m a principal engineer at a large organization, and for more than a decade I’ve led a project that has always felt particularly close to me. I wrote nearly every line of code, aside from a handful of features built by interns over the years.<p>What started as a single application gradually became an ecosystem: a library, APIs, an orchestration layer, CLIs, scheduled jobs, and more. Today, the organization depends on it in some way.<p>That complexity did not appear all at once. It accumulated over years through new requirements, integrations, edge cases, architectural decisions, and changes in how the organization operates. Each layer solved a real problem, and the knowledge required to understand the system grew along with it.<p>Eventually, it became too much for one person to manage while also building every downstream feature people requested. So I rearchitected much of it. I retired obsolete components, created a REST API layer, introduced an MCP layer so other groups could build on top of it, modernized CI&#x2F;CD and testing, and rebuilt or retired user interfaces. The goal was to make the ecosystem easier to extend and reduce my bus factor.<p>Since January, as AI models have improved, I’ve also moved toward agentic development. I integrated coding agents into the workflow, created specialized agent skills, and wrote detailed AGENTS.md files for the repositories. The codebase has gradually become more than source code. It now provides the models with an encoded record of the system&#x27;s architecture, constraints, conventions, and history.<p>The system can help write feature tickets and implement them reproducibly. It produces code grounded in the existing codebase, writes appropriate tests, respects architectural boundaries, and can mount and exercise the underlying library to validate assumptions.<p>It can also go beyond the repository. It can inspect the database schema, read from and write to the database within defined permissions, and autonomously retrieve application logs while troubleshooting. It can correlate those logs with the code, architecture, and data to investigate failures and validate its assumptions. It has access to many of the same sources of information I use when diagnosing or implementing something myself.<p>Yesterday, I demonstrated the workflow to a couple of developers from another team who will be contributing to the codebase for a new project.<p>The harness pulled a ticket, wrote the code and tests while following my constraints and guardrails, opened the pull request, and deployed everything to the test environment within minutes. Our remaining job was largely to review and test it.<p>It worked as intended, but it also made me think about where this is heading.<p>Over the past several months, I’ve effectively been encoding more of myself into the system: technical knowledge, architectural preferences, conventions, constraints, problem-solving patterns, and some of the judgment that comes from working on the codebase for years.<p>The harness now produces work that is often very close to what I would have written myself.<p>Getting it to this point still required years of domain knowledge, architectural decisions, modernization work, and careful construction of the context and guardrails that make the agents effective. I’m also still the final review gate, and many decisions require broader technical and organizational judgment.<p>It seems entirely plausible to me that future systems will increasingly be able to study an unfamiliar codebase, identify its conventions and architectural boundaries, construct their own context, and determine the guardrails needed to work within it safely.<p>If more and more of my knowledge, judgment, and way of working can be encoded into the systems around me, how much longer are they going to keep me around?