Feature serves a Single Purpose
Favor creating as many of them as you wish rather than complicating a single one.
Job executes a Single Responsibility
No job should do two responsibilities at a time, it will only get confusing the more you do it.
Be aware that a Single Responsibility can involve multiple related functions as long as those functions are part of the same cohesive responsibility.
Modules shouldn’t cross
Each module should be self-contained and should not perform tasks that belong to other modules.
Apply Decoupling Techniques
Using Shared Utility and Helper Classes for Decoupling. It also enhances Code Reusability and Maintainability.
Features shall not call other features
Run as many jobs as you like, but never a feature.
Jobs shall not call other jobs
This is your business logic, keep it concise and organize by avoiding nesting and coupling hell.
Write code that humans can read
Machines will run it nonetheless, it is us who will suffer.