80% of the work takes about 20% of the effort. What about the rest?

The last 20% is where it becomes reliable, secure, scalable and easy for a team to work on. We help you get there.

Computers still do what you ask. The way we ask has changed.

Software used to begin with precise instructions: enter this value, run this code, get that result. An AI tool lets us skip ahead. We can describe what we want in ordinary language and have a working screen in minutes.

“Build my app and make it good, fast and safe.”

That may produce something convincing. It does not tell the model who should see which data, what happens when a service fails, where the app will run or how another developer will change it. The model has to fill those gaps with guesses.

A more useful requestPrompt
Review this existing TypeScript app before launch.

It lets small businesses manage customer records.
Each customer must only see data from their own account.
It runs on Next.js, PostgreSQL and AWS.

Look for:
- authentication and account separation
- unsafe handling of personal data or secrets
- slow queries and scaling problems
- missing tests, monitoring and recovery steps

For each issue, show me the evidence, explain the risk in
plain language and suggest a fix. List any assumptions you
had to make. Do not change the code until we agree on priorities.

A better prompt is a better start. The code still needs to hold up.

A login that barely works

Passwords and full user records live in the browser. Corrupt storage crashes the function, loose comparisons hide input problems and any script on the page can read the signed-in user. The comments repeat the code without explaining these risks.

login.tsTypeScript
/** * Logs a user in and stores the user so other pages can * read it. Returns false when credentials do not match. */async function login(email: any, password: any) {  // Read every user from browser storage.  const users = JSON.parse(    localStorage.getItem("users") || "[]",  );  // Match the values supplied by the login form.  const user = users.find(    (item: any) =>      item.email == email && item.password == password,  );  // Save all user data so the app remembers the login.  if (user) {    localStorage.setItem(      "currentUser",      JSON.stringify(user),    );    return user;  }  // Tell the page that the login failed.  return false;}

A version the team can build on

Credentials stay on the server. User lookup, password verification and sessions are reusable dependencies, failed logins behave consistently and only safe user fields leave the function.

auth-service.tsTypeScript
type SignInInput = Readonly<{  email: string;  password: string;}>;type PublicUser = Readonly<{  id: string;  email: string;  name: string;}>;export async function signIn(  input: SignInInput,  { users, passwords, sessions }: AuthDependencies,): Promise<PublicUser> {  const email = input.email.trim().toLowerCase();  const user = await users.findByEmail(email);  if (!user || !(await passwords.verify(    input.password,    user.passwordHash,  ))) {    throw new InvalidCredentialsError();  }  await sessions.start(user.id);  return { id: user.id, email: user.email, name: user.name };}

We are not here to smash the machines.

AI is excellent at getting a first version on screen, exploring options and taking repetitive work off a team’s plate. We use it too.

Your product is still only as good as the context behind it, the decisions made around it and the evidence that it works.

You can ask a model to check the risks you already know about. The harder problems are the ones nobody thought to put in the prompt: a permission boundary that fails for one customer, a recovery process that has never been tested or a cloud bill that grows with every request. These are the unknown unknowns. Experienced reviewers know where to look for them.

The last 20% looks different at every scale.

A solo founder with a promising app

You used AI to turn an idea into a working product, and real users are starting to arrive. We help you work out what might break, keep user data safe, choose sensible hosting and make releases repeatable, without taking the product away from you.

A small company shipping an AI product

Customers are using the product and the team is moving quickly. We bring in the software, AI, cloud and security experience needed to answer questions about model quality, privacy, cost and support before they become customer problems.

A large organisation carrying years of tech debt

The software may have nothing to do with AI. It runs an important part of the business, but releases feel risky, knowledge sits with a few people and old shortcuts slow the team down. We help you understand the system, reduce the riskiest debt and improve it without assuming everything needs to be rewritten.

Tell us where you’re up to.

A link, a rough demo or a few sentences is enough. Tell us who uses the app, what already works and what feels difficult right now.

hello@rxs.au

Please do not include passwords, credentials, personal information or regulated data.

Your message is sent securely to RX Software. You can also email hello@rxs.au.