Quick build: ship an app
Dashboards read. Apps also write. Four builds your team will actually use, each in stages you can stop after, plus what happens once real people are in it.
How an app build is different
A dashboard reads your data and shows it. An app lets people change things, which brings four questions a dashboard never has to answer.
| Question | Why it matters | Say it in the prompt |
|---|---|---|
| Who can log in? | An app with a URL and no login is an app your whole network can edit. | "Everyone signs in. Managers can edit their own team's records, executives see everything." |
| Where does new data live? | Writing back into your ERP is a different risk from writing into a new table beside it. | "Store new records in this app's own database. Read from the ERP and change nothing there." |
| What happens to mistakes? | People delete the wrong row. Plan for it up front. | "Nothing is ever hard deleted. Mark records inactive and keep a history of who changed what." |
| How does it get used on a phone? | Most of these apps get used standing up, in a warehouse or a truck. | "Design for a phone first. Big touch targets, works with one hand." |
Start read-only against production. For the first version of any app, read from your live systems and write only to the app's own database. Once the workflow is proven and people trust it, decide deliberately whether writing back into the source system is worth it. Your coach should be in that conversation.
When to build and when to buy
Building is fast enough now that the question is worth asking honestly rather than assuming either answer. Some categories are solved, and a solved category bought for a few dollars a seat beats anything you build.
| Build it when | Buy it when |
|---|---|
| Your process is genuinely specific and every product you have tried fights it. | The category is mature and the products are good: payroll, accounting, email, document signing. |
| The app is mostly a view and a workflow over data you already hold. | The value is in integrations with dozens of third parties you would have to maintain forever. |
| The users are internal and countable. | Thousands of external users, or a compliance surface you would rather someone else certify. |
| You expect to change it monthly as the process changes. | Regulatory certification is required, for example tax filing or clinical record keeping. |
| Existing tools cover 60% and the missing 40% is where your margin lives. | Existing tools cover 95% and the gap is an annoyance rather than a cost. |
A common and sensible answer is both: keep the system of record you bought, and build the layer on top that makes it usable for the way your team actually works. Every build on this page works that way.
Before we build anything, help me decide whether we should. What I am thinking of building: <describe it in three sentences>. Who would use it: <roles and rough numbers>. What we use today: <spreadsheet / a product / nothing>. Tell me honestly: 1. Is this a solved category where buying something would serve us better? Name what we would buy and roughly what it costs 2. What would we get from building that we could not buy 3. What is the ongoing cost of owning this: what breaks, what needs changing when our process changes, what happens if the person who understands it leaves 4. Is there a smaller version that gets most of the value Give me a recommendation, and argue against it in a paragraph so I can see the other side.
Where your time actually goes
The building is the fast part. Plan your calendar around the parts that need you, because those are the parts that decide whether the app is any good.
| Part | Who does it | What it needs from you |
|---|---|---|
| Agreeing the data model | You and the box, in conversation | Real attention. This is the stage that saves or costs you a rebuild. |
| Building the screens | The box | Nothing while it runs. Then ten minutes clicking through it. |
| Connecting live data | The box, with your approval on the import | Reviewing the sample rows and duplicate list before anything loads. |
| Roles and history | The box | Deciding who sees what, which is a business decision rather than a technical one. |
| Testing and pre-launch review | Both | An hour, honestly spent. Skipping it is where bad first impressions come from. |
| Watching three people use it | You | Half an hour, and worth more than another day of building. |
Confirm with your coach Realistic elapsed timelines for your deployment, and whether an app like these needs to move to production before real users can reach it. Deployment mode changes the answer.
Build in stages, always
A single prompt asking for a finished CRM produces a plausible-looking thing nobody trusts. Four prompts, reviewed between each, produce something your team adopts. Every build below follows the same four stages.
Agree the data model
No code yet. What records exist, what fields they carry, how they relate. This is the stage where a five-minute conversation saves a rebuild.
Build the core screens
List, view, create, edit. Enough to walk through the real workflow once with a real person watching.
Connect the live data
Pull in the real records from your source systems. This is where you find out what the data actually looks like.
Add roles, history, and polish
Who sees what, who changed what, and how it looks on a phone.
Stop and look between every stage. Open the thing. Click through it. The build moves fast enough that reviewing after each stage costs you ten minutes and saves you a day.
What a good data model looks like
Stage 1 asks the box to propose a model, and it helps to know what you are looking at. Here is the shape a sound CRM model comes back in. Yours will differ in the fields and match in the structure.
| Record | Key fields | Relates to | Filled by |
|---|---|---|---|
| Company | name, status, industry, owner, source, address | Has many contacts and opportunities | Mostly imported from accounting |
| Contact | name, email, phone, job title, company | Belongs to one company | Typed by a rep, two fields required |
| Opportunity | name, company, value, stage, expected close, owner | Belongs to one company, has many activities | Typed by a rep |
| Activity | type, date, note, who did it, what it relates to | Attaches to a company, contact, or opportunity | Typed, or logged automatically later |
| User | name, email, role, manager | Owns companies and opportunities | Imported from your directory |
Three things make that model good, and they are the same three in every domain:
- Each record is one real-world thing. A company is a company. Nothing is a grab bag of loosely related fields.
- Every relationship has a direction and a count. One company has many contacts. A contact belongs to exactly one company. Ambiguity here becomes duplicate records later.
- The "filled by" column is honest. Every field somebody has to type is a field somebody will skip. Knowing which is which up front is how you keep required fields to a number a rep will tolerate.
Reviewing the model you get back
Run down these six questions before approving stage 1. Each one catches a rebuild.
Can you describe every record type in your own words? If one needs the box to explain it, it is probably an idea about the data rather than a thing your business has.
Is any required field one your people will refuse to fill in? Move it to optional now. A required field people work around teaches everyone to enter junk.
Does every field have exactly one source of truth? The same fact stored in two places drifts apart within a month.
What happens at the awkward edges? A customer acquires another customer. A contact changes company. A job splits into two. Ask specifically, because these are what break a model six months in.
What can this model represent that your spreadsheet cannot, and what can it not? The second half of that question is the useful one.
Where does this app end? Say out loud what it deliberately will not do, so scope stays a decision rather than a drift.
Before I approve this model, stress-test it against how our business actually behaves. Walk me through what happens in each of these, and tell me whether the model handles it or needs changing: - <a customer acquires another customer we also sell to> - <a contact leaves and joins a different company we work with> - <a record needs to belong to two parents at once> - <a record is created by mistake and has already been referenced elsewhere> - <two people edit the same record at the same time> For each field you marked required, tell me what happens when someone does not know the answer at the moment they are creating the record. Then tell me the three ways this model is most likely to be wrong, and what you would need from me to be sure.
The four builds
Each one is four prompts. Run them in order, look at the result between each.
Build 1: A CRM your team will use
Replaces: the shared spreadsheet, the CRM nobody updates because it asks for thirty fields.
Good when: your sales process is specific enough that generic CRMs fight you.
Stage 1: Agree the data model
We are going to build a CRM for our team. Before any code, propose the data model and let me correct it. About us: we sell <what you sell> to <who buys it>. A typical deal takes <length> and involves <number> people on the customer side. Our sales stages today are <list your stages>. Propose: - the record types we need and how they relate (companies, contacts, opportunities, activities, and anything else you think we need) - the fields on each, marked required or optional, keeping required fields to the minimum a rep will actually fill in - which fields we can populate automatically from data already connected to this box, so nobody types what we already know - the stage list and what has to be true to move a deal forward Then ask me the five questions whose answers would most change this design. No code yet. Show me the model as a plain table I can read.
Stage 2: Build the core screens
Build the core screens for the model we agreed. - A pipeline board: deals as cards in stage columns, drag between stages - A company page: details, contacts, open and won deals, activity history - A contact page: details, the company they belong to, their activity - A quick-add that creates a company, a contact, and a deal in one form - A search box that finds anything by company or contact name Design for a phone first. A rep updates this in a parking lot, one-handed. Keep every form to the required fields, with everything else behind a "more details" toggle. Store data in this app's own database. Read from our connected systems and change nothing in them. Seed it with realistic sample data so I can click through it, and clearly label that data as sample. Then give me the link to open it.
Stage 3: Connect the live data
Replace the sample data with our real records. Pull companies and contacts from <your source: accounting system, existing CRM export, ERP customer table>. Match on <company name / customer number> and tell me how many matched, how many were ambiguous, and how many were new. For each company, pull in from our connected financial data: - lifetime revenue - revenue in the last twelve months - date of last order - current open receivable balance Show those on the company page as read-only facts, with a note saying which system each came from and when it last refreshed. Before you import anything, show me twenty sample rows of what you are about to load and the duplicates you found, so I can approve it.
Stage 4: Roles, history, and polish
Add access control and history. - Everyone signs in - Reps see and edit their own accounts and deals - Managers see and edit their team's - Executives see everything, read-only by default - Nothing is ever hard deleted. Mark records inactive and keep them - Record who changed what and when, and show that history on each record Then add the two things that make people keep using it: - a "my week" view showing my deals that need attention: no activity in fourteen days, close date in the past, or stuck in one stage over thirty days - a weekly summary of pipeline movement I can read on a Monday Tell me how to add a user and assign them a role.
What the box will ask you
- How to match an imported company against one that already exists, and what to do with near-duplicates.
- Whether a person who works at two companies is one contact or two.
- What happens to a deal's history when it is reassigned to a different rep.
- Whether a lost deal stays visible on the company page or disappears.
The mistake to avoid
Importing every field from the old system because it is there. Bring across what someone looks at, leave the rest, and add a field back when somebody misses it. A CRM with twelve fields per record gets used. The same CRM with sixty fields becomes the thing people avoid.
Where to take it next
- "Log emails against the contact automatically." (Needs a mail integration. See API integrations.)
- "Build the pipeline dashboard from Sample 2 on top of this data."
- "Alert the rep when a customer's receivable goes past sixty days."
Build 2: Job scheduler
Replaces: the whiteboard, the shared calendar, the dispatcher's memory.
Good when: you assign work to people or equipment across days and someone in the field needs to see it.
Stage 1: Agree the data model
We are going to build a job scheduler. Before any code, propose the model. About us: we schedule <what: service calls / installs / production runs / deliveries> against <who or what: technicians, crews, machines, trucks>. A job takes <typical duration> and we schedule <how far ahead>. Today this lives in <whiteboard / spreadsheet / shared calendar>. Propose: - the record types (jobs, resources, assignments, customers, and anything else) and how they relate - job statuses and the legal transitions between them - what makes an assignment invalid: double booking, missing skill, outside working hours, insufficient travel time - which of this we can populate from data already connected to this box, for example open work orders Then ask me the five questions that would most change the design. No code yet.
Stage 2: Build the core screens
Build the scheduling screens. - A week view: resources down the side, days across the top, jobs as blocks, drag to reschedule or reassign - A day view for the dispatcher, denser, with travel gaps visible - An unscheduled queue beside the calendar: jobs needing a slot, sorted by promised date, drag onto the board - A job detail page: customer, location, description, status, assigned resource, notes, history - A "my day" mobile view for the person doing the work: today's jobs in order, tap to see details, tap to mark started or complete Warn on conflicts rather than blocking them. The dispatcher knows things the system does not, so show the warning and let them proceed. The mobile view is the one that matters most. Big touch targets, readable in sunlight, works on a bad connection. Seed realistic sample data, label it as sample, and give me the link.
Stage 3: Connect the live data
Connect the real work. Pull open jobs from <your source: ERP work orders, service tickets, order system>. Bring across customer, location, description, promised date, and priority. Refresh <every 15 minutes / hourly> and tell me how you are handling a job that changes in the source after we have scheduled it. Pull the resource list from <your source: HR system, equipment register>, including any skill or certification fields we can use for assignment rules. Before importing, show me twenty sample rows and any records you could not map, so I can approve it.
Stage 4: Roles, history, and polish
Add access control and the operational extras. - Dispatchers can schedule and reassign anything - Field staff see only their own assignments and can update status - Managers see everything, read-only - Record every schedule change with who, when, and what changed Then add: - a daily schedule summary the dispatcher can send out each morning - a simple utilization view: scheduled hours versus available hours per resource per week - a flag for jobs at risk of missing their promised date Tell me how to add a user and assign them a role.
What the box will ask you
- Whether a job can span more than one day, and whether it can be split between two resources.
- What working hours and holidays apply, and whether they differ per resource.
- Whether travel time between jobs should be reserved automatically or left to the dispatcher.
- What happens to an assignment when the source system cancels the underlying job.
The mistake to avoid
Enforcing rules the dispatcher needs to break. Double-booking is sometimes correct because two jobs are next door to each other, and a system that refuses gets abandoned within a week. Warn loudly, then let the human decide, and record that they did.
Where to take it next
- "Suggest the best resource for each unscheduled job based on skill, location, and current load."
- "Text the customer when their job is scheduled and again when the tech is on the way."
- "Build the on-time delivery dashboard from Sample 3 on this data."
Build 3: Monthly financial review
Replaces: the month-end deck someone rebuilds in slides every month.
Good when: the numbers are already available and the work is assembling, explaining, and circulating them.
This one is a hybrid: dashboard numbers with an app wrapped around them, so commentary, sign-off, and history live alongside the figures rather than in an email thread.
Stage 1: Agree the structure
We are going to build a monthly financial review app that replaces the deck we rebuild by hand every month. About us: our fiscal year starts in <month>. We close the books around day <number> of the following month. The review is read by <who> and the recurring arguments are about <what: allocations, timing, which entity>. Propose the structure: - the sections of the review, in the order a reader wants them - which numbers appear in each, and where each comes from in our connected data - where a human needs to add commentary rather than the system explaining it - what "this month is closed and approved" should mean, and who says so Then ask me the five questions that would most change this. No code yet. Show me the outline.
Stage 2: Build the review
Build the review for a selected month. - A month picker at the top. Everything below reflects the chosen month - Executive summary: revenue, gross margin, operating expenses, net, cash, each with change versus prior month, versus same month last year, and versus budget if we have it - Revenue detail by <product line / division / entity>, with variance explanations where the change exceeds <threshold> - Expense detail by category, ranked by variance to budget, largest first - Cash: opening, in, out, closing, plus receivables and payables aging - A commentary box under each section where a human types the explanation, saved with the month Every calculated figure must be traceable: clicking it shows the query and the underlying records. Label anything AI-generated as commentary, clearly separated from calculated figures, so a reviewer always knows which is which. Seed with our real data for the last three closed months and give me the link.
Stage 3: Add the workflow
Add the month-end workflow. Statuses: Draft, In Review, Approved. Only <role> can approve. Once a month is approved: - freeze the figures so the page always shows what was approved, even if the underlying data changes later - keep a note of any subsequent change in the source data, so we can see drift without the approved numbers moving Add a comparison view: put any two approved months side by side. Add an export that produces the same content as a document I can attach to a board pack.
Stage 4: Automate the boring part
Automate the assembly. On day <number> of each month, create next month's review in Draft with all figures populated, and notify <role> that it is ready for commentary. For each variance over <threshold>, pre-draft one sentence of explanation based on the underlying transactions, clearly labeled as a suggestion for a human to confirm or replace. Send a reminder if a Draft review is still unapproved after <number> days. Tell me where the schedule is configured so I can change the dates myself.
What the box will ask you
- What happens when a prior month is re-opened and figures change after approval.
- Whether budget lives anywhere it can read, since it usually sits in a spreadsheet.
- How to treat accruals and reclasses posted after the review was drafted.
- Whether the approved version needs to be immutable for audit, or just clearly versioned.
The mistake to avoid
Letting the approved figures move. The whole value of this app is that the number your board saw in March is still the number the page shows in September. Freeze on approval and record drift separately, and the app earns trust the deck never had.
Where to take it next
- "Add a rolling twelve-month forecast built from the last three approved months plus the open pipeline."
- "Add a covenant page tracking the ratios our lender cares about, with a warning band before we breach."
- "Give department heads a filtered view showing only their own budget."
Build 4: Approvals and requests
Replaces: the email chain, the paper form, the "who signed off on this?" conversation.
Good when: anything in your business needs somebody's yes before it happens: purchase orders, expenses, time off, discounts, change orders, new vendors.
This is the most reusable build on the page. One app handles several request types, and the fourth type you add costs almost nothing once the first three exist.
Stage 1: Agree the model and the rules
We are going to build an approvals app. Before any code, propose the model. The request types we want to start with: <for example purchase orders, expense claims, time off>. For each, tell me what you think the form needs. Our approval rules today, as best I can describe them: <for example: anything under $500 the manager approves; $500 to $5,000 also needs the department head; over $5,000 also needs the CFO; anything for a new vendor always needs finance> Propose: - the record types and how they relate: requests, request types, approval steps, approvers, attachments - how the approval chain is described, so we can change a threshold later without rebuilding - what happens when an approver is away, or when a request sits unanswered - what statuses a request moves through, and who can move it - which fields we can fill automatically from data already connected to this box, for example budget remaining or vendor status Then ask me the five questions that would most change this design. No code yet. Show me the model and the rule structure as tables I can read.
Stage 2: Build the core screens
Build the core screens. - Submit a request: pick a type, fill a short form, attach files, see who will need to approve it before you send - My requests: everything I have submitted, current status, where it is sitting and with whom, how long it has been there - My approvals: the queue of things waiting on me, oldest first, with approve and decline on the same screen and a required reason on decline - Request detail: the form, the attachments, the full approval trail with timestamps and comments - An admin view listing every open request across the company Design the approval queue for a phone. Approvers do this between meetings, and the whole interaction should be readable and answerable in one screen. Show the requester exactly who is holding the request right now. That single piece of information removes most of the chasing. Seed realistic sample data, label it as sample, and give me the link.
Stage 3: Connect the live data
Connect the real context, so approvers can decide without leaving the screen. Pull the people and reporting lines from <your source: HR system, directory> so the approval chain follows the real org chart rather than a list we maintain by hand. For purchase requests, show on the request itself: - budget remaining for that <department / cost center> this period - what we have spent with that vendor in the last twelve months - whether the vendor is already approved and set up for payment For expense claims, flag anything outside policy: over a limit, missing a receipt, or a duplicate of another claim. Before you connect anything, show me where each figure comes from and how fresh it is, so I can confirm an approver would be right to rely on it.
Stage 4: Rules, delegation, and the audit trail
Add the rules that make this survive real use. - Delegation: an approver can nominate a delegate for a date range, and the trail records that a delegate acted and on whose behalf - Escalation: if a request sits unanswered for <2 working days>, remind the approver; after <4>, notify their manager - Recall: a requester can withdraw a request that has not been fully approved - Resubmit: a declined request can be edited and resubmitted, keeping the original and the reason it was declined - Nobody can approve their own request, at any threshold Make the audit trail complete and permanent: who did what, when, from where, and what the request looked like at that moment. Approved requests are never edited afterwards. Then give me an admin screen where I can change thresholds and approval chains myself, without needing another build.
What the box will ask you
- What happens when the amount changes after partial approval: restart the chain, or continue.
- Whether approvals are sequential or can happen in parallel.
- Who approves a request from someone with no manager set.
- Whether a declined request should notify anyone beyond the requester.
The mistake to avoid
Hard-coding the thresholds. Every business changes its approval limits, and if changing $5,000 to $10,000 needs a rebuild, the app becomes stale within a year. Insist the rules live in a screen you can edit, and stage 4 above asks for exactly that.
Where to take it next
- "Push approved purchase orders into
as draft POs so nobody rekeys them." - "Show me a dashboard of approval cycle time by type and by approver."
- "Add a fourth request type:
."
More ideas, by industry
Each of these follows the same four stages. Use the seed sentence as the opening line of a stage 1 prompt and add the detail from the CRM example above.
| Industry | Build | Replaces |
|---|---|---|
| Manufacturing | Downtime and scrap log: operators record a stoppage in three taps, with reason codes | A clipboard and a monthly guess at causes |
| Construction | Daily site report: crew, weather, progress, photos, and a change-order log | Texts, photos in a phone, and a memory of what was agreed |
| Distribution | Receiving and putaway: what arrived, what was short, where it went | Paper packing slips and a search of the warehouse |
| Healthcare | Referral tracking: where each referral is, who is waiting, what is stalled | A spreadsheet and a phone call to check |
| CPA and accounting | Client deliverable tracker: what is due, what is waiting on the client, what is at risk | A partner's spreadsheet and a busy-season scramble |
| Legal | Matter budget tracker: budget against actual by matter, with an early warning | A month-end surprise and an awkward client conversation |
| Auto dealerships | Reconditioning tracker: where each vehicle is in recon and how many days it has been there | A whiteboard and a walk around the lot |
| Property management | Turn and work-order tracker: unit status, vendor assignment, days vacant | Email threads per property |
| Restaurant groups | Shift checklist and waste log: opening and closing tasks, waste by item | Laminated sheets nobody keeps |
The pattern behind all of these is the same. Something important is currently recorded somewhere that cannot be counted: a whiteboard, a clipboard, a text message. Turning it into records you can query is usually worth more than the app itself, because the dashboard you build on top of it a month later is the part that changes decisions.
Testing before anyone else sees it
Three passes, each a single prompt. Run them after stage 4 and before the pre-launch review, and they catch different classes of problem.
Realistic test data
Sample data that is too tidy hides every problem. Ask for data that looks like your actual records.
Fill this app with test data that looks like our real data rather than tidy examples. Include the awkward cases on purpose: - names with apostrophes, accents, and ampersands - very long names that will test the layout - records with optional fields empty - two records that are near-duplicates of each other - dates at period boundaries: the last day of a month, a leap day, a weekend - amounts that are zero, negative, and very large - a record in every status, including the rare ones - at least one record for every user role Label all of it clearly as test data and tell me how to remove it in one step later. Then screenshot or describe anything that looks broken with this data in it.
Edge cases and failure paths
Walk through what happens in each of these and tell me whether the app behaves sensibly. Fix nothing yet, just report. - Someone submits a form with every optional field blank - Someone submits the same thing twice by double-clicking - Two people edit the same record at the same moment - Someone opens a record, leaves for an hour, then saves - A required source system is unavailable when a page loads - Someone reaches a record they should not have access to by typing its URL - Someone uploads a file that is too large, or the wrong type - The list view has 50,000 records in it - Someone uses the browser back button in the middle of a multi-step form For each, tell me what happens now, what should happen, and how bad the gap is.
Permissions, from the other side
The check people skip. Roles look right from an admin account and leak from a normal one.
Test the access rules by acting as each role rather than by reading the code. For every role we defined, list: - every screen that role can reach - every record that role can see, and confirm it cannot see the others - everything that role can create, edit, and delete - what happens when that role types the URL of a record it should not see Pay particular attention to: - list and search results, which often leak records the detail page blocks - exports and downloads, which often ignore the filters applied on screen - any report or summary that aggregates across records Give me a table of role against permission, and flag every place where the behavior differs from what we agreed in stage 4.
Before you let people in
Every app above ends with real people using it. Ten minutes of checking here prevents the kind of first impression that kills adoption.
We are about to give this app to real users. Review it and report back before I invite anyone. Check and tell me: 1. Who can currently reach this app, and what an unauthenticated visitor sees 2. Every screen that writes data, and what stops a user writing something they should not 3. What happens when a required source is unavailable: a clear message, or a broken page 4. Whether any screen exposes data a given role should not see 5. What is hard deleted anywhere, and whether it can be recovered 6. How it looks and behaves on a phone 7. Anything you built with sample or placeholder data still in it For each problem, tell me the severity and the fix. Fix nothing yet.
Confirm with your coach Before an app goes to real users: the URL it will live at, how users sign in on your deployment, whether it needs to move from dev to production first, and whether it deserves its own instance in the Builder rather than sharing with your dashboards.
The first two weeks
Adoption is decided in the first few days. An app people bounce off once is hard to reintroduce, so spend the effort here rather than on another round of features.
Give it to three people, not thirty
Pick the three who will tell you the truth. Include the person most likely to dislike it, because their objection is the one everyone else will have quietly.
Watch one of them use it without helping
Half an hour, saying nothing. Every place they hesitate is a place the app is unclear. This is the single highest-value thirty minutes in the whole build.
Fix what they tripped over, same day
Turnaround is the message. Fixing something within hours of it being mentioned is what makes people bother mentioning the next thing.
Here is what I watched three people struggle with: <list what you saw, in their words where you can> For each one, tell me whether the fix is wording, layout, a default value, or a change in how the app works. Start with the ones that are wording, layout, or defaults, since those are quick and account for most of it. Make those changes now and show me. Leave anything structural until we have talked about it.
Write the one-page guide
Not a manual. One page: what it is for, the three things you do most, and who to ask. Ask the box to draft it from the app itself.
Write a one-page guide for the people who will use this app. Structure: - what this app is for, in two sentences - the three things people will do most often, each as numbered steps with the exact button names - the two questions people are most likely to have, answered - who to contact when something looks wrong Write it for someone who has never seen the app and does not care how it works. No jargon, no screenshots needed, fits on one page. Then add a short "what's new" section I can update as we change things.
Open it up, and leave a way to complain
A link in the app that collects feedback beats a request to email you. People report the small things when reporting is one click, and the small things are what decide whether they keep using it.
Retire the thing it replaces, on a date. An app running alongside the old spreadsheet loses to the spreadsheet, because the spreadsheet is familiar. Pick a date, say it out loud, and make the old thing read-only when it arrives.
Living with it after that
The build is the short part. An app people rely on needs an owner, a way to change safely, and a copy of its data somewhere else.
Changing an app people are using
The rules change once real records exist. A field you rename has values in it, and a workflow you alter has requests part-way through it.
I want to change this app: <describe the change>. People are using it and there is real data in it, so plan before you build. Tell me: 1. What existing records this affects, and how many 2. Whether any data has to be converted, and what happens to records that cannot be converted cleanly 3. What happens to work that is part-way through the current workflow 4. Whether anyone sees anything different, and whether they need warning 5. How we undo this if it goes wrong 6. Whether the app is unavailable at any point, and for how long Show me the plan. Change nothing until I say so.
Keeping a copy of the data
The records people create in these apps often exist nowhere else, which makes them different from your dashboards. A dashboard can be rebuilt from your source systems. Six months of approval history cannot.
Set up a regular export of everything created in this app. - <Weekly>, export every record and its history to <a location we agree> - Use an open format anyone can read without this app: CSV or JSON - Include the history and audit trail, not only the current state - Keep <12> copies before overwriting the oldest - Tell me if an export fails Then show me one export now, and walk me through what I would do to read it if this app were unavailable.
Confirm with your coach What is already backed up on your deployment and how often, whether an app you build is automatically included, and how a restore actually works. Test the restore once rather than assuming it.
Give it an owner
One named person who decides what changes, fields questions, and notices when something drifts. Without that, an app slowly becomes nobody's, and nobody's apps stop being trusted.
| Rhythm | Worth doing |
|---|---|
| Weekly, first month | Ask two users what annoyed them. Fix the small things. |
| Monthly | Check the app is being used the way you expected. Unused screens are worth removing. |
| Quarterly | Confirm the exports are running and readable. Review who has access and remove anyone who left. |
| When the process changes | Change the app in the same week. An app that lags the process teaches people to work around it. |
Troubleshooting
| Symptom | Likely cause | What to say |
|---|---|---|
| Nobody is using it | It is slower than the thing it replaced, or people were never shown it properly. | "Show me who has signed in and what they did. Then tell me how many clicks the most common task takes." |
| Duplicate records appearing | No uniqueness rule, or a form that resubmits on double-click. | "Find the duplicates, tell me how they were created, and add a rule that prevents it without blocking legitimate cases." |
| A list page is slow | It loads every record before filtering, or a lookup runs once per row. | "This page is slow with real data. Tell me why, and fix it with paging and a proper index." |
| App data disagrees with the source system | The sync stopped, or someone edited a record here that also exists there. | "Compare this app's copy against the source and show me every record that differs and when it last synced." |
| Somebody deleted something they needed | Hard delete slipped in somewhere. | "Can this record be recovered? Then show me everywhere in this app that hard deletes, and change it to mark inactive." |
| A user cannot see what they should | Role assignment, or a permission rule stricter than intended. | "Show me exactly what role |
| It worked yesterday and errors today | A source system changed a field, or a scheduled job failed silently. | "What changed since yesterday: in the app, in the data, or in a connected source?" |
| People are entering junk into a required field | The field is required at a moment when nobody knows the answer. | "Make |
An app real people depend on is worth a call before you change it. We can look at what is running, what it holds, and what a change would touch. 608-783-8324.
Talk to a human instead.
Every RapidDashboard client gets direct access to the team that built the box. Most questions take under ten minutes on a call.