
Engineering transformation · October 2026
5.6× more development output at Keeps
Read how we simplified development at Keeps, gave engineers more autonomy, and built the guardrails and automation to help the team deliver faster.
January 1–October 14 in each year. Repeated merges removed.
- Development output
- 161 → 904
- Simpler changes
- One codebase
- Automated bug fixing
- 54 minutes
Merged changes over matching periods in 2025 and 2026
Shared features maintained once, instead of across three repositories
From a recorded error to a proposed fix ready for human review
- Client
- Keeps · Hospitality content software
- Period
- January–October 2026
- Scope
- Architecture, team practices and AI automation
The challenge
Every next step needed a push
Keeps helps hotels, tour operators, and restaurants manage photos and content across publishing channels. The product needed new capabilities and ongoing fixes, but too much of the development lifecycle depended on the founder.
Routine development and design decisions kept coming back for direction. Work needed chasing, and engineers had too little ownership of how to move it forward. The founder became the decision-maker and coordinator for details the team should have been able to handle.
The technical setup added more friction. One application was split across three repositories, releases passed through several branches, and there were no automated test files at the end of 2025.
I joined in January 2026 to help change both the architecture and the way the team worked: make changes easier, build confidence in releases, and give engineers the autonomy to deliver.
What changed
Remove duplicate work
Keeps’ dashboard, admin tools, and background services were parts of the same application, maintained in separate repositories.
A database change could require updates in all three. The same was true for billing and other shared features: related work spread across codebases and multiple pull requests.
We brought the applications into one repository with shared packages. Shared logic had one home, and related changes could be implemented and reviewed together.
What changed
Remove a bottleneck from every release
A finished change still had to move through a chain of branches. Each promotion added coordination and opportunities for merge conflicts, pulling attention away from development.
We removed the intermediate branch promotions from the normal release path. Once a change was ready, merging it into the main branch triggered deployment.
That cut repeated handling out of the workflow. Engineers could spend their time implementing and checking changes instead of moving the same work between branches.
Before
- Feature
- Develop
- Sandbox
- Main
- Deploy
After
- Feature
- Main
- Deploy
The normal release path, simplified. Both end in deployment.
What changed
Build the guardrails for faster development
To move fast safely, you need guardrails. In a car, you put on a seatbelt. In software, you build tests that help catch mistakes before they reach customers.
We started with a suite of 457 tests in March, then added browser tests, shared coding guidance, and continuous integration. Tests became part of implementation and code review, especially around sensitive areas.
In the PRs tracked here, 81% included test changes in May. In September and October, that reached 89%.
Share of PRs touching test files. This measures testing adoption, not test coverage.
Read the chart data
| Month | PRs with test changes |
|---|---|
| Mar | 20% |
| Apr | 62% |
| May | 81% |
| Jun | 92% |
| Jul | 75% |
| Aug | 91% |
| Sep | 89% |
| Oct | 89% |
What changed
Put AI to work beyond code completion
Keeps already used AI to suggest code as engineers typed. We introduced multiple assistants that could investigate problems, propose an approach, implement changes, write tests, and review the result.
Shared instructions kept the assistants aligned with the codebase and its conventions. Engineers could delegate substantial parts of a task, then inspect and verify the work.
This also created the foundation for automation: well-scoped bugs could move from investigation to a proposed fix without someone prompting each step.
What changed
Give engineers ownership of the next step
Faster tools only helped if the team could act. We changed the expectation from waiting for detailed direction to investigating the problem, choosing a reasonable approach, and taking responsibility for the result.
Engineers gained room to make routine implementation and design decisions. Tests and shared conventions supported those decisions, and questions went to the founder when they needed business direction.
That reduced the need for handholding and repeated conversations before work could move forward. The founder could focus on priorities while engineers owned delivery.
In practice · An automated fix
An early-morning error became a proposed fix in 54 minutes
Before the working day began on September 9, a production error recurred. The scheduled agent picked it up, investigated the issue, prepared a change with tests, ran checks, and opened a pull request.
No one had to start the investigation or prompt each step. By 06:42, the proposed fix was ready for an engineer to assess.
A production error recurs
Sentry records the error before the daily agent run.
Scheduled daily sweep
The agent checks errors and existing issues, then triages the work.
The fix workflow starts
An isolated workflow prepares code and tests, runs checks, and requests an automated review.
A pull request is ready
The proposed change is available for human assessment.
An engineer merges the change
The merge triggers production deployment.
Better signals
We expanded Sentry error reporting and distributed tracing to understand failures and performance. We also implemented PostHog to see how customers moved through the application and which features they used.
Fast feedback enables faster development
Linting, tests, and faster development tools shortened the feedback loop. The agent checks existing issues before preparing changes, helping avoid duplicate work.
The results
More work delivered, with less coordination
Merged changes rose from 161 in 2025 to 904 in 2026 over the same January–October window. This reflects the combined changes to architecture, practices, staffing, and AI usage.
With AI assistance, we also built browser-based automations that let Keeps interact with upstream providers where usable APIs were unavailable. Those automations provided an API-like interface for the product.
Automated investigation meant a fix could be prepared before anyone started chasing the issue. Extending that workflow to more well-scoped problems offers a way to reduce manual follow-up further.
Median ticket closure fell from 20 days in Q1 to 7 days in Q2. It rose to 12.6 days in Q3 during security hardening and a substantial integration build.
Open tickets remain unresolved in the analysis. Snapshot: October 19, 2026.
Bring this approach to your team
Want your team
to deliver faster?
I help teams review their architecture, find friction in their development process, and put improvements into practice—from simpler releases to effective AI-assisted workflows.
Discuss your development goalsBook a free 30-minute conversation about your setup and where I could help.
Start with the work you want to improve
- Where is your architecture creating repeated work?
- Which decisions keep development waiting?
- Where could AI assistance and automation help?
How the results were measured
Merged changes
The comparison covers January 1–October 14 inclusive in 2025 and 2026, using UTC merge dates across five repositories. Repeated branch promotions, repeated titles, repeated merges of a branch into different bases, and merge fix-ups are removed. Counts are 161 and 904 (5.61×). This measures engineering throughput, not effort per task or business value.
Testing adoption
The chart counts merged PRs touching test-file paths, excluding Sigurður’s own PRs. It measures adoption of testing, not coverage. The March 13 example is PR #26.
Automated fix
The September 9 example is PR #603. The 54-minute interval runs from the last recorded error at 05:48 to the PR opening at 06:42. The agent runs daily at 06:15; this is one recorded case, not a response-time guarantee. The human merge was at 12:14, which triggered deployment.
Ticket closure
Ticket figures come from the October 19 Asana snapshot, with open tickets retained as unresolved. Closing a ticket does not establish when a fix reached production. The 2025 board tracked different work, so it is not used for a year-over-year comparison.
Architecture, practices, staffing, and AI usage all changed during this period. These observations do not isolate the contribution of AI alone. Regressions still happened, and some work took longer than planned.