内部工具之年
摘要
Geocodio介绍了他们从简单的bash脚本演变到完整的内部应用的过程,利用AI来高效且可持续地构建和维护工具。
暂无内容
查看缓存全文
缓存时间: 2026/09/24 13:07
# 内部工具之年
来源:https://www.geocod.io/code-and-coordinates/2026-09-23-the-year-of-internal-tools
Geocodio如何从bash脚本迈向完整的内部应用系统,我们用什么方法保持其可维护性,以及如何划分自建与购买的界限。
在Geocodio,我们始终重视自动化流程并构建自有的工具与辅助程序,以此节省时间并提升效率。近十年来,Geocodio仅有两位成员。自动化是支撑这一模式的关键要素。
这些工具多年来为我们节省了难以计数的工时。本地bash脚本用于搭建开发环境或下载地理编码所需的特定数据文件;基础设施脚本用于检测负载均衡器健康状况或同步数据;小型脚本则让本地部署流程更快速高效,减少人工步骤与人为错误。
其中一项较大规模的实践远早于AI时代。我们自建了部署工具,它能可视化部署流程,让我们轻松掌握部署进度与当前线上状态。若出现问题,可及时发现并回滚。该工具能处理部署冻结期等事务,若完全采用人工操作将变得繁琐且透明度极低。
[部署工具界面]:公共集群中的每个节点都标注其运行的发布版本,部署对话框允许选择范围并将结果推送至Slack。这些小脚本、辅助工具和各类技术设施多年来一直发挥着积极作用。但与我们在2026年所达成的现状及现有能力相比,它们仍显得微不足道。
今年是内部工具之年。我们从零散构建小型bash脚本、在Laravel中编写artisan命令、用独立仓库生成报表代码,过渡到能够大幅提升雄心,创建功能完备的内部应用程序——这些应用具备移动端适配性、良好用户体验与卓越的测试覆盖率。
实现这一跃迁的关键,在于AI与前沿模型的出现,让我们能以远超以往的能力进行开发。
坦白说,起初我对承担这类大型项目有所犹豫。阻碍更宏大构想的往往不是构建本身——即使在AI出现前,或许几天内就能开发出某种出色的内部工具。但随之而来的是维护负担。如果无法兼顾维护工作、保持工具正常运行、及时更新与修复漏洞,就无法持续构建新工具。
这正是硬币的另一面,而AI也让我们具备了解决这个问题的能力。我不再担忧构建与维护这些内部工具,因为我同样能借助AI来跟进维护工作。
我们已建立起特定的快速构建流程,能迅速创建新的内部工具。最近发布的console-ui组件包(https://github.com/Geocodio/console-ui)包含Tailwind CSS设计令牌与共享React组件库,使所有内部应用共享统一组件体系,避免各自重复造轮子。
通过积累AI应用经验,我们总结出为这些工具奠定坚实基础(确保长期可用)的核心原则:
- 承接任何项目前进行充分规划
- 开展深入调研,包括通过技术预研验证可行性
- 运用“Grill Me”环节(基于Matt Pocock的Grill Me技能 https://github.com/mattpocock/skills),反复质询计划直至暴露薄弱点
- 迭代UI原型设计,能在实际开发前解答诸多问题、消除隐患
- 在规划阶段运用Fable等强大模型,确保所建工具能以可持续且工程化的方式解决实际问题
此外,我们还为这些项目制定了高质量内部标准,涵盖测试、CI/CD、静态代码分析、认证最佳实践等方面。
时间消耗也集中于此:规划与规格说明需耗时数周,而实现仅需数小时或数天。部分应用在构思多年后,规格说明主要是整合现有笔记与会议内容形成项目方案。Atlas是其中最典型的例子——它在我脑海中酝酿多年,一旦规格确定,构建过程反而十分迅速。
每个工具都配备完整的文档子站点,包含使用指南与功能详解,附带截图与示例。
[Bullpen文档子站点]:每个工具都有独立文档,分为用户指南与内部文档两部分。虽初稿多由AI生成,但这种一致性体验极佳。相比README,文档能更清晰传达工具功能与使用方法。
这还意外解决了另一个问题:当连续数周撰写大型规划与规格说明时,有时会疏离对已建成果的感知。撰写文档能重新聚焦此点。
每个仓库的CLAUDE.md文件都设定规则:任何涉及文档的修改,都要求Claude同步更新、添加或删除相关部分。虽仍需人工审核,但这条基础规则确保了文档时效性——过期的文档毫无价值。
以下是Atlas仓库中精简后的规则示例:
我们正承担更大挑战,例如构建自有客户支持平台:
- **Atlas** 用于客户支持。已构建完成并正在逐步推出。
- **Bullpen** 用于管理、组织与规划开发冲刺。
- **Yak**(https://github.com/Geocodio/yak)是处理琐碎任务的编码代理。它能从Slack、Linear、Sentry和GitHub抓取小任务,并返回可审查的拉取请求。Yak是开源项目,任何人下载后都可对接自有仓库。
- 部署工具(前文所述)
- 合规工具:补充现有合规平台未覆盖的领域,并将结果反馈至该平台
- **Treehouse**(https://github.com/Geocodio/treehouse)为每个git分支提供独立工作树与docker-compose环境栈,允许多个分支或代理会话并行运行而避免端口冲突。同为开源项目。
[Yak完成Linear任务后的界面]:任务请求、变更摘要、逐步活动日志与结果录屏一应俱全。
我们的基础设施工程师也在开发一款管理工具,用于处理依赖项的CVE漏洞,并通过GitHub Actions的CD作业简化常规维护。这很好体现了上文提到的维护理念——部分工具的存在正是为了保障其他工具的健康运行。
自建工具的核心优势在于能与现有工作流及数据深度集成。
当前处理单个客户问题可能需切换三四个工具:现有支持系统、管理后台(分自助版与企业版两个)、计费工具、数据分析平台。由于同时服务自助与企业客户,我们的场景比多数公司更复杂。
自建支持平台的目的,正是整合所有环节。客服人员能在专为Geocodio工作流设计的界面中,直观查看客户账户类型与近期动态,即时获取所需信息与操作入口,从而极速解决问题。
这并不意味着我们要用自建工具替换所有SaaS产品,或盲目开发数十个新内部工具。自建与现成方案之间存在界限,需审慎权衡。
邮件服务继续使用Bento且效果良好。自建邮件基础设施风险过高且非我司专长。通讯功能仍由Twilio提供。我们也没人会去编写Slack——市面上已有充足优质工具。
以下三个问题是我们决策的关键:
1. **我们在该领域是否有真实经验?还是需要边做边学?**
2. **该工具停机一天会对业务造成什么影响?**
3. **价值是否源于与自有数据和工作流的深度整合?现成工具能否同等胜任?**
工具维护难度降低不代表可无限增加数量。我们必须审慎而有远见地构建,这也是为何所有工具都基于共享基础设施、统一UI与通用原则开发——从而更易维护且最大化代码复用。我们也不追求构建微服务架构,而是追求用单一工具覆盖完整功能集,避免每个新想法都催生新服务。
每次决策都需权衡,而最容易忽略的一点是**可用性**。内部工具同样需要高可靠性。若因发布变更导致故障,使我们一天无法响应客户支持请求,业务将受何影响?
我们近期就尝到了这滋味。我们有一个[内部ETL工具](https://www.geocod.io/code-and-coordinates/2025-01-13-how-geocodio-keeps-300m-addresses-up-to-date)用于地址数据导入与处理。对其大规模升级后,因部署问题导致工具停用一天。本次事件未影响核心运营,但若发生在Atlas的业务高峰期,后果将截然不同。
停机源于我们自主选择的权衡方案:这些工具不设预发布环境。为每个内部工具维护独立预发布环境意味着额外运维成本,对于仅限内部使用的工具,我们认为不值得为此付费。变更直接推送生产环境,依靠本地测试、测试覆盖与CI/CD承担预发布环境的保障职责。ETL工具停用正是该决策风险爆发的体现,我们在制定该策略时已预见并接受这种可能性。
责任的另一面是访问控制。Atlas涉及客户账户与计费数据,因此访问权限管理与可用性同等重要。自建工具的一大优势是完全部署于内网——从公网无法直接访问。用户必须接入VPN才能加载登录页面,之后还需通过常规认证验证。
未来充满未知。我们必须警惕陷入维护海量内部工具的泥潭,或为造工具而造工具。
但若这些工具能提升工作效率、减少人工操作失误,我们就能打造更优质的产品,为客户提供更佳体验,并改善团队工作环境。
若贵司考虑构建内部工具,建议从小处着手。找出那些每周需手工弥补两个工具间缺口的工作流,构建能弥合该缺口的工具。这是我们最快获得价值的方式,也无需相信应该从零重建某个SaaS产品。
相似文章
@spandan_madan: https://x.com/spandan_madan/status/2067320100911493454
对Claude Code工具架构的详细技术分析,涵盖工具接口、注册表、调度管道和并发调度器,这些使AI能够执行43+种工具,如文件读取、shell命令和网络搜索。
问HN:自从人工智能出现以来,你为自己制作了哪些工具?
Ask HN 帖子中,用户分享了自人工智能出现以来他们为自己制作的工具,包括设计浏览器、GitHub 仪表盘、运行时系统等。
@GergelyOrosz: 现在,每个人尝试和使用各种AI编程工具已经接近一年了,很多人都找到了……
作者提到,经过一年的AI编程工具应用,开发者在公司内常使用多种工具,但因一致性、成本及合规性考量,预计将趋向整合。
@GergelyOrosz: 这就是内部工具的特点:随着时间的推移,它们几乎总是变得不如供应商构建的工具 At Large C…
该推文讨论了内部工具随着时间的推移往往变得比供应商构建的解决方案更差,举了一个替换SaaS产品可能导致广泛‘改进’带来的维护问题的例子。
我运营着一个包含1000多个AI工具的工具目录。以下是我注意到的哪些AI工具真正存活下来、哪些消失了的现象。
AI Parabellum(一个收录了1000多个AI工具的工具目录)的运营者分享了大多数工具在一年内失败的模式——薄弱的API封装、缺乏更新以及来自主流模型的竞争——而成功的工具则解决特定工作流程问题,并提供超越原始API的独特价值。