Services Case Studies Architecture Review About Contact
Request a review →
Sample report

What an Architecture Review report looks like.

A full worked example: system diagrams, a priority map and seven ranked findings, so you can judge the depth before you send us anything.

Illustrative sample. This is a fictional product written to show the format. It is not a real client and the findings are not from a real engagement.
Architecture Review · Example

Acme Projects

Project management software that many companies share.

Prepared by
Tenlyr
Scope
Customer data, access rules, speed, background jobs, cloud setup
Evidence reviewed
How it is built, the data layout, roles and access rules, connections to other tools, the job setup and the cloud layout
2Fix now
3Plan next
2Keep an eye on

Nothing needs a rewrite. The first big customers are asking about security and data separation, and reports feel slow for the largest accounts. Both can be fixed on the current design.

Health by area

  • Customer data separationFix nowF-01
  • Access rulesFix nowF-02
  • Speed under loadPlan nextF-03
  • Background jobsPlan nextF-04
  • Test and live matchPlan nextF-05
  • Growth of stored dataKeep an eye onF-06
  • Outside servicesKeep an eye onF-07
Diagram 1

How Acme is built today.

Every numbered marker matches a finding below. Red dashed lines show where the risk sits.

How Acme Projects is built todayPeople use a web app and a client portal. They call one connection layer that talks to one shared database. Reports pages skip the customer check and reports run on the live database. One job queue handles all background jobs and calls outside email and payments services. Numbered markers match the findings. PeopleThe productIn the backgroundOutside servicesAgency staffweb appTheir clientsportalWeb appwhat people seeConnection layerAPIs for apps and toolsReports pagesthree build their own requestsOne job queueemails, imports, billingReport builderruns when askedEmailservicePaymentsserviceMain databaseevery customer shares itCustomer dataActivity logone table, never trimmedLive reports run here tooFile storageTest setupone copy, sample data. Live runs several copies.21436775
Fix nowPlan nextKeep an eye on

Want a diagram like this for your product? Request an Architecture Review

Priority map

What to do first.

Urgent and quick sits top left. Start there, then work across.

Priority map of the seven findingsFindings F-01 and F-02 are the most urgent and medium effort. F-03 to F-05 are medium urgency. F-06 and F-07 are low urgency and small effort.High urgency, quick to doHigh urgency, bigger jobLow urgency, quick to doLow urgency, bigger jobEffort to fix →Urgency →SmallLarge1Customer data check2Access rules3Heavy reports4One job queue5Test vs live setup6Activity log7Outside service limits
Findings

Seven findings, in the order to act on them.

Fix nowPlan nextKeep an eye on
1Fix nowF-01Effort: Medium

Customer privacy depends on every developer remembering a check

What we saw
Customer separation is applied in the app code, one request at a time. Three reporting pages build their own requests and skip the check when an optional setting is missing.
Why it matters
One missed check shows one customer another customer’s data. Larger buyers will test exactly this during a security review, and it is hard to prove safe by reading code.
What to do
Enforce the separation at the database level, or through one required data layer. Add an automatic test that tries to read another customer’s data on every page.
2Fix nowF-02Effort: Medium

Access rules are checked on screen, but only partly behind the scenes

What we saw
Admin-only buttons are hidden on screen. Checking the connection layer against the role list shows several routes that let any signed-in user make changes.
Why it matters
Hiding a button is not access control. Anyone with a login and the right tool can reach those routes.
What to do
Put all access rules in one place and deny by default. Check every route against it, and test the role list so new routes cannot go live unprotected.
3Plan nextF-03Effort: Medium to large

Heavy reports share a database with live traffic

What we saw
Reports are built on the main database when someone asks, with no time limit.
Why it matters
One large customer exporting a year of data can slow the product for everyone else. This is invisible at low volume and sudden at scale.
What to do
Run reports on a copy of the database, or from pre-calculated summaries. Set time limits, and move long exports to background jobs.
4Plan nextF-04Effort: Small to medium

All background jobs wait in one line

What we saw
Notifications, imports, exports and billing updates wait together. Jobs are not safe to repeat, so a retry can do the same thing twice.
Why it matters
A slow export delays password-reset emails. A retry after a timeout can send two emails or charge twice.
What to do
Use separate lines for different kinds of jobs, make jobs safe to repeat, and cap retries with a place for failed jobs to land.
5Plan nextF-05Effort: Medium

The test setup does not match the live setup

What we saw
The test environment runs one copy with sample data. The live product runs several copies with real customer volumes and a layer of saved data.
Why it matters
Bugs that only appear under real load or with saved data are found in the most expensive place: live.
What to do
Make the test setup match the live one, and load it with realistic, anonymised data for speed checks.
6Keep an eye onF-06Effort: Small

The activity log grows with no plan to trim it

What we saw
Every action is saved in one table, with no archiving or clean-up rule.
Why it matters
No problem today. It becomes slow and costly as usage grows, and big customers will ask how long you keep records.
What to do
Decide how long to keep records, then archive old ones by date. Review when the table reaches an agreed size.
7Keep an eye onF-07Effort: Small

Limits on outside services are not tracked

What we saw
Calls to two outside services are not tracked for usage limits or retry behaviour.
Why it matters
When a limit is hit, features fail quietly for users and are hard to diagnose later.
What to do
Add simple dashboards for usage and errors, with an alert level. Revisit if you use those services more.
Diagram 2

How it could look after the fixes.

Same product, same team. New or changed parts are shaded and carry the number of the finding they solve.

How Acme Projects could look after the fixesThe same product with access rules in one place, one data layer that always checks the customer, separate job queues with a place for failed jobs, reports read from a copy of the database, old log entries archived, usage dashboards for outside services and a test setup that matches live. PeopleThe productIn the backgroundOutside servicesAgency staffweb appTheir clientsportalWeb appwhat people seeConnection layerall access rules in one placeOne data layeralways adds the customer checkNotifications queueExports queueBilling queueFailed jobskept, capped retriesEmailservicePaymentsserviceUsagedashboard + alertMain databasecustomer rules enforced here tooCustomer dataOld log entriesarchived by dateReports copyreports and exports read from hereTest setupmatches live: several copies, anonymised real-size data2143675
Next steps

What happens after the report.

  1. Walkthrough callWe talk through each finding, answer questions and agree what matters for your roadmap.
  2. You decideYour team can fix things internally. The report is written so they can.
  3. Optional: work with usIf you want help, we scope it separately. No obligation.

Want this for your product?

Your review is shaped by your own code, data and goals. Scope, access and deliverables are agreed with you in writing before any work starts. Rajesh replies personally.