In this guide 6 sections
Judge a stalled project on what exists today, not on what was spent. Finish it when the data model is sound, the finished modules work, the framework is still supported and you own the code. Start again when two or more of those fail or the requirements have changed.
Money already spent should not vote
Every owner of a half built application feels the pull of the invoices already paid, and that feeling is real, but it tells you nothing about the code. A costly project can be unusable. A cheap one can be a good base.
Ask a different question. If a competent team received this repository for free tomorrow, would they build on it, or would they bin it and start from a blank folder? Answer that honestly and the decision usually follows.
Get a written review from a stranger. Two days of reading beats two months of hoping.
Check the data model before the screens
Screens can be redrawn in a week. A badly shaped database cannot. Open the schema first. Read the tables, the foreign keys and the migration history. Then ask whether customers, orders and invoices are separate things, or one wide table with columns called field1 and field2.
Then run the finished modules with real sample records. Create an order, edit it, delete it, export it. A module that survives this is worth keeping. One that crashes on a blank date field is a warning.
Note which modules are truly complete. Some only look it. A login screen with no password reset is the usual culprit.
- Tables with sensible names and keys
- Migrations that run on an empty database
- Modules that handle blank and wrong input
- Roles and permissions stored, not hard coded
- A seed script or sample data set
Look at the framework, the tests and who owns the code
Find the framework and runtime versions in the package file or composer file. If they reached end of support years ago, finishing the project means upgrading first, and that cost belongs in your comparison. A current version is a good sign.
Look for automated tests. Even a thin set shows that the developer cared whether changes broke things, and that care is worth more than the tests themselves. No tests at all? Every new feature becomes a gamble.
Ownership comes next. Is the repository in your account, or on the developer’s laptop? Do you hold the domain, the hosting login, the app store account and the third party API keys, or does a former contractor still control them? Missing keys can be replaced. Missing legal rights to the code cannot, so settle that in writing.
Test the original requirements against today’s business
Sit with the people who will use the system and read the original requirement document line by line, marking each one as still true, changed or dropped. If most lines changed, the code answers a question you no longer ask.
Count what the business now needs that the project never planned for: a second warehouse, a new tax rule, a customer portal. Bolting these onto a weak base costs more than designing them in.
Be fair to the old work too. Reusable parts often survive a restart, such as the database design, the label printing code or the integration with your payment gateway.
- Requirement lines still true
- Lines that changed
- Lines that were dropped
- New needs not in the original plan
Put the evidence on one page and decide
Score the five tests in plain words: data model, finished modules, framework age, test coverage and ownership. Add a sixth line for requirements. Two or more failures point to starting again. One failure usually means finish.
Ask the same reviewer for two estimates, one for finishing and one for rebuilding, and compare the time to a first working release, not only the total. A rebuild that salvages the schema and the design assets can be quicker than it sounds.
Take the scorecard to your next meeting. Decide there.
Finish or restart scorecard
A single worksheet with six rows: data model, finished modules, framework and runtime age, test coverage, code and account ownership, and requirement fit. Each row has columns for what the reviewer found, a pass, partial or fail mark, and the cost of repair. A final block lists time to first release for finishing and for rebuilding.
Open a blank worksheet to printQuestions owners ask
Can a stalled project be saved if the developer will not hand over the code?
Not safely. Without the repository you cannot review, change or deploy anything. Ask for the source and hosting access in writing first. If that fails, a rebuild from the running app’s behaviour is the fallback.
How long does a review of a half built application take?
A focused review of the schema, the repository history, the dependency files and a few modules usually takes a few days. Larger systems with several services take longer. Ask for the findings as a written report.
Is it worth keeping the old design and database in a rebuild?
Often, yes. A sound schema, approved screen designs, logos and written requirements all carry over. Only the code that fails your tests needs to go.
