
What to automate first in a small business
Choose a first automation by scoring the work, data, risk, ownership, and reversibility. Then validate one pilot before you expand it.

An older system can be awkward to maintain and indispensable to the business at the same time. It contains prices, exceptions, and working practices that were never fully documented. A big-bang rewrite promises a clean start, but the original keeps changing during the long build. The replacement ends up chasing a moving target.
A safer approach modernizes one business capability at a time. A new component takes over a defined request, the old path remains available, and routing can be reversed. Users do not have to wait for a distant day when every feature is complete.
Modernization as a series of reversible steps
Each stage should deliver value and preserve a route back.
1. Measure behaviour
Flows, failures, performance, and data ownership.
2. Create a seam
Place a facade or adapter before the old system.
3. Migrate one flow
Start with a valuable but manageable slice.
4. Compare outcomes
Contracts, parallel run, and a business cycle.
5. Retire the old path
Only after evidence, monitoring, and a rollback rehearsal.
Documentation describes intent. Production reveals reality. Before changing the system, inspect active screens, scheduled jobs, integrations, failure paths, and manual corrections. A supposedly incidental export may be the file that finance relies on every month.
The audit should not become an encyclopedia. It needs a map of critical flows, data owners, and places where change is expensive. Each flow gets observable behaviour. Record the expected result, material edge cases, and what happens when a provider is unavailable.
This inventory becomes the basis of regression tests. The tests protect behaviour rather than old code structure. If the legacy application calculates a discount in an odd but contractually valid way, a replacement must not silently correct it without a business decision.
A useful seam can be an API route, a screen, a file import, or an event. A facade in front of old and new implementations decides where to send each request. The external contract stays stable while the internals change in stages.
The first candidate should not automatically be the hardest module. A better pilot has a clear owner, an observable result, and limited dependencies. It lets the team prove deployment, monitoring, and rollback before touching the operational core.
The seam also prevents the new code from inheriting the old data model everywhere. A translation layer can map legacy identifiers and states into the language of the new domain. That layer should have an explicit removal condition so temporary compatibility does not become permanent architecture.
The largest risk in an incremental migration appears when both systems can write the same fact. A conflict may remain hidden for a week. Every migrated flow therefore needs one declared system of record. The other side may receive a readable copy, but it does not own the decision.
Moving data ownership deserves its own stage. Validate mappings and data quality first. Move records through a repeatable process that can continue safely after interruption. Once traffic switches, writes on the old side stop or pass through the new contract.
Application-level dual writes are tempting and fragile. A partial outage leaves different states behind. One committed change plus a reliable, repeatable delivery mechanism is easier to reason about. That mechanism still needs lag monitoring and a place for messages that cannot be processed.
For calculations, old and new implementations can process the same input for a period. Users continue to receive the proven result while the system compares outputs. Differences are classified as defects, approved rule changes, or consequences of poor historical data.
Some actions must never run twice. A payment or customer email cannot be repeated simply for comparison. Use recorded inputs, a side-effect-free shadow mode, or contract tests built from production examples instead.
Agree on the switch condition before the trial. It may combine a volume of cases with no unexplained mismatch, response time, and proof that no events were lost. Saying that the new component looks good is not an operating criterion.
Each stage should have a small failure radius. A routing switch can return traffic to the old path. Database changes remain compatible during transition, so an old consumer does not fail immediately after the new schema is deployed.
Rollback is not always a feature flag. If the new system has created records that the old one cannot read, turning it off may lose access to work already completed. The plan must state how long rollback remains possible, how post-switch data will be handled, and who can make the decision.
Remove the old path after a successful stage. Otherwise the company pays for two systems indefinitely. Removal gates might include a completed rollback window, reconciled financial results, and sign-off from the process owner.
Full rewrite or gradual replacement
The ability to isolate behaviour matters more than the age of the technology.
Full rewrite
Fits a small scope, well-understood rules, and a short coexistence period.
Gradual replacement
Protects ongoing change, unclear behaviour, and a system the business still depends on.
Incremental modernization is not a universal rule. A full rewrite may fit a small application with short-lived data, stable scope, and the ability to freeze changes during transition. A regulatory deadline that entirely rules out the old platform can also make a long coexistence period wasteful.
Even then, document current behaviour, data migration, and reversal. A clean repository does not remove business risk. It only changes how the team encounters it.
For a large live product, delivering capability by capability is usually easier to control. The business receives useful changes earlier and later decisions use production evidence. Our public Slates case study illustrates the care required when rebuilding and testing an older platform. It does not claim that every system uses the same migration pattern.
Connect every technical stage to a business outcome. One stage might shorten document processing, retire an unsupported database, or reduce manual correction. The result tells the team whether the next investment should follow the same direction.
New components can remain modular and later become independent services when evidence supports that move. The choice between a modular monolith and microservices should follow operating needs. Rise can own the delivery through its software modernization service.
Success is not the moment when the final old line disappears. It is the point where the company can change important workflows safely, operations can understand failures, and inherited risk becomes smaller with every release.
Do not begin with whether old code looks untidy. Begin with the business flow that is costing money, trust, or the ability to change a rule. Stabilization is appropriate when incidents need to stop first. Refactoring fits a contained problem with known behaviour. Incremental replacement fits a live system whose rules must be discovered while the work proceeds. SaaS can take over a standard process. A full rewrite belongs more often to a small and closed scope.
On a smaller screen, scroll the table horizontally.
| Choice | Consider it when | What must be true |
|---|---|---|
| Stabilize | Incidents or security debt prevent safe work | Rule changes can wait while monitoring and recovery improve |
| Refactor | The problem is in a bounded part of the code | Behaviour, tests, and an owner are known |
| Incremental replacement | A flow has a seam and operations cannot stop | The old route, measurement, and rollback remain available |
| SaaS replacement | The process is standard and differentiation adds little value | Data, integrations, pricing, and terms are acceptable |
| Full rewrite | Scope is small, stable, and can be frozen | Migration, acceptance, and retirement of the old version are prepared |
The decision can combine options. A company might stabilize sign-in, refactor a price calculation, and replace orders in stages. A software modernization engagement should therefore begin with decision boundaries, not a technology list.
A business trigger is repeated manual correction, lost sales during an outage, delayed close, or an inability to introduce a new rule. A technical trigger is an unsupported database, an integration with no known owner, weak backups, or a change the team is afraid to deploy. Collect both kinds of evidence. One without the other produces either expensive technical neatness or a quick fix that cannot be operated.
For each flow, record input, output, owner, system of record, timing dependency, and manual workaround. Verify supplier access, licences, batch jobs, exports, and user accounts. For personal or financial data, decide who may alter a record, how the decision is logged, and how state is restored after failure. Our security guidance can help frame the access and accountability questions.
Total cost of ownership is not only the build price. Include operations, support, licences, infrastructure, training, parallel running, and leadership time spent resolving disputes. Set the worst acceptable migration impact, such as a delayed order or a temporarily unavailable report. Then state what will detect it before a customer does. The calculator gives an initial frame for potential benefit, not a promised return.
Before development, ask which outputs the new flow must preserve, which old exceptions are deliberate rules, and who approves a change. Acceptance criteria need example data, error measurement, an approval owner, and a response to a mismatch. When a supplier takes over an older system, audit findings can change the scope. The business terms explain how new findings are handled transparently.
Let the first stage deliver one small flow with a clear result. Before release, prepare contract tests, monitoring, routing control, and a decision owner. After switching, observe outputs, lag, and manual intervention for the agreed period. The rollback plan states how long return remains possible, what happens to new data, and who approves the return. Retire the old flow only after those conditions are met.
Before the next stage, confirm four ownership decisions:
This is not paperwork. It exposes a disagreement about rules before production changes.
No audit finds every hidden rule. Parallel running is not safe for payments or customer messages, and SaaS cannot replace a process that creates your differentiation. Start with one flow audit, a decision matrix, and named owners. The Rise blog contains further practical decisions for business systems.
Maroš Bednár prepared the article with AI support for research and language editing. He reviewed and approved the technical conclusions, examples, and final text.

Choose a first automation by scoring the work, data, risk, ownership, and reversibility. Then validate one pilot before you expand it.
Companies either ignore AI or try to change everything at once. Both are wrong. Here's a realistic 30-day plan.

Microservices buy independent change at a real operating cost. Compare both models through boundaries, ownership, data, deployment, and signals that justify extraction.