Archive for the 'Uncategorized' Category

Building a Software Product? Quick Fixes Will Burn You Down the Road

Tuesday, May 16th, 2006

To my regular readers: this is a little off what I normally write about, but it’s my blog and I reserve that right!

Software is a strange creature because it can never be perfect. In fact part of the trick to successfully deploying a great program is applying the 80/20 rule (or whatever ratio applies to you) to bug fixes in order to not waste prepostreous amounts of time and money fixing that last little glitch. Simultaneously a buggy program quickly loses its usefulness, so there must be balance between being perfection and being lousy. I’m here to offer one very important distinction to aid you in restoring this balance.

If You Are Going to Fix It, Do It Right the First Time

It’s very tempting to hack solutions in when you need something extra in your software, be it a traditional desktop application or a web application. Doing it right can often be costly in time and money, while a hack can take five minutes and save the budget. We can always redo it when the resources are available right? Well time moves on, the hack is never fixed, and slowly more and more of the code and users begin to depend on the hack. The amount of fixing that now needs to be done begins to multiply and pretty soon your little lifesaver is eroding the entirety of your application.

I’ve fallen victim to this more times than I can count. I recently spent all weekend fixing design problem in user management code that I wrote three years ago. A lack of foresight has required almost completely gutting the existing code and corresponding access routines, leaving me with gobs of dependent code that now needs to be fixed. The past can come back to haunt you, and when it does the cure is now much worst than it was in the past.

It Comes Back Down to Design

Whenever introducing a new feature or beginning an application, careful attention must be paid to the design. Ultimately you want something that will not only work well when its released, but will also be able to have the needs of the future easily integrated into it. I’ve been rewarded heavily for my foresight when I began a site framework years ago, because that base code, including the very first file that was ever written for it, is alive today and thanks to its modularity and high expandability it doesn’t feel dated.

Here are some general rules to check for to make sure the code that you are about to write is going to be a very sour gift for your future self:

  • Flexibility: Don’t write a module that can only add a specific column of data when it’s only slightly harder to make it work for any column. Providing a reasonable amount of generalization encourages re-use which in turn lowers the amount of bugs that can creep in (as you aren’t duplicating the same functionality over and over).
  • Modularity: If you aren’t writing a highly modular application that can easily have functionality added and decoupled then you are putting yourself at a tremendous disadvantage against nimble competitors like Google who completely redefine expected behavior and functionality overnight (see why GMail is destroying Hotmail). I like code that behaves like LEGO blocks.
  • Sanity: My all-encompassing description for code that makes sense. This means avoiding strange solutions for problems (typical result of micro-optimization or laziness) and writing intuitive self-descriptive code. You should be able to look at the code years from now and have it make sense.

What you do in the present should be for the purpose of building up your future, not leaving future self a mess to clean up. This applies to software!

Update on the “Extreme” Morning Experiment

Tuesday, April 18th, 2006

Last month I attempted to start waking up at 3 in the morning every day. Two days later I decided 5am was more reasonable, and I have stuck with this routine for a month now (less a day or two). The results have been great and I am quite happy to keep going indefinitely. I’m writing this update to give some insight into my experiences with waking up early so that you can decide if it’s worth a shot.

Absolute #1 Advantage: Work is Getting Done!

By far the largest advantage of switching to this schedule has been the increased productivity. I gain more hours each day to get my absolute best and most creative work done when my energy is at its highest. This has resulted in tremendous work gains, and as an extra surprise it has made it possible to focus on dull commitments later in the day due to having already used up my “excess” energy.

#2 Advantage: Breakfast is a Reality

Waking up at 5 I rarely feel rushed, and I always find time to eat a good breakfast. “Breakfast is the most important meal of the day” is something I believe firmly now, instead of just accepting the fact but not reacting on it. The energy boost I gain allows me to work longer than before and I can actually feel more energetic. I still drink more coffee than I should, but now I do so mostly for the enjoyment and habit than for actually being tired. This means lowering my caffiene intake might be a goal for the future!

#3 Advantage: No Appointment is Too Early!

The idea of having to be somewhere at 8 or even earlier used to fill me with dread at spending the entire day groggy and tired. Now few sane people are up before me, so I have gained a great deal of flexiblity in my business schedule. Being able to meet with a client at 8 in the morning and know I’m prepared and at my highest energy is a great feeling.

