So we’ve “pivoted” (still getting used to the word) away from SkierUnderground for the time being, and while I have a little bit of time between projects, I thought it apropos to reflect on what happened over the last three months and extract some tidbits to take forward. I was going to write them all down here, but it got a little lengthy, so I’ve made it a series.

SkierUnderground – Lessons Learned

Everything Takes Longer

Everything takes longer than you think it will. Over time, you’ll get better at estimating, but when you’re starting out everything takes multiple times longer than you thought it would. The trouble is figuring out what that multiple is.

As a SW engineer with 10 years of programming experience and a masters degree worth of theoretical computer science under my belt, I can pick up the general ideas behind just about any web technology. What I’ve learned is that it’s the specifics that bite you in the ass.

For example, when I first saw the Yii framework, I thought, “Hey it’s PHP (a language I have a lot of experience with), it’s object oriented (my bread and butter), and much like Rails, it’s an MVC architecture that favors convention over configuration.” Every one of those concepts, I have experience in. “Piece of cake!”

Not quite. Every technology has little nuances that have to be navigated. Every day there’s something you didn’t plan for eating at your development time.

I don’t know whether it’s because I’m generally an optimistic person, or because I truly didn’t realize what I was getting into, or even that my excitement over the project led me to believe that I’d be able to accomplish magical things with respect to productivity, but I was off. Not just off, WAY off. Two to three times off!

There were so many little tasks along the way that I didn’t anticipate. And for the most part, they weren’t things I should’ve expected myself to anticipate. The thing is, you just don’t know. Every day is a gargantuan learning experience, and even having immersed myself in development for three months, I’m still learning every single day. In fact, a lot of those little lessons are so simple, yet so mind-blowing that I wonder how it is I called myself a developer (or entrepreneur) having not known them.

With all of those unknowns out there, how can I expect to ship on time? I estimate.

I take into account that I’m overly optimistic, and I take into account that unexpected problems will arise, and I take into account the fact that my initial estimates usually only include the minimum for getting something to work, not to put the required polish on the new feature before shipping it.

Your mileage may vary, but I look at each task and say to myself, “With 85% confidence, how many hours will this take?” and save that number in my head.

Now, if there’s anything in the process that I haven’t done before, if I have to learn a new API, or need to try a new jQuery technique, I take my estimate and triple it.* That’s my number. Even if it’s something I’ve done before and I can’t see any potential gotcha’s, then I still double it.

*If I have to do anything related to layout in IE, I square it :-)

That’s my system, and from a project management perspective, I’d say my SPI is just over 1.2. That’s saying I’m overperforming my estimates. But again, that’s just a guess.

Going forward, I’ll be tracking my tasks more carefully so that I can track a more exact SPI value and adjust my estimating capabilities so that I come in on target. The goal isn’t necessarily to go faster (that’ll come on it’s own), the goal is to build my learning curve into my estimation so that I can hit deadlines and ship features as expected. It’s a bare-bones implementation of Evidence-Based Scheduling.

My lesson going forward is to track my productivity and use it to plan for the unexpected. There’s nothing worse than missing a deadline. You feel like a failure (and if you don’t, I’d argue you’re in the wrong business). You feel demoralized, and you’ve deprived yourself of the opportunity to build momentum with the “small win” of hitting a milestone. Don’t set yourself up for failure by being overly optimistic. Track it, and start being realistic.

So we’ve “pivoted” (still getting used to the word) away from SkierUnderground for the time being, and while I have a little bit of time between projects, I thought it apropos to reflect on what happened over the last three months and extract some tidbits to take forward. I was going to write them all down here, but it got a little lengthy, so I’ve made it a series.

SkierUnderground – Lessons Learned

Start From a Solid Base

They say that a downturn in the economy is one of the best times to start a business. Tough times force smart entrepreneurs to be lean, to make creative decisions to make due with what they have. Tough times prevent companies from being overfed with capital, and spending that money on people they don’t need and $1000 office chairs to sit them in. – see Bubble, DotCom.

Another symptom of the downturn is that big companies start pinching pennies, and employees start reading articles like this one and think “Oh boy, I can leave my job where they only gave us a 1% raise and make millions on a startup.” Doesn’t work that way. If you’re running away from your old job, just stop. The grass isn’t always greener, and the bills don’t go away just because you think you came up with the next social networking phenomenon (“But it’s like Facebook, for dogs…or backcountry skiers!”).

Make sure when you jump into the new business, that you’re doing it for the right reasons, and not out of emotional desperation*. Don’t rush into it with the thought that starting a company will fix all of your problems. If your work-life balance sucks now, believe me, it’ll suck worse. If you’re out of shape and can’t seem to find time to get to the gym, well, it doesn’t get easier. That doesn’t even begin to take into account things like personal relationships or mental health.

*Desperation in itself isn’t bad, in fact it’s downright motivating, but when you’re desperate and overly emotional, you start making decisions from the wrong places, and when every decision counts, that’s not the place to be.

In reference to the manic-depressive, entrepreneurship roller coaster that Tim Ferriss describes in this eerily accurate post, it’s a scary, gut-wrenching ride.

Do yourself a favor. Before you get on, give that roller-coaster the strongest (mental, physical, emotional, and spiritual) base you can. You’re going to need it.

SkierUnderground Logo

