In short
- Agree stage definitions with the people doing the work.
- Preserve account, contact and opportunity relationships.
- Verify sensitive actions with server-side permission checks.
- Reconcile migration samples and support the first live workflow.
Build a custom CRM by defining the sales process, record relationships and ownership rules before designing the interface. A useful CRM tells each person what they can see, what they can change and what should happen next. Start with one end-to-end workflow and prove it with the team before adding modules.
Observe the real enquiry-to-sale process
Observe how an enquiry currently moves through the business. Record its sources, handoffs, documents, approval steps and final outcomes. Ask representatives to demonstrate exceptions as well as successful deals.
An internal spreadsheet may contain a necessary rule that never appears in a process diagram. Separate a genuine business requirement from a workaround caused by an old tool, so the custom CRM does not preserve avoidable friction.
Write a sales-process specification people can approve
Turn each important stage into a small operating specification: who starts it, which record changes, what evidence is required and what happens next. Include one permitted and one rejected example for sensitive actions. This gives sales and development teams the same definition of completion.
TNM's custom CRM for Shopify order management is a published example of software organised around connected orders and operational tools. Its particular integrations are an example of scope, not a requirement for every CRM. Your specification should follow your own quotations, approvals and handoffs, including the steps that remain in other systems.
Model contacts, accounts and opportunities
Model people, companies, opportunities, activities and quotations as related records. One person can be involved in more than one opportunity, and several contacts can belong to one company. Decide what identifies a duplicate and who can resolve uncertain matches.
Preserve original source identifiers during migration. Avoid using a mutable display name as the only link between records, because spelling changes should not disconnect the history.
Define what each pipeline stage means
Give each pipeline stage an entry condition, exit condition and required next action. Qualified might require a documented need and agreed next conversation; proposal sent should refer to an actual quotation version.
Choose definitions that match your business rather than copying an arbitrary template. Decide what happens when an opportunity moves backwards or returns after a loss, and retain the reason instead of overwriting the earlier outcome.
Enforce permissions for every role
Create a permission matrix for representatives, managers, operations staff and administrators. Apply record-level authorisation on the server, not only visible buttons. A representative may edit their own opportunities but need approval for a discount or transfer.
Keep audit history for sensitive changes. Test whether a user can access another team's record by changing a URL or request parameter, including through background export jobs.
Integrate and migrate with reconciliation
Specify integrations as owned data contracts. The CRM might own qualification status while the ERP owns invoicing and fulfilment. Define stable identifiers, allowed updates and what happens when an integration is unavailable.
Import a small migration sample and reconcile counts, relationships and important field values before the full move. Maintain a clear list of records requiring review rather than silently discarding data that fails validation.
Release one complete sales workflow
Release the first workflow to a supported group. Test enquiry capture, assignment, a meaningful response, quotation approval and closure before expanding the feature list. Include empty states, invalid inputs, interrupted work and an absent owner.
Measure whether representatives complete the task without keeping a second private system. Assign maintenance, backups, releases and support to named owners, with an export and handover process that another team can follow.
Example: a quotation changes after approval
In an illustrative service business, quotations above an internally defined limit require approval. The CRM stores the quotation version, requester and approver. When the opportunity changes owner, that history stays attached to the quotation.
The new owner can see whether a revised price requires another approval. A useful acceptance test changes the owner and price, then checks that the application neither loses the earlier decision nor treats it as approval for a different quotation.
Build around the next sales action
A useful custom CRM connects stage definitions, record relationships and accountable work. Scope a CRM workflow with TNM using sample records, approval rules and the first journey your team needs to complete.
Frequently asked questions
Observe how an enquiry currently moves through the business. Record its sources, handoffs, documents, approval steps and final outcomes. Ask representatives to demonstrate exceptions as well as successful deals. An internal spreadsheet may contain a necessary rule that never appears in a process diagram.
Model people, companies, opportunities, activities and quotations as related records. One person can be involved in more than one opportunity, and several contacts can belong to one company. Decide what identifies a duplicate and who can resolve uncertain matches. Preserve original source identifiers during migration.
Give each pipeline stage an entry condition, exit condition and required next action. Qualified might require a documented need and agreed next conversation; proposal sent should refer to an actual quotation version. Choose definitions that match your business rather than copying an arbitrary template.
Release the first workflow to a supported group. Test enquiry capture, assignment, a meaningful response, quotation approval and closure before expanding the feature list. Include empty states, invalid inputs, interrupted work and an absent owner. Measure whether representatives complete the task without keeping a second private system.