Good Enough Design
Design is hard and "perfect design" is overrated! In my opinion, you can only do it if you time-travel to the future! There are, of course, some design decisions that are easier to make. However, in most cases, there are always a few interesting and equally plausible alternative designs.
Try not to spend a lot of time being torn over design options; pick one and start coding! You can always improve it later.
That said, be wary of delegating too much to your future self! When you are faced with a design decision, ask yourself: "what is the future cost of doing nothing today?" Every choice has a price. This "improve it now" versus "improve it later" dilemma always exists. The process perhaps becomes a bit easier when you learn about Design Principles.
The design principles are the Commandments of Object-Oriented Programming. We will next explore two fundamental principles of cohesion and coupling.
Good Enough Design! The path to changeable and maintainable object-oriented software begins with classes that are highly cohesive and loosely coupled.