When the following rules are implemented correctly you'll have maintainable software.
Keep it simple
Keep requirements simple to keep them understandable.
Keep algorithms as simple as possible for your needs to keep complexity low.
Keep every single line of code simple to improve readability.
Keep it consistent
Keep your software consistent by solving one type of problem in the same way everywhere.
Apply generic rules like naming conventions etc.
Abstraction levels
Keep the same abstraction level for an entire API, for all classes in a module, for all methods in a class and throughout each method.
Clear responsibilities
Every item shall have exactly one responsibility. Each module, each class, each method and each variable shall only have one responsibility.
Clear interfaces
By keeping the interfaces simple and clear, the entire software base will be more maintainable.
This applies to modules, classes and methods. Clear interfaces allows no side effects.