Principles

Features shall serve a single purpose

Favour creating as many of them as you wish rather than complicating a single one.

Jobs shall perform a single task

No job should do two things at a time, it will only get confusing the more you do it.

Domains shouldn’t cross

When working within a domain, strive to preserve the boundaries by not using functionality from other domains. If you encounter a case where you should, consider Foundation, Operations and Features by rethinking your design.

Features shall not call other features

Run as many jobs and operations as you like, but never a feature.

Jobs shall not call other jobs

This is your business logic, keep it concise by avoiding nesting hell.

Operations shall not call other operations

Run as many jobs as you like, but never any other unit.

Controllers serve Features

Consistency is key for a successful architecture, and so are thin controllers to a successful MVC application.

Write code that humans can read

Machines will run it nonetheless, it is us who will suffer.