Every line of custom code is something you must maintain on each upgrade. Ask these in order and stop at the first yes.
- Does a standard setting do it? Search Settings and the app’s configuration. Many “missing features” are one checkbox.
- Does an automated action or server action do it? Odoo can update fields and send emails on triggers without a module.
- Does a custom field or view tweak do it? Small additions are cheap.
- Does an existing app on apps.odoo.com do it? Read its version support and reviews, then test on a copy.
- Only then: build a module.
When a module is right
- The logic is business-specific and touches many models
- You need it to survive upgrades in a tracked, tested package
- Several companies or databases will reuse it
Cost shape
Config costs hours once. A module costs build time, plus a slice of every future upgrade. Be sure the benefit repeats.
Write the request as a result
“Show the stock value of a count difference” is clear. “Add a column” is not. A good problem statement often reveals a cheaper path.