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.
Urgent and quick sits top left. Start there, then work across.
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.
Next steps
What happens after the report.
Walkthrough callWe talk through each finding, answer questions and agree what matters for your roadmap.
You decideYour team can fix things internally. The report is written so they can.
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.