The goal is have to arrive at a comprehensive yet generic list of good software design practices.
- Modules that encapsulate high level policy should not depend upon
modules that implement details. Rather, both kinds of modules should depend upon
abstractions. See The Dependency Inversion Principle by Uncle Bob
- Avoid "fat" interfaces - ones that are "non-cohesive". In other words, every interface is targeted to only a single client, not a group of clients. See The Interface Segregation Principle by Uncle Bob.
- Remember the Law Of Demeter (also known as the Principle of Least Knowledge) - never call methods on objects you got from another method call nor call them on a global objects. Save yourself a lot of pain.
- Schedule some time to design the exceptions in your system. Make concious decisions and make sure you think first about the clients who are the primary consumers. Exception design is the most ignored part of OOAD, partly because it does not correlate directly to any feature work or requirements.
Category: Design Patterns
- Maintain a list of resources which makes it easy to find patterns that might be applicable to your domain. Here is a list of enterprise software patterns, Martin Fowler maintains. Some of them are books, and it is assumed you have access to them
- Make sure not all patterns apply every time you see an opportunity. In other words, it is safe to say - Trust your instincts more than the patterns. This obviously assumes you have a good understanding of the patterns and experience with good software engineering and design practices over a period of time.
Category: Agile Practices
- Don't foresee changes in your software requirements, architecture, design... Plan for change.
- Find a mentor who has passed the road of software salvation and have regular conversations with her/him. Share your experiences and laugh it our. See how much it works
- Read blogs of people working in a similar domain of yours. Often bloggers post their experiences - learn from them. Learning from experiences is often better than from pedantry books.
...work in progress...
Caveat: One thing that is true about life on earth is that, there are always exceptions. There will be situations that you might encounter in your design and development career, that sometimes it is best to keep the design simple and folllowing these principles simply adds more complexity and the value is not worth the effort.