Monday, October 25, 2010

The Burden of Over-Engineering

As I've gotten more professional experience in Software Development, I've witnessed - and been a part of - a reoccurring problem known as over-engineering. According to wikipedia, over-engineering is:
when a product is more robust or complicated than necessary for its application, either (charitably) to ensure sufficient factor of safety, sufficient functionality, or due to design errors. While software development and design is difficult enough as is, it becomes increasingly more difficult when you try to design a system that will work for the requirements of version 1, as well as not need to be overhauled for version 2. So we have concrete requirements for a product that we use, but we also have future needs that we try to account for. More often then not though, it seems that those future needs for version 2 never come about, or when its time to work on version 2 its a completely different set of requirements than we had anticipated. Either way, you're stuck with a system that supports requirements that were never actualized.

Its not that as software developers we should never be thinking about future requirements, far from it, but we need to be more cautious about how much of an impact those requirements that may or may not come will impact our current design. No one wants to have to rewrite critical path code months from now because he/she didn't properly anticipate how the use of the system would change. But the fact is that software is all virtual, thus malleable. Design for what you are being asked to deliver today, and if tomorrow comes then we'll hop on the refactoring train. I'm not saying to completely ignore any notion of the project having future requirements, but I would argue developers need to err on the side of caution when implementing those future requirements at the risk of added complexity in the system.

The more projects I've worked on the more I've noticed the probability that the development team will correctly anticipate and implement future requirements is rather small. The cost of maintaining an overly complex system is - in my opinion at least - higher than developing for today's requirements and having to refactor the system once the next phase of the project begins. I say this for two reasons. First, the cost of maintaining an overly complex system is usually grossly underestimated. Second, more than likely, when the next phase begins, there will be refactoring any way, and no one can be sure when that next phase will be prioritized, scoped, and scheduled for development.

At the end of the day, we have to maintain a large amount of legacy code. Software projects are never truly finished as there is always long term maintenance. Knowing how long you will be responsible for keeping your systems up and running, you'll be happier in the long run if do yourself a favor and design for today, reducing complexity and delivering actual benefit as opposed to future, potential benefit. Tomorrow comes less often than you think, but you always have today.


Labels:

Sunday, March 14, 2010

The Power of Focus

I've posted before on the virtues of setting goals and the affect those goals can have on reaching accomplishments in your life. As I'm making good progress on my goals for this year - including getting in better shape and advancing my software development skills outside of the office - I wanted to share some more details about how I set my goals, what has worked for me and what hasn't.

I'd like to start by saying if you don't really believe in the power of setting goals and think all the self-help and self-motivation stuff is really a load of crap then you're definitely in the majority. Most people don't buy into the effect these simple tools can have for getting what you want in life. It all just sounds so corny and hokey. Goals, positive thinking, vision boards, blah blah blah its all stupid and a waste of time...right? Unfortunately for the majority, this thinking is flawed to the core. And the more inundated our society becomes with distractions - and thus more plagued with ADD - the importance of setting goals and focusing on them becomes more paramount to achieving what you want out of life, in my opinion at least.

I did not always believe in the power of goals and focus but I am a firm believer now because of the changes I've experienced first hand. I've accomplished a lot in the past couple months because I've set clear, well defined goals that I continually read and focus on. I've been reading more, writing more, participated in new open source projects, lost a total of over 30 pounds since moving to Seattle, and generally feel more productive and fulfilled in my time management than ever before. Compare this to any period of time when I didn't set any kind of goals and you'll see that I mainly watched a lot of television programs and movies as well as played a lot of video games. I also wasted an exorbitant amount of time on the internet, not learning anything of particular value. With more content, faster connection speeds, and mobile devices, our world has vast capabilities for knowledge and information. At least for me, I tended to use these tools for useless information that neither spawned thought, change, or left me with any semblance of greater intelligence. In short, its all a distraction - a time waster.

Time wasters are fine in small doses, but I would look back on the past few months and realize I had absolutely nothing to show for it. I hadn't improved myself or the world around me in any way. I'd done great work at Orbitz, but that's work. Its what I'm being paid to do everyday. What about the things I love?

Now I'm improving myself day after day and the key - for me at least - has been two fold.

