Skip to content

Back to Microsoft

horse-rider-cowboy-441318-l Well, what do you know, I am back in the saddle again at Microsoft.  Different team, different building, but there is a bit of a deja vu all over again.  I left Microsoft around Sep 2007 to help run an agile development consulting practice for SolutionsIQ an agile consulting firm located in Redmond just down the street from the Microsoft main campus.  I have had a long acquaintance with Charlie Rudd the CEO at SolutionsIQ.  I had a fun but brief time there and even became a Certified Scrum Master.  One of the first customers I had was uBoost an Internet startup based in Honolulu.  uBoost had a product in trouble and was going to need a huge effort to get its initial version, written in a Java/Oracle stack (J2EE, Hibernate, Struts, Spring), to a completely new version using a software as service vision (more on that later).  In November I decided to join uBoost as CTO/Chief Architect.  While the Hawaii part sounds great (especially in November in the Puget Sound area where I live) the real motivator was a very cool idea, a small team (6 or 7 dev/designers), and the startup mentality which I have done a few times (Netstock/Sharebuilder , and GeoTrust).   I have kids in high school so unfortunately I couldn’t relocate and consequently commuted from Seattle to Honolulu every other week.  This is what ultimately got me, I just couldn’t keep up the commute.  I didn’t anticipate how difficult it was going to be to commute west to east.  Working with Hawaii, at 7pm it is only 4pm in Honolulu and things are just getting rolling.   Forget family dinners, forget your kids depending on you, not to mention wifey.  So after we delivered uBoost version 2.4 I decided to make the move to Microsoft.  Why Microsoft again, you say?  Well, it is related to the project I worked on while at uBoost …

uBoost was in a tough situation when I arrived.  The development team had just been formed after it was resolved that a consulting firm was not going to be able to pull it out.  There was a super tight deadline, it was November 2007 and the goal was January 2008.  My initial intent was to prioritize features and evolve the existing system to the visionary goals of John Bower, our energetic, and never sleeping CEO.  John and I had gotten a chance to have quite a bit of discussion on the vision before I started.  The idea was to create a “rewards and recognition platform for the web“, demonstrated initially in a project for Weekly Reader, to enable any web site (actually this could extend to offline as well) to reward an event or activity by issuing “points” via a web service.  The user could then come to either a uBoost branded or private label “Rewards Center” and shop in a completely customizable catalog of hundreds of thousands of rewards (physical goods, coupons, virtual items, charities, sweepstakes, etc.).  The platform needed to support the existing Weekly Reader co-branded product, a new uBoost direct B2C product (with all sort of activities to earn points), and a white labeled (software as service) model allowing partners to have completely isolated users and styles so that they could have their own private labeled rewards program offering.  Initially uBoost focused on the educational market but the idea applied to anything web offering so we needed a platform that would be highly customizable and scalable.  Quite a few requirements and on top of that John is a perfectionist when it comes to the user experience (rightfully) so the uBoost B2C site needed to have world class design and compete from a design and professionalism perspective with the best, modern sites.  All this in three months with a team of 5 devs and a designer (not including me).  Notice no test, no program management, no database administrators. 

It probably would not surprise most of you that the existing Java stack that uBoost was running was not going to cut it for the development speed needed.  It wasn’t just the complexity of the stack, to be fair, it was also knowledge of the codebase.  Also there were integrity issues in large part because the app had been slammed in under tremendous deadline pressure.  We had two developers who had been involved with the original 1.0 product development and it was taking them days to make even the simplest changes.

