All twenty problems
D9What it costs the developer

You test on ten rows. The client has fifty thousand.

Writing a seeder that produces realistic volume is a day’s work nobody budgets, so every list page is judged on hand-typed rows.

What actually goes wrong

Everything in a list page works at ten rows. Sorting is instant, pagination has one page, the N+1 costs ten queries instead of ten thousand, and the missing index costs nothing. You find out at the same moment your client does.

Development email has the same hole: it goes to a provider you cannot open, so the reset link that never arrives is a mystery rather than a line in a terminal.

What Grit does about it

  • Every resource gets a factory and a seeder, so realistic volume is one command rather than a day.
  • Seeding runs in batches with the heap flat, so a hundred thousand rows is a command and not an out-of-memory error.
  • Mail has a log driver and a Mailhog default, so a reset link is never lost in development.

The commands

Realistic volume, before you look at the screen
grit seed Invoice --count 25000
Mail you can actually read
MAIL_MAILER=log grit start

What it does not do

A faker produces plausible rows, not your client’s distribution. A table where ninety percent of rows belong to one customer behaves differently, and that shape is yours to seed.

Read next