Subscribe: Red Squirrel Reflections
Added By: Feedage Forager Feedage Grade B rated
Language: English
gary  leah  months  obtiva  office  people  project  rails  red squirrel  run track  run  started  studio  time  track run  twitter  wanted 
Rate this Feed
Rate this feedRate this feedRate this feedRate this feedRate this feed
Rate this feed 1 starRate this feed 2 starRate this feed 3 starRate this feed 4 starRate this feed 5 star

Comments (0)

Feed Details and Statistics Feed Statistics
Preview: Red Squirrel Reflections

Red Squirrel Reflections

Dave Hoover explores the psychology of software development


Red Squirrel's Nuts!
After over 6 years of Red Squirrel Reflections, I'm calling it quits. I've now officially gone nuts! Update your RSS feeds and subscribe to See you there!

Goals for 2009

Looking back on my goals for 2006 and 2007, it's gratifying to see that I've accomplished some things. In 2006 I wanted to finish writing the book. Yeah! It's 2009 and the book is done! Better late than never. In 2007 I wanted to spend more time in Obtiva's home office and hire an apprentice. Yeah! It's 2009 and I've been working from our office since April 2007 and we've hired 6 apprentices since that time. For the last 3 years I've wanted to learn more about interface design. Sigh. Still very little progress on this.

So, without further delay, my goals for 2009:

  • Sleep 8 hours a night
  • Run a marathon in 3.5 hours
  • Read the Bible, cover-to-cover
  • Deliver a project in a language other than Ruby
  • Take a picture with my book on the bookshelf at the local Barnes and Noble

My MadMimi Story
In late 2006 and early 2007 I was doing a lot of "selling" for Obtiva. I was trying to win a project big enough to allow me to roll off my current on-site consulting gig. I wanted to start a new practice at Obtiva I called "The Studio". This practice would allow us to work from our office in Wheaton, Illinois, USA and hopefully allow us to create an environment conducive to apprenticeship. I had already found some Rails projects for us to work on. One of these projects allowed us to hire Ryan Platte, Obtiva's fifth full-timer. The rest were done in our off-hours or with sub-contractors, none of them were big enough to justify me leaving a steady, long-term gig a few miles from home. And then in March 2007, I was contacted by Gary Levitt about a project called Mad Mimi: Hey Dave, I'm a bass player, came to NY from South Africa to contribute to the Paul Simon Group. I set up a music company and am building a hip application for musicians. He went on to say that he had all the "groundwork" for the project completed, meaning the requirements were ready to be executed over the course of a few months. Anyone who has ever been involved with a software project for more than a few months would find that claim pretty funny, but it was great to hear that Gary had already started laying the "groundwork" (coached by Jeff Patton) and had a delivery date in mind. I was thrilled to receive that email from Gary, and ecstatic when a week later I ended up winning the project despite stiff competition against some people and companies I have a ton of respect for. I rolled off my on-site gig a month later and showed up in "The Studio", a low-budget, 3 room office about a mile from my home in Wheaton, IL, USA, that smelled a bit like the dentist office down the hall (which meant that kids would occaisionaly run down the hallway screaming as they tried to escape their impending doom). There I was, all by myself, with a new client in New York and some fixed-price, fixed-scope 1 week milestones to churn through. And churn we did. In those first weeks Mad Mimi morphed her identity more than once and a few weeks later we had something we could play with. Mad Mimi was all about creating Promotions, making it easy for people to compose beautiful emails in as few steps as possible. Unfortunately I'm not good (yet) at making things visually beautiful, and so Gary (yes, the customer) nominated himself to become the CSS ninja, and over the course of the coming months, Gary learned how to navigate a Rails code base, run the app locally, use Subversion, and develop beautiful CSS designs. Eventually he even learned how to use Capistrano and deploy the app to the server, but I'm getting ahead of myself. Not surprisingly, it took longer than a few months to create the product that Gary wanted, partly because Gary discovered what he wanted along the way, and partly because I was still learning how to do what Gary wanted. I had to implement Ajax image uploads along with image drag-and-drop to allow people to have a WYSIWYG-ish experience creating their Promotions. I had to pick and integrate a Rails-friendly background task processor (circa mid-2007) to allow users to pause, cancel, or observe the progress of their Promotion mailings. My drag-and-drop code eventually got rewritten by Tobie Langel when he joined the project in early 2008. The background task processor that I chose, BackgrounDRb 0.2.1, seemed like the only viable option at the time, so I chose it and we're still using it (though I wouldn't say we're raving fans). There was also the issue of dealing with large (to me) data sets triggered at any moment by a user action, such as a user uploading 50,000 contacts or sending a Promotion to 70,000 people. I had some previous (bad) experiences with handling lots of data with ActiveRecord, so at least I knew what not to do, and I got something working with data sets of less than 100,000 with a mostly empty database. Along the way the Studio practice was growing. I qui[...]

