Appearance
Code Owners β
IxDF Developers have different areas of expertise in different modules. Due to this reason, we have introduced the concept of "Code Owners": Every important module SHOULD have 2+ owners.
Modules β
Types β
There are two main types of modules:
- Product Modules - modules more or less visible by our end-users that add value to the product (in terms of DDD: "Core Domain" + "Supporting Subdomain").
- Supplying Modules - modules hidden from end-user application parts (like logging, caching, geo, currency converters, etc.) (in terms of DDD: "Generic Subdomain")
*Order of modules is important.
Documentation quality β
π Documentation quality is rated at one of three levels:
- Needs Heavy Updating
- Mediocre
- IxDF Gold Standard
The long-term goal is to bring all module documentation to IxDF Gold Standard.
Product Modules β
Dev note: when update this list, please also update CODEOWNERS file.
- Course (variability: high) (π: mediocre). π Core module. (π§ complex)
- Payment (variability: high) (π: mediocre). π Core module. (π§ complex)
- Member (variability: mid) (π: mediocre). π Core module.
- Team (variability: mid) (π: IxDF Gold Standard)
- Membership (variability: mid) (π: mediocre)
- Notification (variability: mid) (π: mediocre) (π§ complex)
- ReferralProgram (incl. EP and RaF) (variability: mid) (π: mediocre)
- Masterclass (variability: mid) (π: IxDF Gold Standard)
- Discussion (variability: mid) (π: mediocre)
- Publication (variability: low) (π: mediocre)
- Staff (incl.
JobPosting) (variability: low) (π: mediocre) - Statistics (variability: mid) (π: mediocre)
- Subscription (incl.
Newsletter,ContactList,Subscriber) (variability: mid) (π: mediocre) - Local Group (incl.
LocalGroupandMeetup) (variability: low) (π: mediocre) - Mass-mailing (variability: low) (π: mediocre)
- Search (π: mediocre)
- FAQ (variability: low) (π: mediocre)
- Downloadable Template and Template Bundle (variability: low) (π: mediocre)
- Design League (variability: low) (π: mediocre)
- Lead (variability: low) (π: mediocre)
- Product (a small module contains
Testimonialand some interfaces) (variability: low) (π: mediocre) - Promotion (incl.
OnsiteAd,OnsiteAdStats) (variability: low) (π: mediocre) - People and Culture
- Mentor (deactivated)
- Bootcamp (deactivated)
Supplying Modules β
- Activity logging (variability: low) (π: mediocre)
- Analytics (incl. Google Analytics, A/B testing) (variability: high) (π: mediocre)
- Announcement (variability: low) (π: mediocre)
- Audience Definition (variability: low) (π: mediocre)
- Cache (variability: low) (π: mediocre)
- Campaign (variability: low) (π: mediocre)
- Video (variability: mid) (π: mediocre)
- ?
- ?
- Media - Cloud/CDN/AWS (variability: mid) (π: mediocre)
- Error handling (variability: low) (π: mediocre)
- Geo (variability: low) (π: mediocre)
- Permission (variability: low) (π: mediocre)
- Money (variability: low) (π: mediocre)
- Shopping Cart (variability: low) (π: mediocre)
- Tag (variability: low) (π: mediocre)
- TopicDefinition (π: mediocre)
- Auth (incl. SSO/SAML) (variability: low) (π: mediocre)
- Common (variability: low) (π: mediocre)
- Config (variability: low) (π: mediocre)
- Cron and Console Commands GUI (variability: low) (π: mediocre)
- GitHub integration (variability: low) (π: mediocre)
- Infrastructure (variability: low) (π: mediocre)
- SEO (incl.
UrlRewrite,SeoMeta) (variability: low) (π: mediocre) - Sitemap (variability: low) (π: mediocre)
- SocialMedia (automated posting) (variability: low) (π: mediocre)
- ?
- UI Kit (variability: low) (π: mediocre)
How to use it β
This concept helps:
- for non-developers: to assign the right developers to related bug reports and feature requests.
- for developers: to feel accountable for the code.
- for developers: to assign other developers to PRs as reviewers.
But the main point is OWNERSHIP. We expect that module owners will take care of all issues for modules assigned to them (where they are the first person on the list), know module problems, build short-term and long-term plans for them and be in charge of all decisions (and a lack of decisions also) we make for those modules.
Code Ownership types β
There are various schemes for Code Ownership. Martin Fowler put them into three broad categories:
- Strong code ownership breaks a code base up into modules (classes, functions, files) and assigns each module to one developer. Developers are only allowed to make changes to modules they own. If they need a change made to someone elseβs module, they need to talk to the module owner and get them to make the change. You can accelerate this process by writing a patch for the other module and sending that to the module owner.
- Weak code ownership is similar in that modules are assigned to owners but different in that developers are allowed to change modules owned by other people. Module owners are expected to take responsibility for the modules they own and keep an eye on changes made by other people. If you want to make a substantial change to someone elseβs module, itβs polite to talk it over with the module owner first.
- Collective code ownership abandons any notion of individual ownership of modules. The code base is owned by the entire team and anyone may make changes anywhere. You can consider this as no code ownership, but its advocates prefer the emphasis on the notion of ownership by a team as opposed to an individual. (The term collective code ownership comes from Extreme Programming, although in the second edition, the practice is called Shared Code.)
At this moment, we follow Weak code ownership scheme, but we like Collective code ownership, and weβre doing our best to migrate to this scheme.