Is it eligible?

Is distributed systems engineering eligible R&D?

Sometimes eligible

Sometimes. Building on published protocols and libraries (Raft, Kafka, CRDT frameworks, Kubernetes) is routine. Distributed systems work is core R&D when a coordination, consistency or recovery behaviour under your real network and failure conditions cannot be predicted from published results, and you resolve it by planned experiments in an emulator, a model checker or the field.

Reviewed by George WalchFacts last verified

When it qualifies

Dispatch agreement across a fleet of home batteries

An illustrative energy software company coordinates 20,000 home batteries and must reach agreement on each dispatch instruction within 400 ms at p99, inside every five-minute dispatch interval, while 2% to 8% of devices sit on lossy mobile links. Published consensus and gossip protocols are evaluated on data-centre networks. The team hypothesises that a two-tier leaderless protocol meets the target with up to 5% of devices partitioned, tests it in a network emulator varying loss and partition patterns, then in a 500-device field trial.

When it does not

Breaking a monolith into services

A SaaS company splits its monolith into twelve services on Kubernetes, connects them through a managed message broker and uses the broker's documented transactional writes for exactly once processing. The project is large and took a year. Each component behaved as its documentation said, so no outcome was unknown to a competent distributed systems engineer.

The evidence that supports it

  • Design documents or architecture decision records stating the protocol question and the failure conditions published evaluations did not cover.
  • A test plan naming the conditions varied (loss rate, partition pattern, clock skew, node count), how they were varied (one at a time, randomised or in combination) and what was held constant.
  • Network emulator or fault-injection configurations, versioned with the code they tested.
  • Operation histories checked for consistency violations, with the checker's output kept.
  • Latency and convergence distributions per run, compared against the pre-stated threshold.
  • Pull requests changing the protocol between runs, linked to the result that prompted them.
  • For model checking or simulation, the specification version, the properties checked, the state space or scenarios explored, and the counterexamples found.

Distributed systems is a field with a deep published literature and excellent open-source implementations. That cuts both ways for the R&D Tax Incentive. The literature defines what a competent engineer already knows, so most adoption work is routine. It also marks clearly where knowledge stops, which is where a genuine core activity can begin.

What counts as already known

A competent distributed systems engineer is taken to know the published consensus protocols and their proofs, the documented semantics of mainstream brokers and databases, the consistency models and their trade-offs, and the behaviour of mature replication and CRDT libraries. Using any of these as documented is applying existing knowledge. So is putting services on an orchestrator, adding a service mesh or sharding a database along a documented key. The ATO's software alert TA 2017/5 lists using existing technologies as they were intended to be used among the marks of an ineligible claim.

Where the unknowns are

In Rand's reading of AusIndustry's core criteria, a typical core shape is getting components to interoperate when their combined behaviour cannot be known in advance. In distributed work that usually means behaviour under conditions the published evaluations did not test:

  • Real networks. Loss, asymmetric latency, intermittent links and long-haul routes rather than a data-centre LAN.
  • Specific failure combinations. Partitions during leader change, clock skew during recovery, correlated device failures.
  • Scale and topology together. Tens of thousands of participants, or a geography the protocol was not designed for.

The question is whether the outcome could be predicted, not whether it was hard to build. If a competent engineer could work a property out from known theory with standard analysis, it was knowable in advance. That does not rule out analysis as a method: AusIndustry says experiments take many forms, and model checking or simulating a new design can be how the unknown is resolved. But models rest on assumptions about the network, so measured behaviour under real conditions is often where a genuine core R&D activity remains.

Scope it narrowly. "Our replication layer" is a component, not a knowledge gap. One activity per unanswered coordination question, with each run's result shaping the next, reads as an experiment and keeps the routine build work around it out of the core.

Edge cases peculiar to distributed work

  • Chaos engineering. In Active Sports Management [2023] AATA 4078 the Tribunal found trial and error without isolable variables is not a repeatable experiment. Terminating instances to see what happens is that. A planned design is not, whether it changes one condition at a time or randomises several, as long as the conditions are recorded and results can be attributed to them.
  • Formal specifications. Whether a TLA+ or similar specification is supporting work, the experiment itself or routine depends on what it was written to find out; the FAQ below sets out the three cases.
  • Consistency bugs. Finding and fixing a race in your own code is usually debugging, even when it takes weeks.
  • Re-platforming. Moving onto managed services or containers is covered on the cloud migration page.
  • Pure throughput limits. When the question is how fast one component can go rather than how nodes coordinate, see performance and scale engineering.

Companies whose product is the infrastructure itself will find more on scoping activities on the data infrastructure page. Pull requests whose descriptions record the protocol question and each result are usually the best record; the GitHub integration page explains what Rand reads from them.

Frequently asked questions

Is chaos engineering R&D?
Only when it is the method of a planned experiment on a genuine unknown. Killing nodes to see what breaks is resilience testing. A fault-injection design that sets out which conditions vary (one at a time, randomised or in combination), what is held fixed and which pre-stated property is measured can be part of a core activity.
We wrote a TLA+ specification. Does that count?
It depends on what the specification was for. Writing one to design or check a genuine experiment can be supporting work. Model checking a new protocol design can itself be the experiment where nobody could predict whether the property holds, provided it runs from a stated proposition to observed results and evaluation. Specifying a published protocol and confirming its known properties is not.
Does moving to microservices count as R&D?
Rarely. Decomposing a monolith using a message broker, an orchestrator and documented patterns is re-platforming. A specific coordination behaviour that the move exposes, and that nobody could predict, can be assessed separately.

Sources

  1. AusIndustry (business.gov.au): Software development sector guide
  2. ATO: Taxpayer Alert TA 2017/5
  3. AusIndustry (business.gov.au): Conducting core R&D activities
  4. Income Tax Assessment Act 1997 (Division 355), Federal Register of Legislation

The R&D Tax Incentive is a self-assessment program. This page is general information, not tax, legal or financial advice; eligibility depends on your circumstances and you should seek independent advice for them.