Development and Deployment Best Practices

The purpose of this page is to collect development and deployment best practices in a single place.

Ticket Management:

All non-trivial productions system changes should be documented and executed using a ticketing system. You can use any ticket system you wish. Here are some popular choices:

Budget/Quote Management

Quote management is import for many reasons.

Below are guidelines for managing and executing quotes:

Monthly Consumption of Time

It is assumed that development teams will send either bi-weekly or monthly (preferred) invoices. In the early stages of a project, the development team may even send weekly invoices until trust and best practices are demonstrated by all parties.

Weekly or bi-weekly time sheet consumption updates should discussed.

Table and Column Creation and Modification

Code Repository

All code will be maintained in a source code repository. Github is the default source code control repository. Time and care will be given for:

Most plugin code can be written in a single 'default' branch. There are times when a long-running and disruptive change is under development. If you have such a ticket/change, please create this change in a different branch so that it is not accidentally released to production as part of a different ticket. Branching concepts are an advanced topic. Care should be given when developing non-trivial plugins.

A single repository is used to keep all customer plugins. The root directory of the repo is a collection of directories bearing plugins names. Example:

There are times when a customer uses a plugin from another source (including community, another repo from another customer, etc...). Any time you add a plugin to your deployment, you need to include the plugin director name in your code repository. At a minimum, this directory should contain a readme with details about the plugin (who, what, when where, etc...). This is important when migrating from one major version to another where you re-deploy all plugins. It is uncomfortable to realize you have no idea where a plugin came from, and you cannot find the source.

Deployment Repository

Any changes planned for production should be committed to a deployment repository. Changes include:

The deployment repository includes:

References for Deployment

Release Management

Releases are tickets themselves. Their purpose is to orchestrate the rapid and scripted release of tickets.

iDempiere Resources

Plugin Development

We adopt the concept of single-purpose plugins - a component of SOLID object oriented programming. Doing so helps all members of the development and support team understand development artifacts.

iDempiere Core Changes

You should go to great lengths to prevent changes to the core. If you believe there is a need to change the core, you should discuss the need with the core development team first. If they agree, they will help guide you through the process of finding the best solution for both you and the core. The project has a goal that no one ever needs to modify the core.

Should you find yourself needing to modify the core, there are topics in the ERP Academy to help you support these changes.