What the regulator wants a software record to show
AusIndustry's software sector guide says the content of a record matters, not its format. For an experiment it asks for records showing the technical hurdle, the actions taken to overcome it, "including attempts that failed", and the data, analysis and conclusions. business.gov.au adds that records should be created at the time the activity is conducted. Section 355-25 of the Income Tax Assessment Act 1997 frames the same thing as a systematic progression from hypothesis to experiment, observation, evaluation and conclusion.
A pull request is created at the time, dated by GitHub, attributed to its author and tied to the exact change tested. That makes it a natural home for the experiment record, if someone writes the record into it. Two limits are worth knowing. The opened date shows when the pull request was created, not when each line of its description was written, so add a late conclusion as a dated update rather than rewriting the hypothesis; GitHub's edit history on the description shows what changed. And a good record supports a claim without settling it: whether the work is R&D depends on whether the outcome was genuinely unknown in advance and the work progressed systematically, not on how the pull request is worded.
A template for experiment pull requests
Use this only on pull requests that test something you could not predict. Routine work should stay routine.
- Hurdle. What stops progress, with the measurement that shows it.
- Why known approaches fall short. What you checked first and why it did not settle the question.
- Hypothesis. What you expect this change to do, and what result would disprove it.
- What was tested. The variant, what was held constant and how it was measured.
- Result. The numbers as text, and whether the hypothesis held.
- Next. What this result changes about the next attempt.
Good and weak examples (illustrative)
These examples are illustrative, not from any real company.
| Weak | Stronger |
|---|---|
| Title "Improve search perf" with an empty description | Title "Test: two-stage retrieval to hold p95 under 150 ms at 10M documents" |
| "Tried some things, faster now" | "Hypothesis: a coarse filter before re-ranking keeps recall above 0.92. Disproved if recall drops below 0.90" |
| Commits "wip", "fix", "more fixes" | Commits "try bloom filter ahead of LRU lookup", "revert bloom filter: 3% false positives broke recall" |
| Benchmark screenshot only | "p95 212 ms to 141 ms on the nightly 10M set, same hardware, 5 runs" |
| Failed branch deleted, nothing said | Pull request closed with "Recall fell to 0.87; filter too lossy. Next: learned quantisation" |
| Conclusion buried in a 40-comment review thread | Review outcome copied into the description under Result |
The stronger column takes a few minutes per pull request, and only on the ones that matter.
Habits that keep the record intact
- Name the ticket in the branch. A branch such as
eng-42-two-stage-retrievalties the code to the ticket that holds the plan. - Keep failures visible. Close the pull request with the reason, or merge a revert that says why. A failed attempt is evidence the outcome was uncertain.
- Write numbers as text. Screenshots, CI artefacts and dashboards can expire or be hard to search, and business.gov.au asks you to keep R&D records for five years after claiming the expenditure.
- Know how your tools treat drafts. A draft is still a record, but some importers, Rand included, hold drafts back. If you use Rand, mark an experiment ready for review before you close it so it is read.
- Keep routine work honest. Do not dress up a dependency bump or a refactor as an experiment. Reviewers notice, and it weakens the records that are real.
What Rand does with these pull requests
If you connect GitHub, Rand reads each pull request's title, description, branch names and commit messages with their dates (up to the first 100 commits, and the first line of up to 20 of them in the record it assesses), so the hypothesis and the conclusion belong in the description, not only in commits. It reads the number of review comments but not the comments themselves, so the description is what carries the record. Bot pull requests are screened out, and drafts are held back until they are marked ready for review. Reverts are kept and flagged as possible failed experiments. These rules run when Rand first sees a pull request; a later edit sends it back for AI assessment without the rules running again.
Each pull request becomes a dated record that Rand's AI proposes to place on one of your R&D activities, for a person to confirm. For the ticket side of the same experiment, see Linear issues as hypotheses and results. The contemporaneous evidence glossary entry, the guide to failed experiments and the R&D Tax Incentive resources cover the rest.
Two longer guides go further: GitHub commits as R&D evidence and the record keeping requirements.