你正在 进阶版 · 工程作品集 · 案例 04 · 回到作品集 · 进阶版主页 · 总入口

← 工程作品集 · 项目 06(持续运维)的真实案例

🗺️ 活了 7 个月的 GIS 工具

小林 · 16 岁 · 生态社团的真实需求

背景 · 真实使用场景

小林 16 岁,是学校生态研究社团的技术负责人。社团每个月会去野外调查(森林、湿地),需要标注发现的植物物种和位置。一开始用纸质记录加 Google Maps,特别低效。小林想:"我能不能做一个网页工具,可以在 iPad 上用,能标注坐标、拍照、记录物种?"

从上线到 7 个月后:真实的"持续运维"

Changelog(实际的 12 项改动)

v1.5 (2026-05-02) - 导出为 KML
  + Users can now export field data as KML for ArcGIS
  - Removed broken PDF export
  ~ UI tweaks for mobile

v1.4 (2026-04-10) - 物种库离线支持
  + Added offline species database (500+ plants)
  + Search by name/family when offline

v1.3 (2026-03-18) - 性能修复
  ! CRITICAL: Fixed iPad map tile freezing
  + Optimized tile cache strategy
  + Reduced memory usage by 40%

v1.2 (2026-02-25) - 离线同步
  + Offline mode: save locally, sync when online
  + Detect network changes automatically

v1.1 (2026-02-05) - 首个稳定版本
  + Multiple photos per point
  + Species name autocomplete
  - Removed map rotation (confused users)

Sentry 错误追踪(实际数据)

【Sentry Dashboard 截图说明】

Error 1: "Cannot read property 'lat' of undefined"
  发生次数:3
  用户:小王(iPad 用户)
  原因:地点标注时网络中断,坐标对象为 null
  修复:加 null check

Error 2: "IndexedDB quota exceeded"
  发生次数:5
  原因:用户一次上传 200+ 张照片,超过本地存储
  修复:加压缩 + 自动清理 30 天前的数据

Error 3: "Geolocation permission denied"
  发生次数:8
  用户体验:用户忘记授予定位权限
  修复:加更清楚的权限提示

【总结】
- 8 条记录的错误,全部已修复
- 平均 issue 生命周期:2 周(从报告到修复)
- 0 条"未解决的严重错误"

真实发生的故事

一个野外 bug: 某次野外调查,在一个山坡上,小王同学的 iPad 网络断了,工具还在用(因为做了离线支持)。但标注了 30 个点后,回到有网络的地方,数据没有同步上来。小林当时就在现场,马上看日志,发现是"离线数据过多时,同步逻辑有 race condition"。当时修不了,用户的数据丢了。小林后来改进了同步机制,加了 transaction lock。

这个少年的思考

小林说:"写一个工具很容易,运维一个真实用户在用的系统很难。我现在每周都会看 Sentry dashboard,看有没有新错误。如果有用户报问题,我通常 24 小时内就出 hotfix。这才是真的'工程师'的感觉 —— 不是代码写完就完了,而是系统在线上活着,要去照顾它。"

你也想做?

这个项目用的是进阶版 · 项目 06「持续运维」

→ 打开项目 06