First, set goals for multiple timelines, and set well defined goals. Want to know why new years resolutions fail most of the time? Its probably for several reasons but I think the biggest is that the resolutions by themselves are too drastic and long term to succeed at. Quit smoking, lose weight, write that novel. Sure these are great long term goals. But if you're smoking a pack a day, or are very overweight, or haven't even thought of an outline for that novel, chances are you're going to make some progress towards that goal but then get discouraged when you realize how long its going to take and you quit. Better luck next year. You need short term and long term goals. I personally set current month goals, 3 month goals, and year goals. I made the year goals at the beginning of January and have made monthly goals at the beginning of each new month. In February, I made a 90 day goal plan for where I wanted to be in May. The year goals tell me where I want to end up. They are going to be broad goals, but well defined. If I just had these, it would be hard to note progress towards the destination. Imagine driving from coast to coast in the US. If you start in Seattle, your end goal is Miami. But after you've driven a few hours you've made progress - you just can't tell by only looking at your destination (and you can't even see your destination from where you are). By setting monthly goals, very specific goals, I have discrete items that I can measure my progress by and know that I am advancing towards my long term goals. These goals must be specific - in our driving example, it might be to reach the town of Spokane, Washington in 5 hours. The more specific, the more detailed the better. The 90 day plan I'm still test driving to see how effective it is. It should be obvious this goal plan is your medium range - trying to reach the state of Wyoming in our driving example. I like to think of the 90 day plan as a way to ensure you don't get too far off from your end destination. Your monthly goals are your small navigation corrections but you need some way to ensure you are headed to where you need to be. The 90 day plan bridges your short term and long term goals.

Second, I continually read my goals, I focused on them. When I've set goals in the past and failed, its mainly been because I sat down, wrote the goals, then never looked at them again. Out of sight, definitely out of mind. It sounds cheesy but to really succeed you must ingrain the goals into your mind, ideally daily. I've read that you should have a goal card that you carry around with you. I haven't gone to this extreme. My goals are on my private wiki so I can access them from everywhere. I look at them about every couple days on average. You can set perfect goals - the right timelines, measures of progress, everything - but if you don't remind yourself of those goals most likely your goal writing exercise has been in vain. The key here is to focus on your goals. That's where the motivation comes from, that's where the power of goals is unleashed.

What hasn't worked for me is not having accountability. If there is no penalty for missing a goal, there can quickly become no reason to continue striving towards our long term goals. Missing a goal is not the end of the world, but there must be a compelling reason to correct our behavior. Otherwise, over time this effort will dwindle and we're left back where we started, content for the present to waste time and be distracted. A dorky buddy system works wonders for staying on track, making sure you don't miss your goals. Think about the success of support groups, surround yourself with people who will encourage you but also keep you on track.

Goals have been talked about in great length but unfortunately few people actually change after being exposed to the power of goals. Ask yourself, are you truly content or do you want to be a better you. You'd be surprised just how great you can be, if you want it enough.

Labels:

Sunday, February 28, 2010

The Teaching Company

My father gave me a series of lectures on Game Theory published by The Teaching Company. I'm halfway through the 24 lecture series and wanted to recommend using The Teaching Company for anyone interested in continued learning. There are a wide variety of subjects offered, check out their site.

It sounds kind of lame to purchase lectures to watch in your free time, wasn't college bad enough? What I love about these lectures is three-fold.

First, it is on a subject I am genuinely interested in learning. This isn't a subject I am being forced to dive into. I find the applications of game theory fascinating and only briefly learned about it during one semester at school years ago. Its been great to really get into the meat of this subject and dive deeper.

Second, I watch them on my time. Its a DVD, watch it whenever you like. Each lecture in my series is approximately 30 minutes, easy to watch just one or a few in a row. I've been slowly watching them over the past couple months because I'm in no hurry. I'm learning on my own schedule. Don't feel like watching a lecture for a couple weeks, no problem. Need to hear that part again because you zoned out? Just rewind it. Its so much easier to absorb the information at your own pace rather than a scheduled live lecture. And its more fun.

Last, its just for fun. The goal isn't to get a good grade. There's no homework or exams to worry about. No final paper looming over the horizon. Its just information for your benefit if you want it. I feel not having to worry about tests or performance lets me just focus on gaining knowledge.

There are many ways to spend your time; I've found that these Teaching Company lectures are actually quite fun and engrossing, quenching my thirst for new information. They are arguably a little on the pricey side but the company does run sales promotions, and 30 minutes of a lecture leaves my brain better off than 30 minutes of a Seinfeld re-run or entertainment show. They've been a fun way to exercise my brain and I look forward to other series as well. Its dorky, but I like to learn :)