More often than not, developers thrive for the opportunity for self-developmental moments by designing something super abstract – and in the end become disappointed and unhappy with it because designing things that are too abstract can be just as limiting, if not more limiting and difficult to work with than something simple.
“KISS – Keep It Simple Stupid.” ~ Micheal Scott
Simplicity can be as profound as complicated abstract programming. Not everything has to have a special class or super abstract format – get over it cause it’s moreso an elitist coffee club for programmers to try and put a notch between them and others.
Do you want to be a real uber programmer, a savant, a pro, the ‘go-to’ guy that everyone trusts?
KNOW THE BALANCE.
Don’t put everything on a high horse, know the balance between what should be a quick development and what should be programmed at a framework/abstract level.
Your superiors will love you because they can trust your judgement – it’s a true level of experience and knowledge, NOT your uber xyz class you wrote. Anyone can spend a year writing a ClassOfAwesome, but not everyone knows and understands the balance involved with being a truly productive programmer with a reputation and understanding of what can and should be done right.
It’s the name of the game – you don’t have all the time in the universe, PR/Marketing wants the goods delivered by xyz, every programmer is grumpy and unhappy because they can’t write ‘the perfect code’ – GET OVER IT and start understanding, this is the way it’s been, and will be FOREVER.
If the consumers/PR/Marketing/”The bosses” had their way, you’d have the best, most perfect product done yesterday, right? So, either you’ve already failed, or there’s an unachievable construct of constraints keeping you from doing what DOES need to be done in time.
What you need to do, is get as close as possible to your goals by making a trade off of “perfect” for “got it done”.
Do you -honestly- think the folks at Microsoft are too dumb to write perfect software?
It’s a game of balance – deliver xyz featrues if possible – keep it as secure as possible, your deadline is xyz – Corners have to be cut and it’s up to -you-, the programmer to pick the right ones that don’t end in catastrophe.