Rails Rumble 2008: Developing Run.Track.Run.
Leah Welty-Rieger joined Obtiva a couple months ago. She is an apprentice in our Software Studio. (She also recently earned her PhD in Particle Physics from Indiana University.) About a month or so ago, Leah and I were walking back from lunch and started talking about our shared interest in running. Then she told me about an idea she had for making simpler, easier, more informative running software for planning and tracking your training. A couple weeks later I found a link to Rails Rumble 2008. I'd wanted to rumble in the past, because I'm a fairly speedy programmer, and I love competition. But having very little CSS-fu and lacking any inspired 48-hour-sized ideas, I'd never rumbled. Until this year. I immediately thought of Leah's idea and realized that with the addition of CSS-ninja Dan Nawara to our Studio team, we had sufficient skills to rumble. And just because I had the luxury of doing so, I asked Fred Polgardy to join us as well, because, well, Fred's a genius, particularly with JavaScript. We got together 3 times before the competition to formulate our plan of attack. This helped us start on the same page. We understood the domain model (Users have Runs have Splits), and we knew we were going to integrate with the Garmin Forerunner, and we knew we were going to use Flotr to build the HTML-canvas-based graphs that Leah had specified. We decided to use HAML and SASS, which I had never used, but found perfectly intuitive and productive (and now prefer it). I decided to stick with good old test/unit for TDD. I'm still much more productive in test/unit than any other Ruby testing framework and I needed something dead simple since I was going to be running low on energy. I also planned to use TDD strategically. Basically, I used it to test my models, but developed my controllers without tests. Ironically, this helped keep my controllers really skinny, since I ended up extracting logic into models (such as the Garmin XML file processing and matching scheduled runs to actual runs) and wrapping them in tests. We also decided on the name for the app: Run.Track.Run. We were both excited and disappointed to find out a day later that Relevance had created Run Code Run and would be offering free continuous integration for rumblers, and thereby leading everyone to assume that we copied their name. The competition started on Friday at 7pm Chicago time. My wife, kids, and I with friends in their house. I rudely, and suddenly grabbed my laptop and bluetooth-enabled modem/mobile-phone and started the process of setting up our github repository with Bort, installed Debian on Linode (with Apache+Passenger, MySQL, Postfix), hooked our build into Run Code Run, and pushed our first Capistrano deployment up to the server. The next morning the 4 of us met at the office and started rumbling as a team. The rest of the story is actually pretty mundane. I got really pissed off, swearing loudly at the Garmin JavaScript libraries for a while until Fred came over and solved the problem. We did a lot of pair programming. And mostly just kicked ass consistently for 48 hours. I got to pair with Leah, Dan and Fred (sorted in order of amount of pairing time). I think everyone paired with everyone. And everyone got enough sleep. And with an hour to go, we were kicking back with beer and making final tweaks. In the end, we launched Run.Track.Run., which I'm particularly excited about, since I'm one of the (currently) 75 runners who are already using the application. [...]

Twitter Etiquette
I have a couple Twitter pet peeves. I follow around 80 people on Twitter, and this list has been carefully optimized over time to maximize signal vs. noise. I'm a huge fan of Twitter, I actually have seven Twitter accounts for the splintered fragments of my personality. I enjoy Twitter so much that I want to highlight 2 small peeves that I'm hoping we can minimize in order to help all of us maximize our signal.
  1. Multi-tweet tweets: Brian Marick, one of the most intelligent, humorous geeks I've had the pleasure of meeting has a long-running habit of allowing his tweets to break out of the 140 character limit. Brian, this is cheating! Embrace constraints!
  2. Context-less replies: I could point to a lot of offenders (myself included) but I'll point at one of my favorite people, Bil Kleb. I often observe people having a glorified instant messaging conversation on Twitter. This can get really noisy if you're not careful. You want to make sure that each tweet has enough context that your followers know enough to know that they're not interested or compelled to click through a username or tinyurl.
OK, stepping down from the soapbox...

The Me Meme
I was catching up on my blog reading on the train (sitting in the stairwell) and read Obie's Me Meme post...


Go ahead and follow these instructions if you're into silly memes...
  1. Take a picture of yourself right now.
  2. Don