Scoping the MVP and the choices that are hard to undo
Scope the MVP around a paying customer
An MVP is the smallest product someone will pay for, which is a higher bar than a demo and a much lower one than your full vision. We ask you to name one customer type and the single outcome they would pay for, then cut everything that does not serve it. What must still be in: signup, the core workflow, billing or at least a manual way to charge, and basic admin. What can almost always wait: integrations beyond the first, role hierarchies, reporting suites, a mobile app. Sometimes a no-code tool or a version run by hand can test the idea for far less, and we will say so when that applies.
Tenancy is the decision you cannot easily reverse
Every table either belongs to a tenant or is global. The common model is one database with a tenant ID on each row, enforced by a global scope so a developer cannot forget the filter. It is cheap to run and easy to migrate. A database per tenant gives stronger isolation and per-customer backups, at the price of harder migrations and more operations work. Regulated or enterprise buyers sometimes require it. We choose with you based on who you will sell to, and write tests that try to read across tenants on every release.
Design billing with the product
Pricing changes more often than founders expect, so plans should be data, not code. The application checks entitlements (features, seats, limits) and the billing provider owns payment, tax and invoices. Webhooks keep the two in step, including the awkward cases: failed renewal, downgrade below current usage, refund, canceled trial. A merchant-of-record provider can take sales tax handling off your plate in exchange for higher fees and less control. That is a business decision we lay out for you, not one we make.
Scaling arrives in stages
You do not need microservices for your first thousand customers. A well-structured Laravel monolith with queues, caching and a managed database carries most products a long way. We plan the stages instead: background jobs first, then read replicas or a search service, then splitting out the one component that is actually under strain. Monitoring goes in at launch so those decisions rest on measurements.
Where mobile fits
If the product is used at a desk, a responsive web app is enough for launch. When users work in the field or need notifications, we add a Flutter app on the same Laravel API, and check app store rules on in-app subscriptions before the paywall is designed.