Development
Make Frappe ERP fit the way your team works

At a glance
Frappe ERP gives your team tools to capture missing information and put approval decisions into the workflow. Its APIs provide a foundation for exchanging records with other applications. Start with the job that needs improving, configure what the platform already supports and give any custom code a clear maintenance plan.
Start with a useful change
A customer calls about an online order. Your support team opens the ERP, but the store reference is missing, so the search moves back to email. Frappe's custom fields and APIs give you building blocks for keeping that reference with the business record. Start with the information someone needs to do a job, then decide whether configuration or an integration should supply it.
Write the requirement as a business event and expected result. For example: an order from the online store must retain its external reference, and replaying that order must not create a second sale. That is testable. A request to connect the store is not yet a specification.
ERPNova assesses those requirements against Frappe ERP's existing configuration tools before proposing code. The estimate should show what you can configure now and what someone must build, test and maintain.
Put useful details on screen
Frappe Customize Form lets you add fields and change standard field properties. Use it to put the reference or decision-making detail beside the transaction your team already works on. Name who owns the field and define its expected values, so the addition replaces a separate lookup rather than creating another unclear box to fill.
Approval behavior has a separate tool. Frappe workflows define states and transitions, with conditions controlling which actions are available. Test the whole lifecycle, including rejection and cancellation. The documentation warns that a workflow overrides the regular Save and Submit flow.
Configuration still deserves review. A newly required field may affect imports or integrations that never open the form. Your test should include those entry points. Do not assume a rule works everywhere simply because it works when a consultant clicks through the browser.
Build where it adds value
Reserve custom development for behavior that earns its maintenance cost. A new business rule or domain model may justify an application with a clear boundary. Ask the developer to show which part standard Frappe behavior handles and which part the custom app owns, using the same sample transaction your users will test.
Keep custom code in version control and agree what your team receives at handover. Test the business rules that could change an invoice or stop a shipment. A screenshot of the finished form tells you nothing about whether its calculation is correct.
Include deployment and upgrade testing in the estimate. The requirement does not disappear after the first release, and someone needs authority to decide how it changes when the underlying platform changes. Our cost-driver guide explains why maintenance should be priced alongside development.
Connect the right records
Frappe Framework generates REST APIs for DocTypes, its definitions of business records. These APIs give your developer a documented route for exchanging an order or customer update. Define which application owns each value before connecting them; access to both records does not decide which delivery address is authoritative.
For each exchanged record, identify its source of truth and stable external identifier. Decide which fields can be updated after the first transfer. If the store owns the delivery address until shipment, say so. If finance owns the customer's billing identity, make that boundary equally explicit.
Frappe's REST documentation states that token requests are associated with a user and checked against that user's roles. Use a dedicated integration identity with the permissions it needs. Keep credentials outside source code and establish who can rotate or revoke them.
Also test pagination. The documented default list response returns a limited set of records rather than an unlimited export. A connector that reads only its first page can appear healthy while silently missing later records.
Keep retries safe
Design the connector so an interrupted transfer can be recovered without creating a second order. The receiving service may accept a request even when the sender loses its response. Use a duplicate check and define idempotency: repeating the same operation should have the intended single business effect. This is connector work to specify and test, not an automatic promise of API access.
Separate technical failure from business rejection. A temporary network failure may justify a retry; an unknown item code needs a correction or mapping decision. Give support staff a way to identify the failed record without exposing credentials or unnecessary personal data.
Record where reconciliation happens. For orders, compare accepted source references with target records. For shipments, check that the expected status reached the other system. Monitoring that only reports a successful HTTP response cannot establish that every required business event arrived.
Retry example (hypothetical, not an ERPNova result): the store sends 500 distinct orders and retries 15 after losing the responses. Your connector receives 515 messages but should create only 500 orders. If all 15 retries create duplicates at USD 80 per order, order value is overstated by USD 1,200 before cancellations. Check unique external references as well as message counts; a successful response for every message would not expose the duplicate sales.
- Replay the same message and prove that it does not duplicate the business transaction.
- Reject an invalid item and show who sees the error.
- Restore a connection after an outage; confirm the backlog can be processed safely.
- Test with the restricted integration account, not an administrator token.
Give support a working runbook
Make the integration useful to the people who support it. Ask a support operator to recover a rejected record using the runbook and the access they will have after handover. Name a contact for each application, with an agreed owner when a fault crosses systems. Keep credentials and recovery steps out of a single developer's private notes.
Bring your external systems and one failure scenario to an ERP audit. ERPNova can assess the Frappe configuration, data contract and custom development boundary. Use the implementation roadmap to schedule integration acceptance before final cutover.


