Tick-Tock: The Strategy to Never Break Your Software
Hey folks! Today I want to share a strategy that completely changed how I think about software evolution. I learned this hands-on while I was working at Woovi, a Brazilian Pix payments fintech, and it’s become one of my most valuable mental tools since.
I’m talking about the Tick-Tock strategy.
The Problem: Feature After Feature
Imagine you work on a fast-growing product. Every sprint has a new feature, every week has a database change, every release has a new API. Sounds productive, right?
Wrong. What actually happens is:
- The database becomes a Frankenstein of migrations
- Old APIs break without warning
- Clients who integrate with you become afraid to update
- The team accumulates tech debt until it’s unbearable
- Someone deploys on Friday and everything breaks
You know that feeling of running on a train while swapping the wheels? Yeah, that.
What is Tick-Tock?
The Tick-Tock strategy originally came from Intel, who used this model to evolve processors. The idea is simple: alternate between two types of cycles.
Tick (Stabilization)
- Focus on maintenance, fixes, and refactoring
- Zero changes to public APIs
- Performance and code quality improvements
- Tech debt payoff
- The client doesn’t need to change anything on their end
Tock (Innovation)
- New features, new APIs
- Product evolution
- Changes that may require client adaptation
- Controlled experimentation
The key: never two tocks in a row. Whenever you ship something new (tock), the next cycle is stabilization (tick). Always.
How Woovi Applied This
At Woovi, we dealt with money. Literally. Pix payments, integrations with multiple banking providers, real-time webhooks. You couldn’t break anything. A bug there could mean a client not receiving a payment.
The Tick-Tock strategy showed up at several levels:
Database Changes
This is perhaps the most important application. When you work with databases in production, the golden rule is: never make a destructive migration upfront.
Imagine you need to rename a field from pixKey to dictKey. The wrong way:
// Direct tock (will break things)
Migration 1: Rename pixKey → dictKey
// Everything that depended on pixKey breaks instantly
The Tick-Tock way:
// Tock: Add the new field
Migration 1: Add dictKey field
Migration 2: Script that copies pixKey → dictKey
// Tick: Stabilize
Migration 3: Code reads from dictKey (with fallback to pixKey)
Tests confirm everything works with both fields
// Tock: Evolve
Migration 4: Code uses only dictKey
Migration 5: Remove pixKey (only after confirming nobody uses it)
See? Each step is safe. If something goes wrong at any stage, you can roll back without losing data.
Feature Evolution
When we needed to change a feature’s behavior, it was never “swap and done.” It was always:
- Tock: Launch the new version side by side with the old one
- Tick: Monitor, fix bugs, ensure clients have migrated
- Tock: Remove the old version (only if you’re sure nobody uses it)
In practice, this meant the system supported two versions simultaneously for a period. More work? Yes. But the cost of breaking a client in production was much higher.
APIs and Backwards Compatibility
This applied especially to public APIs. At Woovi, we treated backwards compatibility as a priority. If you needed to change an endpoint:
- Tick: Add the new field to the response without removing the old one
- Tock: Document the deprecation, give clients a migration deadline
- Tick: Monitor who’s still using the old field
- Tock: Remove the old field (with prior notice)
The idea is that the client never wakes up with a broken integration. They get time, documentation, and support to migrate at their own pace.
Why It Works
The beauty of Tick-Tock is that it solves several problems at once:
For engineering:
- Tech debt never piles up too much because there’s a dedicated cycle for it
- Deploys are safer because there’s never a big change without stabilization after
- The team doesn’t burn out in an eternal sprint pace
For product:
- New features get time to be polished before the next launch
- User feedback gets incorporated in tick cycles
- Perceived product quality goes up
For the client:
- Updates never break their integration
- Conservative clients can stick to ticks and skip tocks
- Documentation and migration are part of the process, not an afterthought
Applying It to Your Project
You don’t need to work at a fintech to use Tick-Tock. The strategy works in any context:
- Define your cycles: Could be per sprint, per month, per release. The important thing is to alternate.
- Be disciplined during ticks: The temptation to sneak in “just one more feature” during stabilization is huge. Resist it.
- Document everything: Each tock should have a clear migration plan. Each tick should have stability metrics.
- Communicate clearly: Your team and your clients need to know which phase you’re in.
Summary
| Tick | Tock | |
|---|---|---|
| Focus | Stability and maintenance | Features and innovation |
| APIs | No changes | May add/change |
| Database | Compatibility migrations | Evolution migrations |
| Risk | Low | Controlled |
| Client | No action needed | May need to adapt |
The Tick-Tock strategy isn’t about going slow. It’s about going consistently fast without leaving a trail of destruction. At Woovi, this was what allowed us to evolve a critical financial system without ever breaking our clients’ experience.
That’s it, folks! If you want to chat about how to apply this strategy in your context, find me on Twitter or LinkedIn.