Build only where the workflow needs it
Custom software makes sense when a core process has rules that existing tools cannot support cleanly. That does not mean replacing every tool. A CRM may already manage contacts well, while a separate approval or scheduling step needs a focused module. We first identify the friction: repeated entry, unclear responsibility, inconsistent records or a task that depends on one person remembering it. The development scope should connect to that problem.
For example, a quote-to-order workflow might involve a sales owner, an approval step, an operations team and customer updates. The useful first release could make ownership and status explicit rather than implement a full enterprise system. Describe how the work happens today, including the exceptions. A sample record and the steps it passes through often reveal more than a list of desired dashboard widgets.
Map permissions, state changes and data
Start with roles and actions. Who can create a record, approve it, change its state or view a report? A hidden interface button is not sufficient access control; the server must enforce the agreed boundaries. Define required fields and the conditions for each transition. The resulting model connects the interface to the business rules, so the system can explain why an action is or is not available.
Reports need clear definitions too. Which date is used? Does a cancelled order count? What is the source of a customer record? Without shared definitions, two dashboards can appear to contradict each other. We can document the data model and key terms as part of discovery. For multi-country operations, time zones, currencies and local field formats should be modelled deliberately rather than added as labels to a single-country workflow.
Integrations and migration are product work
Connecting systems requires more than moving fields between endpoints. Decide which system is authoritative, how changes propagate and what should happen after a failed update. Duplicate prevention, retry behaviour and visibility of errors are part of the integration contract. Existing APIs, account permissions and supplier involvement affect feasibility. We inspect these dependencies before including a connection in an estimate.
Migration starts with sample data. Review field mapping, incomplete values and duplicate records, then plan a trial import and reconciliation. The business needs to approve what is carried forward and what is cleaned up. A rollout may also need a period when the old system remains available. Backups, migration timing and the person responsible for validating the result should be clear before a live change is scheduled.
A staged rollout with explicit handover
Choose a coherent first module and define how users will accept it. Testing with representative records helps expose rules that were missed during discussion. A small group can review the workflow before wider adoption, if that fits the operation. Technology choices such as NestJS and PostgreSQL follow the data and maintenance requirements. The plan should also cover how new modules will interact with the initial release.
For handover, agree repository access, documentation, infrastructure accounts and support responsibilities. Ownership and third-party licences need explicit terms in the project agreement. Ongoing maintenance and feature development are separate commitments from the first build. Share the current workflow, systems and the step consuming the most effort. We can then evaluate a bounded development project rather than an undefined promise to automate the whole business.
