Skip to content
Vidabug
Sign inStart a project
CASE STUDY · CLIENT NAME REMOVED

A training lesson of a web app

When two lists or two pages describe the same thing, they drift apart and users see the wrong data

These defects share a pattern: a screen built its own copy of a fact that already lived elsewhere, or a save path dropped a field the display path needed. The fixes converge the copies and carry the data through, so the lesson is to treat shared facts as single sources of truth and to check that every read path gets what was saved.

What went wrong, and how to avoid it

  1. Files uploaded with a client selected were stored as firm documents in the firm root, so the client's view stayed empty. Why: The upload used the currently open folder (none) as its target and ignored the selected client, and the client list was never re-read after the upload.Avoid it: Derive the upload destination from the current context explicitly (selected client or open folder) and show that destination before and after the upload. Re-read the listing after any write so the user sees the result that was actually stored.
  2. A form's service-line dropdown was built from a taxonomy list instead of the catalogue the pipeline filters and forecasts by, so two real offerings were missing Why: The modal imported a constant that duplicated a list owned by another part of the system, and the two diverged.Avoid it: Pick options from the same catalogue that downstream filters, reports and forecasts read, and delete the duplicate list. If a second list must exist, add a test that asserts it contains every catalogue entry.
  3. A proposal seeded a monthly retainer service as a fixed milestone, so the saved fee line lost its monthly recurrence. Why: The modal hard-coded a default billing model instead of reading the service's pricing model from the catalogue.Avoid it: Default any derived field from the record it belongs to, never from a literal. Add a test per pricing model that seeds a proposal and asserts the recurrence survives the save.
  4. The exported proposal PDF printed a placeholder where the saved engagement partner should appear. Why: The export handler did not pass the saved lead partner to the generator, which silently substituted a placeholder.Avoid it: Make generators fail loudly or visibly flag missing inputs rather than printing placeholders, and have every caller pass the same scope the console and client views use. Cover exports with a test that asserts real values, not placeholders, reach the output.

Read the full report on the home page →