In Odoo, the module is everything. Every application is a module; every customization is a module. Understanding module development is therefore the foundation of all Odoo development. This piece is a practical guide to what an Odoo module is and how it is built.
What a module is
An Odoo module is a self-contained package of functionality, a directory of files that Odoo can load. When Odoo runs, it is running a collection of modules. When a business customizes Odoo, the customization is a module added to that collection. The module is the unit in which Odoo functionality is packaged, shipped, installed, and maintained. So Odoo module development is, simply, the act of building one of those packages.
What a module contains
A module is a directory, and inside it are files of a few recognisable kinds. Understanding what each kind is for is most of understanding module development.
The manifest. Every module has a manifest file that describes it: its name, what it depends on, and which of its files Odoo should load. The manifest is how Odoo knows the module exists and what it consists of. A module without a correct manifest is not a module Odoo can use.
Models. The models, written in Python, define the module's data: what records it stores and what business logic operates on them. If a module introduces a new kind of record, or adds behaviour, that lives in the models.
Views. The views, written in XML, define the user interface: the forms, the lists, the menus, how the module's data is presented and interacted with.
Security. A module declares who can access its data. Access rules define which users can read, create, change, and delete the module's records. This is not optional housekeeping; data without declared access is data the module has not properly secured.
Data files and assets. A module may also include data it should load, and static assets such as images, styling, and front-end code.
A module, then, is a manifest plus some combination of models, views, security, data, and assets, organised in a directory.
How the parts fit together
The parts of a module are not independent; they form a stack. The models define the data and logic. The views present that data to users. The security controls who may touch it. The manifest ties it together and tells Odoo what to load. A typical module development task touches several of these: adding a feature usually means a change to the models, a corresponding view so users can use it, and a security rule so the right people can access it. Learning module development is largely learning how these parts relate.
The principle of extending, not replacing
One principle is central to practical module development: a module should usually extend existing Odoo functionality rather than replace it. Odoo provides a mechanism, inheritance, for adding to and adjusting what is already there. A well-built customization module adds its changes as a layer on top of standard Odoo, leaving the standard intact underneath. A poorly built one rewrites or works around the standard. The difference matters enormously for maintenance and for upgrades: a module that extends cleanly is easy to carry to a new Odoo version, while a module that fights the standard is a burden. Good module development is, in large part, the discipline of extending cleanly.
How development proceeds
In practice, Odoo module development is an iterative loop. A developer creates or changes files in the module, has Odoo load the updated module, and checks the result, repeating in small steps. The skill is not in any single file but in keeping the module coherent, the manifest correct, the models sound, the views matching the models, the security complete, as it grows.
The takeaway
An Odoo module is a self-contained package of functionality: a directory containing a manifest and some combination of models, views, security, data, and assets. Module development is building these packages, and its central principle is to extend Odoo's existing functionality cleanly rather than replace it, because clean extension is what stays maintainable and upgradeable. The module is the unit of all Odoo development. For how we approach Odoo, see our ERP practice.