The first thing we did when I got there was to have a sprint that was nothing but spikes, (research efforts).  We paired off the team.  Thomas Ollauson, had been talking about Ruby on Rails informally with the team and me, and we decided that he would attempt to create administration functions for one of the most complex aspects of the system (the rewards catalog, hierarchical, tagged, customer dependent …).  He paired off with Eric Meyer, one of the Java devs who knew the old system.  The rest of us concentrated on some part of the existing Java stack.  After three days or so Thomas informed me he had a working admin page and some tests ready to demonstrate to me.  I was surprised, no one else even had a bit of code working, but not too surprised because my view of Rails, knowing nothing about it, was as a toy that might be used for admin pages, or some ancillary internal site but that was about it.  Thomas’ demo amazed me.  He and Eric had created more functionality than the current site had in that area (by far) but I was more amazed when he showed me under the hood.  I found, to my surprise, that Rails had a full back to front architectural prescription.  It not only prescribes an effective best practice web development architecture but it makes it difficult to write applications that do not conform to conventions (see Convention over configuration).  You get much of your productivity gains not from shortcuts as I have seen in other web development technologies purported to provide high speed development, but by adopting a set of conventions that relieve you from having to reinvent the web application infrastructure.  I could and will write a lot more about Rails and Ruby but suffice to say I was won over very quickly (I didn’t have much time any way), I halted the sprint, and we made the decision to rewrite the entire product using Ruby on Rails.  This wasn’t my expectation or intent coming in but considering the situation it was clear to me then, and in hindsight it was clearly the right decision (we would STILL be working on the revisions if we had not decisively moving to Rails). 

To make a long and intense story short (is it too late for that?) we didn’t make the 3 months but we did make 5 months for the initial launch with high impact subsequent releases every two weeks ongoing.  Take a look at the site, www.uboost.com.  First, it is not the typical example site you see for Ruby on Rails.  It makes substantial use of Web 2.0 type features primarily using Prototype which is a Ruby friendly javascript library bundled with Rails.  The sitehas (in my opinion) a wonderful design (thanks in large part to Thomas who is a superstar).  Technically it was really two applications the uBoost B2C application (which could be any web application wishing to motivate behavior and encourage loyalty) which talks through a combination of restful interfaces and iframes to the underlying uBoost Rewards and Recognition platform.  Several other customers are being developed on top of this platform and will be co-tenants with the uBoost B2C, and Weekly Reader in a software as service offering.  Perhaps there are other web frameworks out there that could provide the speed of development that we found with Ruby on Rails (Microsoft’s ASP/MVC looks promising) but it was truly amazing the development speed that we achieved despite a ton of challenges .

I got a chance to do a substantial amount of hands on development in ROR and I really fell in love with programming Ruby as a language as well as Rails as a web development framework.  Ruby was really my first dynamic language where I had gone beyond reading a book and doing a tutorial.  It changes your development workflow in ways I hadn’t considered.  I loved the fact that Rails was open source and you could look deeply at the code to see how a particular feature was implemented.  The team chided me occasionally when I would obsess about how a particular feature was done and attempt to do something in my code in a similar way (which was often overkill).

Roll forward to May/June of 2008.  Because of my previous work at Microsoft I emailed Anders Hejlsberg and Scott Wiltamuth to ask if there is anything cool going on in Microsoft Developer Division that I might be interested in working on (I live about 5 miles from Redmond on Mercer Island so the commute is a bit shorter than Honolulu).  Scott got me in touch with Drew Fletcher who is the Group Program Manager for the Visual Studio Languages team who are responsible for the .NET languages including the languages themselves, compiler technology, and editor functionality.  I had an informal meeting with Drew and, what do you know, the Visual Studio Languages Unit has a team called the “Growth Opportunities” (GO) team that is responsible for IronRuby, IronPython and emerging languages.  They needed a Lead Program Manager.  I took the position and now I am working on a truly great team with folks like John Lam (the face of IronRuby), Harry Pierson (DevHawk blogger, IronPython PM), Jimmy Schmenti (Dynamic languages PM, wrote the Silverline plugin), Tomas Matousek (most awesome IronRuby developer), Dino Viehland (most awesome IronPython developer), Jim Deville (IronRuby QA), Curt Hagenlocher (both IronPython and IronRuby developer), Jim Hugunin (Dynamic Language Runtime and IronPython Architect), Bill Chiles (Dynamic Language Runtime Program Manager) and many, many more.  It is an exciting place to work here at Microsoft, there is great energy, what we are working on feels important and revolutionary, both within Microsoft, and to the software development community as a whole. 
rem

One Trackback/Pingback

  1. RemLog on Thursday, August 7, 2008 at 11:35 am

    Back To Microsoft…

    I am back at Microsoft! In October of 2007 I left my developer role on the XML Team and headed out to…

Post a Comment

Your email is never published nor shared. Required fields are marked *
*
*