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.

Development output Merged changes, compared over the same period
2025161
2026904

January 1–October 14 in each year. Repeated merges removed.

Development output
161 → 904

Merged changes over matching periods in 2025 and 2026

Simpler changes
One codebase

Shared features maintained once, instead of across three repositories

Automated bug fixing
54 minutes

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.

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.

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.

From development to deployment

Before

  1. Feature
  2. Develop
  3. Sandbox
  4. Main
  5. Deploy

After

  1. Feature
  2. Main
  3. Deploy

The normal release path, simplified. Both end in deployment.

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%.

Tests became part of the work Merged PRs excluding my own, March–October 2026

Share of PRs touching test files. This measures testing adoption, not test coverage.

Read the chart data
MonthPRs with test changes
Mar20%
Apr62%
May81%
Jun92%
Jul75%
Aug91%
Sep89%
Oct89%

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.

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.

54 minFrom the last recorded error to an open pull request
September 9, 2026 · All times UTC
  1. A production error recurs

    Sentry records the error before the daily agent run.

  2. Scheduled daily sweep

    The agent checks errors and existing issues, then triages the work.

  3. The fix workflow starts

    An isolated workflow prepares code and tests, runs checks, and requests an automated review.

  4. A pull request is ready

    The proposed change is available for human assessment.

  5. 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.

Time to close an engineering ticket Median, by quarter created in 2026
Q1
20 days
Q2
7 days
Q3
12.6 days

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 goals

Book 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.