The Art of Harvesting Abstraction
Filed Under Architecture
Often I watch senior developers so hell-bent on preventing DRY through code abstractions, that they fall victim to the YAGNI principle. By being proactive you are opening yourself to wasting time creating abstractions that may never be needed or worse adding unwanted noise to your code.
Refactoring to abstractions should be a reactive response to DRY, not a proactive prevention plan. Being reactive to problems is a very “agile” approach, but even practitioners of agile processes sometimes get caught with their pants down running BUFD centric practices. To combat this problem, I created a term to help others overcome premature abstractions – Abstraction Harvesting.
Software is like a garden, you can’t 100% force or predict what is going to grow; however, you can react to current situations to better steer results in a favorable direction. The only rule of software abstraction harvesting is that you must have target software to abstract. What is the purpose of creating abstractions, if you don’t yet have the problem-solving concrete implementations? This is the equivalent of running the tractor over the field before the first sprout is even visible.
Before software can be reusable it first has to be usable. -Ralph Johnson
If we look closely at both DRY and YAGNI we find an almost sequential relationship. Without a DRY situation, we can not have YAGNI, but it is apparent that you can have a YAGNI situation without DRY. This is the equivelent of putting the cart before the horse. The concept of “Abstraction Harvesting” helps put the order back in place so you can prevent both DRY and YAGNI.
Have you been guilty of premature abstractions? If so, I want to hear the horror stories…
Meetings vs Cell Phones
Filed Under Human FactorsThis is a reader guest post by Jeremy Neuharth. Jeremy is a PMP that recently helped start a mobile development company and enjoys learning and assisting teams in implementing release management and continuous integration.
As a fellow tech geek I always enjoy new gadgets and various other electronic toys that I can spend money on and play with. Then a few years back something revolutionized my life, a smart phone. This device was great, no more PDA that I barely used, no more running back to my desk to find contact information, or having to print out my daily schedule. Basically my life was all right there in one device with the plus of being able to email or surf the web at any time.
Fast forward to a trend that I am seeing all too often today where the popularity of cell phones and mobile devices have all but taken over meetings. The time where it was frowned upon, or just downright rude, to play with your PDA or phone during a meeting is simply gone. In recent meetings the consent checking and sending emails thought-out a meeting seems like a status symbol of sorts. What happened to the days of basic respect or etiquette for others by gracing the other patrons with your attention was just expected. I will be the first to say that not all meetings are productive, but this trend has taken unproductive meetings to a whole new level.
Maybe it is time to start using more tools like wikis, instant messaging, or email to communicate. Is it time for human contact to go out the window? Are some drastic measures like “no cell phone meetings” needed to kill off this trend? Would it be better to remember what our mother’s taught us about basic social skills? Am I going to fall into the black hole of socially expectable non-interest of basic face-to-face respect and communication? What sort of emergency daily Dilbert would I miss if I shut my cell phone off for a whole meeting ?
Just think a few very short years ago not only did we not have ready to communicate 24/7 smart phones, but we actually had to be at our desks to get email, voice mail, or calls. With all this seemingly lack of communication it is amazing the world did not fall apart.