For three months, I had a dream. Check that, for three months I worked off of fear, adrenaline and stress, and thought I had a dream. What I had was a desire to work for myself, and an admittedly mediocre idea of how to get there. I still fully believe in Derek Sivers’ mantra that the idea is simply a multiplier of execution, but what I had was a so-so idea without the ability to execute it in a way that would make it worthwhile. I’ll break this down a bit more.

The Idea

The idea started as an exclusive online community for the world’s best skiers. It changed to a more pedestrian community for the niche market of backcountry skiers. Every new idea has to change as you learn more about it. This idea was no different. The problems arose as the idea moved further and further away from the original, exciting idea, and more toward an idea that would fill a market need, but not our market need.

In my mind, the passion for the idea can’t come from someone else. With SkierUnderground, the passion for the product was based on the desire for the site to fulfill a dream of self-employment, not from the desire to solve a real world problem for oneself, and by extension for like-minded individuals that would line up with cash for the brilliant solution.

In order for a business to succeed, the founders have to be obsessed with their idea. They have to live and breath the idea. Because when they don’t, they hit the hard times, and suddenly the security of the 9-5 seems really tempting….even if it means you have to spend your waking hours writing printer drivers or reading/writing process documents, at least you’re off of the manic-depressive roller coaster that is a tech startup. Writing this, that still seems unappealing, but at 2:30 in the morning when you’ve spent the last two weeks writing a simple page that will upload and crop a damn picture (TWO FREAKIN’ WEEKS!*), well, you feel the temptation.

*It is not recommended that you spend anywhere near this amount of time on this type of a task (unless of course you’re Picnik). I’m working on a lessons-learned post that will cover this particular debacle in more detail.

The point is, unless you own the problem and you’re passionate about your solution, it’s incredibly difficult to sustain the level of drive needed to overcome the downturns on the roller coaster.

SkierUnderground did not survive the downturns, but it gave me a lot of ideas and a lot of lessons to move forward with.

More to come on the pivot away from SkierUnderground and those lessons I’ll be carrying in my back pocket.

Thoughts From The Woods

In: Life

19 May 2010

This past weekend I had the pleasure of heading up to North Conway, NH to do a little hiking with Katie (the girl) and Callie (the girl’s canine companion). We went on a couple of moderate hikes, but the part that I found so fascinating, was the way that Callie approached the mountain. Callie is a mutt, but she’s largely a Great Pyrenees. Her breed is a mountain dog, and to see her get out on an actual mountain was a real treat. You could tell she was finally doing what she was born to do. She’s a fifty pound dog and she dragged my 200lb frame up and down two mountains, pulling the whole way.

She was in her element, always pulling towards the next obstacle. She came home exhausted, and elated.

I can’t wait until I’m finally doing what I was born to do…

This is just a simple tutorial for creating an ajaxLink in Yii.  Since I looked all around and there wasn’t anything this straightforward, I thought I’d write it up myself. Feel free to add any comments or suggestions.  My goal is to create a link that passes data through POST to one of my controller actions using the Yii AJAX interface.  While researching how to do this the “Yii” way, I found no less than 5 different examples, none of which worked, and none of which purported to do exactly what I was looking to do.

If you’re just looking for the simple example, here it is.

In view that contains the link:

echo CHtml::ajaxLink(
  "Link Text",
  Yii::app()->createUrl( 'myController/ajaxRequest' ),
  array( // ajaxOptions
    'type' =>; 'POST',
    'beforeSend' => "function( request )
                     {
                       // Set up any pre-sending stuff like initializing progress indicators
                     }",
    'success' => "function( data )
                  {
                    // handle return data
                    alert( data );
                  }",
    'data' => array( 'val1' => '1', 'val2' => '2' )
  ),
  array( //htmlOptions
    'href' => Yii::app()->createUrl( 'myController/ajaxRequest' ),
    'class' => $class
  )
);

Make sure to allow the user access to the particular action you’re calling through your AJAX request.

In the MyController.php file:

public function accessRules()
{
  return array(
    array('allow',
          'actions'=>array('ajaxrequest'),
          'users'=>array('@'),
    ),
    // ...
    array('deny',  // deny all users
          'users'=>array('*'),
    ),
  );
}

Now let’s handle that request shall we?

Further along in MyController.php:

public function actionAjaxRequest()
{
  $val1 = $_POST['val1'];
  $val2 = $_POST['val2'];
 
  //
  // Perform processing
  //
 
  //
  // echo the AJAX response
  //
  echo "some sort of response";
 
  Yii::app()->end();
}

Hello world!

In: Uncategorized

23 Mar 2010

I was going to delete this post, but since this blog will have a programming edge to it… I suppose I’ll leave it be…. and maybe add some code:

function helloWorld()
{
  alert( "Hello World!" );
}

About This....Thing

I'm 26 and life in the tin and burlap prison I call the cubicle farm is no life for me. I'm changing careers to focus on my passion of web development and marketing. In this space I'll take a few moments to pass along thoughts on changing my career, building a business, building a community, and building a enterprise-worthy Rails app. I doubt many people will find all of that interesting, but maybe a few will find some nuggets in there somewhere.

Photostream

Latest Tweets

  • It's the pre-versary! 365 days until wedded bliss (and the honeymoon)
  • The whole student loan/ridiculous tuition prices always felt a little dirty... a little infographic validation... http://bit.ly/aXrY13
  • This is EXACTLY what I wish recipes looked like. http://bit.ly/aI2qwP #androidplz
  • Ping shares what songs I buy..... wish I'd known that before I downloaded the Hillary Duff anthology....
  • Why don't people like elephants in the summer? http://bit.ly/ah1wg6