How do you know how far you can take something until you've taken it too far… at least once?
This little "proverb" (if I can call it that) has limited applicability, and could be grossly misapplied, but has some relevance to what I'm currently working on. At the moment I'm designing a software system with an emphasis on SRP, the Single Responsibility Principle.
The proverb accepts the tendency to over-apply something just learned. In many cases this over-application is okay because you'll never know how far you should take something until you find the upper limit. In this design I may go too far with SRP. If so this will create some development friction in the future that I'll experience (hopefully me and not some poor maintenance dev!) and will learn why I took that principle too far, and what other architectural principle I sacrificed at the altar of SRP. Within reasonable constraints, I think this process is good. It's like Bruce Lee's approach to martial arts, which I first saw Ron Jeffries apply to software development:
- Learn the principle, abide by the principle, and dissolve the principle.
The dissolving is the interesting part.
Here are some other things to keep in mind with this "proverb:"
- I'd much rather learn the upper limit from observing someone else take something a little too far.
- The cost of going too far must be taken into account. Some upper limits should be stayed well away from. Like elevator capacities.
- As implied above, principles need to be balanced. This means to avoid promoting one at the expense of another.