Are Late Nights Out Possible?

Measuring the impact of a late night on the schedule proved to be difficult. I wake-up hours before any conceivable appointment, so sleeping in a few hours isn’t difficult. Considering the high productivity cost that sleep deprivation has, it’s very easy to justify doing this. The next night is trickier since I have to go to bed at my regular 9-9:30pm time and hope I fall asleep quickly. Having a physically tiring day is awesome for allowing this, and as always caffiene shouldn’t be drunk too late in the day.

Things get problematic if I stay up until 2 in the morning or longer. At this point I can either sleep in and re-adapt to the 5am routine over two days, or I can force myself to wake up at a semi-reasonable hour and accept that I won’t get much done that day. The former is preferable since less waking time is lost to being ineffective.

What About Sleeping In an Hour?

Regardless of wake-up time, anytime you sleep in you run the risks of making it tougher to wake-up at your normal time - unless you have a busy day and are physically exhausted enough to go to bed at the usual time. I have found this to be no different physically for 5am wake-ups, but it is very challenging mentally. Before all this started, I would never voluntarily wake-up before I felt ready too, so the only way I could miss out on sleep was an early morning appointment. Now I’m in a position of choosing to force myself out of bed. This is something that I will do if I have gotten close to at least 7 hours of sleep, since trying to fall asleep at my usual time is more trouble than its worth if I sleep in.

How Hard Was It to Pull Off?

The short answer is: not very. The second day wasn’t pleasant, but otherwise all it took was wanting to do this badly enough to force myself (a night owl) out of bed at 5. The rewards in return are great and well worth putting yourself through a bit of a challenge at the start.

One reader suggested taking a nap in the day in order to be able to pull a later night without ruining the schedule. This is something that I will need to experiment with as well.

What Makes Entrepreneurs Entrepreneurial?

Sunday, April 16th, 2006

A comment from helpful reader Siddiq on my Barriers to Entrepreneurship post points out Effectuation - a very interesting site studying entrepreneurship. And on that interesting site is an interesting article titled “What Makes Entrepreneurs Entrepreneurial?“.

The article aims to analyze the thought process of the entrepreneur and distinguish this unique breed from a regular manager. It is based around the concept of “Effectual Reasoning” which is defined to be the inverse of “Casual Reasoning”. The main distinguishing factor is that instead of the casusal reasoning approach of “thinking of the best way to solve a problem given a set of means”, effectual reasoning “thinks of goals that can be acheived given a set of means”.

“All entrepreneurs begin with three categories of means: (1) Who they are – their traits, tastes and abilities; (2) What they know – their education, training, expertise, and experience; and, (3) Whom they know – their social and professional networks. Using these means, the entrepreneurs begin to imagine and implement possible effects that can be created with them. Most often, they start very small with the means that are closest at hand, and move almost directly into action without elaborate planning.” Saras D. Sarasvathy, University of Washington

I can identify with this personally, and the stories of other entrepreneurs come to mind too when I read this description. In my case I began with my programming abilities which I started developing as a hobby back in the 7th grade. This coding obsession placed me at first in the software industry with CustomBar, but as time went on I found greater successes in applying the solid software development principles I had learned and practiced to web programming. As I went through successful and unsuccessful ventures, I learned the value of utilizing my social network (Tilted Pixel’s customers are almost all referals), the importance of experimentation (”ready, fire, aim”), and found myself applying everything I had learned in my previous experiences for greater and greater success.

The article highlights some other very interesting points:

  • Rather than formal market research, entrepreneurs are far more likely to just Do It - selling the product/idea on a small scale, analyzing the results, and then figuring out what works. I find this principle of “ready, fire, aim” highly effective and it has been preached to me multiple times by successful entrepreneurs.
  • The building of strategic partnerships at the onset is important for obtaining support, commitment, and entering the market with little capital.
  • Far from being unexpected, surprises are an integral part of the landscape. Successful entrepreneurs leverage these surprises rather than attempting to avoid them.
  • Predictable markets can be a bad things for entrepreneurs, as someone else can always predict them better.
  • Effectual reasoning enables failures to occur sooner and for the costs to be spread-out in a way that avoids devastation (see strategic partnerships). This is illustrated in the article with the story of U-Haul.

The full 9 page article is available in PDF and perfect for taking along to read on a subway or coffee break.