Skip to content

2008 JVM Language Summit

Last week I attended the JVM Language Summit on the SUN campus in Santa Clara.  It was quite successful with some great sessions and great discussions outside the sessions.  I think it is great to have another conference similar to Lang.NET (which I am responsible for driving in 2009) focusing on the issues and goals of language implementers running over the JVM.  John Rose and Brian Goetz were quite magnanimous to reference Lang.NET as an inspiration for the JVM Language Summit.

Originally I planned to blog about the different sessions however I see there is already coverage that is beyond what I would likely write.  See Tim Bray’s JVM Summit Blog, or Ted Leung’s for some great coverage.

It was interesting to observe both the similarities and differences between multi-language support over the JVM and the CLR.  The JVM appears to be going after the issue at the JVM level with the new JVM bytecode InvokeDynamic.   In .NET most of the focus has been at the the language level providing a set of services, the DLR, that sit on top of the CLR.    

Friday ended up being Microsoft day with Mads Torgersen starting the day with a discussion of LINQ (as an aside I was the initial PM for LINQ to XML) with a lot of focus on LINQ expression (actually becoming statement) trees which have become a fundamental building block for dynamic language implementations on .NET.  Mads sits on the C# Design team and is responsible for the C# design notes that ultimately drives the specification.  A few sessions later Erik Meijer, sporting his loudest tie-dye tshirt to date, did a great talk (unfortunately unrecorded) on Fundamentalist Functional Programming.  He is doing the a similar presentation at JAOO this week hopefully that one will be recorded.  Later, in the day, Neal Gafter, as a new Microsoft employee, spoke about closures in the JVM.  I’m not sure everyone knew he had moved from Google to Microsoft before the talk considering the tweets I got during (or just before) the talk.

We are early in planning for Lang.NET 2009 which is tentatively scheduled for April 14-16, 2009 (I’ll blog more about this as we get more details).   I talked to Brian about the possibility of a Lang.NET session that might be something like “Update from the JVM Summit” that would give a synopsis of the important information that was provided in this JVM Language summit.  I look forward to the ongoing sharing of the Lang.NET and JVM Summit communities, it is my belief that the interaction is super valuable to both communities and will benefit language implementers, the underlying runtimes, and our customers alike.

Thanks for putting the JVM Summit together Brian, John, et al. it was a great a great success and I look forward to seeing the JVM Summit grow and prosper in the years to come.

rem

Competing Together …

I seems that many people view the term competition as a derogatory term.  To them it implies a zero sum game.  Wikipedia certainly seem to support this with their current published article on competition.  “Competition is a rivalry between individuals, groups, nations, or animals, for territory or resources. It arises whenever two or more parties strive for a goal that cannot be shared.”  I don’t share this view of competition.  If you look at the etymology of the word compete I think it is revealing:

(from Online Etymology Dictionary)

compete Look up compete at Dictionary.com
1620, from Fr. compéter “be in rivalry with,” from L.L. competere “strive in common,” in L., “to come together, agree, to be qualified,” later, “strive together,” from com- “together” + petere “to strive, seek” (see petition). Rare 17c., and regarded early 19c. as a Scottish or Amer.Eng. word.

I believe competition can and should be practiced and perceived as “striving together”.   It is not war, it is challenge.  It is more about me/us than the competitor.  This is as true in triathlon as it is in business.   In practical real world competition, quite often, both competitors “win” because there are multiple standards of success.  Competition helps us individually and collectively reach new heights and accomplish things that likely would have ever been possible if we did not have a competitor help us to a new level. 

Tomorrow I am attending the JVM Language Summit at SUN.  It is exciting to see and talk about what is being accomplished over the JVM, how we might share ideas to improve Microsoft and SUN’s offerings, and what areas these incredibly smart developers will challenge and grow us.  As a late comer to this arena, I feel remarkably lucky to benefit from the innovation that has resulted and is resulting from these two communities.

rem

Four Agreements

I was recently at a 13 day self help retreat and one of the themes of the retreat was the Four Agreements from the book, The Four Agreements: A Practical Guide to Personal Freedom (A Toltec Wisdom Book).  Years ago I read this book, but had forgotten these simple, powerful ideas.  I’ll lift out the 4 agreements themselves (from www.miguelruiz.com) but I recommend the book as a whole.

  • Be Impeccable With Your Word - Speak with integrity.  Say only what you mean. Avoid using the word to speak against yourself or to gossip about others.  Use the power of your word in the direction of truth and love.

I used to tell my daughters (and still do actually to their chagrin), “be careful what you say!, your brain will hear you.”.  Both to myself and to the people I speak to this agreement reminds me to watch my words.  It is so easy to fall into negative talk about others, the company you work for, a competitor, yourself.  We underestimate our own influence at times.  Alfred, a mentor of mine who does Champions breakfast, constantly reminds me to remember that words have “black magic”, which he usually says with some voodoo like intonation.

  • Don’t Take Anything Personally - Nothing others do is because of you.  What others do is a projection of their own reality, their own dream.  When you are immune to the opinions and actions of others, you won’t be the victim of needless suffering.

For me this is a tough one.  I can think of several projects and careers this agreement might have saved.  Another Alfred comment, “Why do you worry that other people are talking about you!?  It’s free advertising!”. 

  • Don’t Make Assumptions - Find the courage to ask questions and to express what you really want.  Communicate with others as clearly as you can to avoid misunderstandings, sadness, and drama.  With just this one agreement, you can completely transform your life.

This may be the biggest area for self improvement for me and is often related to agreement 2.  Here is a real scenario at the retreat.  We are about to go around the room and summarize what we have learned for the day and what we have gratitude for.  A guy leans over, let’s call him Stan, and says “Hey, Remy, can you keep it short this time?  I want to get out of here.”.  These seems innocuous when I recount it but at the time I took it personally and jumped to conclusions (and got angry on the inside).  I steamed, said nothing, and when my turn came around, alluded to the fact that some people wanted to get out early, and passed my turn to talk.  For the next two days I was angry at the guy.  I was sure that he didn’t like me, that he thought I talked too much and was full of myself.  I might have stayed angry longer (nursing it) but I found out that Stan had a medical situation that day and was barely able to even sit.  What if I had just asked a question right away or immediately after the session rather than making assumptions and stewing?  This was a minor situation, I can think of multiple scenarios where a small thing like this, festering, become huge.  By the way, from what I have seen, this happens to all manners of people in all stages and levels.  For myself, I am reminded to have the courage to ask questions early (or later if that’s when I recognize it) and understand what it really going on.

  • Always Do Your Best - Your best is going to change from moment to moment; it will be different when you are healthy as opposed to sick.  Under any circumstance, simply do your best, and you will avoid self-judgment, self-abuse, and regret.

toltec

 

 

 

  Nothing particularly complex here but, for me, these ideas resonate big time.  

 

 

 

 

 

Remy

Merlin Mann blogs about the Four Agreements in his 43 Folders blog.

Being a Digital Immigrant …

Earlier today I attended a talk sponsored by Microsoft Research by John Palfrey the Executive Director of the Berkman Center for Internet and Society, Harvard Law.   The talk focused primarily on the Digital Natives Project, which is a joint project between the Berkman Center for Internet and Society at Harvard and the Research Center for Information Law at the University of St. Gallen in Switzerland.   It was a fairly general, meandering talk, driven more by questions than an agenda, which in and of itself may have been a lesson by John on engaging the Digital Native crowd.

I personally am quite interested in the subject for a variety of reasons.  One, I have two daughters (nearly 18 and 15), who are clearly Digital Natives and they make it clear to me daily that something new is going on.  Two, the Ruby world is largely driven by a Digital Native community, which I enjoy immensely, but again, see that there is something new going on.  Three, I am a recovering World of Warcraft addict and in that world I interacted with many, many Digital Natives (I *think* you would call them that), and, for me, it was the first time I had ever encountered avatar based relationships and experiences that are comparable to real life equivalents.  I am not a Digital Native.  At 47 I grew up with 3 TV stations and cartoons only on Saturday.  I have migrated to the digital world and feel like I have been here long enough that to many I look and talk like a native (or at least my avatar does) however in Digital Native speak  I am a Digital Immigrant.  When I speak to my daughters, and many of the twenty-somethings that are so enthusiastic about Ruby there is a depth to their experience .. a new reality, that it is hard for those of us not born to it to understand, they are Digital Natives.

The main audience of John’s book, Born Digital, Understanding the First Generation of Digital Natives, are educators and parents however there is very useful insights for all of us, Digital Immigrants, Digital Foreigners, and Digital Natives.  Some key points I took away.

  • Not everyone born after 1980 is a Digital Native - Digital Natives are a population not a generation.  There are 6 billion people in the world and only 1 billion have computer access.   These concepts don’t apply to an entire generation.
  • There are gaps even within the Digital Natives - There is a significant gap between savvy Digital Natives and more naive Digital Natives.  John mentioned an anecdote about a scenario given to Digital Native’s to find out about the Spanish American war.  Not surprisingly they all said they would go to their favorite search engine, look through the results, and likely end up at Wikipedia.  However, there was another level of differentiation.  The “savvy” group (he didn’t use a name that is my term) recognized that Wikipedia is potentially unreliable source, use it as *a* source but not *the* source, scroll down to the list of references, and compare across multiple sources.   The “naive” group just cut and paste.  As an aside, my girls, are extremely skeptical of Wikipedia and have been taught not to use it at all (by someone, not me), which was a surprise to me.
  • Kids are not *more endangered* with Digital Access - That is not to say there isn’t danger in the digital world it is just that there is not data to show that kids are any more endangered than we were with the activities that we did on a day to day basis as kids.
  • This generation is not the “dumbest generation” - I had not heard of the book The Dumbest Generation (and John stated that he hadn’t read it) but John makes multiple points about this mindset.  First, practically every generation has issues with the following generation.  Perhaps more importantly, we make value judgements on the method of learning we are most familiar with (and benefited from), but different, is not necessarily worse (or better).  Yes, kids seem less likely than ever to read a book from beginning to end, however there are many other things that they are excelling at, using digital mediums, that could not have been conceived of in pre-digital times (see this video I talk about below as an example).  That is not to say there are not issues, but, on the whole the Digital Native milieu is not dumber.  As a coincidence I listened to a great podcast today Catching up with Charles Petzold, where he and the hosts were lamenting that the software development community has gotten away from reading books from beginning to end, and the consequent risk (or assumption of risk) that this leads to software developers not knowing the underlying fundamentals.  The Digital Native/Digital Immigrant divide is absolutely applicable to the software development community.

An absolutely cool video was shown that was created by an high school intern, Kanupriay Tewari, given the Born Digital book and the assignment to make a video on some aspect of the book.  The video is amazing, even more so that she was not particularly technical savvy person but both the sophistication of the content and the quality of the video are remarkable.  It is worth looking at: (http://www.digitalnative.org/MediaProjects/DigitalDossier/)

As I wrote this blog it became more and more clear to me that the Digital Native and the Digital Immigrant divide problem is alive and well in the software development community.   At a high level you see it between the Web 2.0 folks and the more traditional enterprise folks.  Perhaps we are a few years ahead of the corporate world as a whole since many of the more early Digital Natives (Digital Homo-Habilis? *got that from Wikipedia  Open-mouthed, straight copy*) likely tended towards a technical field like software development.   Companies providing developer software and developer experience need to pay attention here.  There is a new generation that works differently, learns differently, plays differently - and writes software differently.  If you don’t know what I mean look to the Ruby community.  Witness the success of Peepcode, GITTextmate, and the Mac in general  just to name a few things in the Ruby community that align with the insights of Born Digital.   

The game is changing, the new citizens in our world, grow up in a profoundly different set of circumstances with significantly different perspectives.   For those of us that are Digital Immigrants, our population will dwindle.  Resistance and intolerance can be short term strategies at best.   In my view, better to understand and dance with the Natives …

 

Meeting Mike Vincent

Yesterday, I had the pleasure of meeting Mike Vincent, who is on the Board of Directors of INETA (International .NET Association) which works to coordinate a huge community of .NET user groups.   INETA, is a non-profit almost entirely driven by volunteers who have an interest in sharing .NET knowledge and helping .NET user groups to be successful.

Mike was in town for an INETA board meeting, the Visual Studio Extensibility (VSX) Conference and to meet with various MS product teams to see how we could work together to improve the .NET User group experience.

Mike was meeting with Harry Pierson (IronPython PM) and Bill Chiles (Dynamic Language Runtime Lead) to discuss INETA and dynamic languages so I was lucky enough to tag along and ask some questions.

One question we asked was how important Mike saw Visual Studio Integration for the Iron languages.  We get feedback at times that it is more important to have a lightweight, quick to bring up, quick to close down, editor for script editing than full VS integration.  Others tell us, make sure that we integrate well with VS now since this is their primary code editing tool.  Mike’s response was that VS integration is “a big deal” for adoption by the mainstream .NET developer and consequently a must have.  

Mike mentioned a cool concept that INETA is embarking on around speakers.  INETA is known for its speaker’s bureau (and virtual user groups) which has been national  in scope.  They are now introducing regional speakers bureaus that will enable folks to speak regionally at smaller venues which can lead to the larger national opportunities.  Harry and I have talked about similar ideas for folks at Microsoft to start speaking at smaller venues that could lead to bigger opportunities such as Tech Ed and PDC.  Mike also mentioned that INETA is also heavily encouraging virtual presentations, recording live presentations, and having them available via the INETA website.  I wonder if there is some way Microsoft could leverage that as well, pointing customers to these presentations as they become available … hmm, a todo for me.

I asked Mike how he viewed dynamic languages in .NET.   The value he sees is that advantage of providing  more tools for the .NET developer’s toolbelt.  “Dynamic languages allow you to do some things much more easily than a static language”.  The low ceremony aspects of IronPython and IronRuby in particular help. 

Mike has special interest in a project to allow NUnit tests to be written in IronPython.   Using the low ceremony language like IronPython can make this feel very much like a DSL for testing.  We didn’t get a chance to talk about it much but I look forward to learning more about it.  Harry has some ideas for how the IronPython team might be able to help.

I asked Mike what the major issues with .NET and in his constituent user communities.   The most significant one that came to mind for him was the problem with shops remaining on older releases (many in the user groups are still using .NET 1.1).   Developers get frustrated since so many of the user groups and Microsoft talks are focused on new features (LINQ, et al) which are not yet available to them.   He recognizes the tension between customers who feel there are too many releases and pressure from other customers (and the competitive landscape) to keep innovating.  Perhaps, we strategized, Microsoft should do more to innovate around helping customers move successfully from one .NET release to the next.

It was great to meet Mike and hear about more about INETA.  It appears INETA has great momentum, with greater than 250 active user groups and over 100,000 active developers in North America, and a reach of approximately 1.2 million developers world-wide.   I look forward to working with Mike and INETA to improve the .NET user group experience as well as .NET developers in general.

Rem

Lunch with a Dynamics Languages Braintrust

One of the biggest privileges I have is the quality of people I get to hang out with here at Microsoft.  Within the Visual Studio Languages GO team and the DLR team there is a loyal group of us (actually I am a noobie) who walk down from Redmond campus to the same Chinese place multiple times during the work week.  Each time there is a subset of us that make it but almost always there is enough for a quorum and we head on down. There is not a single one of these lunches that goes by that I don’t get new insights, a few new facts, a good laugh, and a few blog ideas.  Not just technical stuff.  A big subject of today’s lunch was Dino’s trip to Burning Man (wow, I want to go), but we also covered things like the economics of persistent data stores in the cloud, changes in the way Microsoft views Open Source, and Tina Fey’s portrayal of Sarah Palin.  It reminds me that much of our most important activities and learning are NOT in meeting rooms but are at lunches and in hallways. 

I took some pictures around the table at lunch today.  Ok, they don’t look like a brain trust with their mouths full but believe me these guys are the sh*t.

PIC-0008

Curt (IronCurt, Dev on IronPython and IronRuby), John (IronRuby PM), and Tomas (Lead Dev on IronRuby).

PIC-0009

Jim (Tester IronRuby), Dino (Lead Dev on IronPython), and Harry (PM for IronPython)

PIC-0010

Jimmy (PM on all sorts of IronRuby and IronPython stuff), Bill (PM for DLR), and me.

I can think of many times in my career when I would not attend these types of lunches.  Too much work to do.  Funny thing, I think I got more accomplished at lunch today than two of my scheduled meetings.

rem

Getting to "Yea, baby"

Years back IBM sent me to a 3 week intensive consulting course in Palisades, NY and in that class there was a 3 day even more intensive mini-course on negotiation given by the Harvard Negotiation Project (HNP).  These are the guys behind the book Getting to Yes, Getting Past No, Beyond Reason, etc.  I remember sitting looking at the 3 week calendar and seeing a 3 day block for this and thinking HOW can we spend 3 days on negotiation, this is really going to blow.  However, shockingly, it turned out to be one the most insightful and applicable courses I have ever done.  For one, (ok, you know this) we are negotiating constantly, with our families, with our friends, with our partners, with our colleagues, with our bosses.  Where to have lunch, who picks up the kids, our life and relationships involve a constant stream of negotiations.  Second, we tend to think of negotiation all wrong.  We think of winning and losing, of getting our position accepted, and, this approach to negotiation causes all kinds of problems.  Not only does it really mess with your relationships, it is inefficient and doesn’t even lead to the optimal solution that you pre-ordained going in to the "negotiation".

Maybe I can save you some of the gazillions of dollars IBM must have spent on my seminar since the basic idea idea is really straight forward.  Overall you can call it a non-positional approach to negotiation.   In classic positional negotiation you go into the negotiation with a position, which will be countered with an alternative position, with jockeying back and forth until a compromise position is arrived at.  This is like the classic bartering with a vendor who marks their goods high, you state a price, the vendor responds with a price, and so forth until you arrive at a position.  Generally, this leads to a sub-optimal conclusion for both parties (or at best a WIN/LOSE situation which I posit is a sub-optimal solution).  Contrast this with non-positional negotiation.  With this approach, rather than focusing on positions, your focus is on what the underlying issues you are trying to address by the negotiation, your interests.  In the vendor negotiation I just mentioned you might think, ok, I want the highest quality, best price, shipped home, one of these colors, etc.  Then, rather than starting with a position you strive to learn what the other parties’ interests are and then work together to find the agreement that optimizes each of your set of interests.  This doesn’t mean compromising.  Each party has a BATNA (whether stated or not) which stands for Best Approach to a Negotiated Agreement.  It only makes sense to take an option that is better than your BATNA, otherwise you either keep at generating or options or step out of the negotiation. 

Getting to Yes, and the other HNP books provide strategies for developing alternatives, surfacing alternatives, testing options for legitimacy and value, but the most important thing is the understanding that that your focus is on solving a problem and to understand when you are in solution space versus problem space.  In problem space you’re mind set is on understanding the underlying issues.  In solution space you are generating options, testing options against each other and ultimately choosing an option is the overall best for both parties (or many in a multi-party negotiation).

In software development this is analogous to the stages of analysis versus design.  In the analysis phase you are working to deeply understand the problem and you are consciously being careful not to venture too far into design until you understand the problem.  Similar to the "agile software development" approach, in negotiation, you can slide between these mindsets fluidly, the key is to differentiate between when you are better defining the problem (for example, discovering an interest of your negotiating partner or fleshing out an option) or concluding an option is the optimal agreement/solution.  As I matter of fact, it isn’t just analogous, it is exactly the same thing.  A software system is the result of a negotiation, a set of requirements from various parties (interests), a set of design decisions (options), and the final system represents the solution (agreement).

Most of the 3 day HNP course I took involved interactive, videoed, role play negotiations with the lawyers pushing every button they could find to try to get you out of non-positional negotiation and into positional negotiation.  Of course there are wide variety of ways to sabotage a negotiation but the main strategy on the student’s part was continuously steer the discussion towards discovering the interests of each party, generating options, comparing options, and agreeing on a solution.  When a position was proposed the trick was to acknowledge the position as a possible option and use it as a tool for discovering the underlying interests of the other party.  For example, someone might say to you, I will give you $25 for that shirt (a position).  Rather than responding with a counter position, $10, you might say, how did you come up with $25?  Which might lead to an explanation of how much money that person has in their pocket, or how much he or she spent for a similar shirt.   No matter how belligerent, or quiet, or scary, or passive aggressive, your goal is to move the discussion back to understanding the underlying problem and, ideally together, finding a solution that meets both party’s needs.

So your wife says to you.  "I want you to make dinner tonight", in a frustrated tone.  Where is she?  Problem space or solution space?  Solution space, of course, she has started a negotiation (of a type) kicking it off with a position.  You might choose to say yes right way, start an argument responding to her tone, or you might instead try to move the discussion to problem space.  This is where the creativity comes in.  One approach, might be something like "Ok. That could make sense (making her a position a legitimate option).  What makes you say that?".  You might find that she doesn’t think you are pitching in enough, or that she will be late on Thursdays, or a whole variety of possibilities.  If you had immediately just said "Yes" you might not have known this and  left a lot of value on the table.  Perhaps it isn’t dinner tonight that is the solution at all, it is picking up the kids more often, or working together on weekends to make meals for the week, or .. who knows?  This is another premise of the HNP approach, in most positional negotiations, there is value left on the table.  By taking this approach you can actually create super optimal (I made that term up) agreements which not only optimizes the interests each party hoped to achieve in the negotiation but even interests unknown or seemingly beyond the boundaries of the negotiation.  In large part this is because this negotiation style is about building stronger relationships based on common understanding and mutual problem solving.  If you have a good relationship with some that you are effectively problem solving with is it a surprise that you might find opportunities well beyond the original negotiation?

There are a lot of similarities between these concepts and Stephen Covey’s Habit 4, Win Win or No Deal,  of the 7 Habits of Highly Effective People.  In Getting to Yes speak this means, even if the party you are negotiating with would take an option that is worse then their BATNA, do not take that agreement yourself!  Or in other words invoke the mutual BATNA philosophy - if there is not an option better than both of our BATNAs then there is no agreement.  Win/Lose is an illusion.

If you combine these two ideas get a tremendous set of professional and personal tools for dealing with everyday life from personal to professional, interpersonal to inter-department, inter-company, even inter-cultural relations.   Give it a try.  Believe me, you will find lots of opportunities.

Rem

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

Sapir-Whorf Revisited

A friend from Microsoft reminded me of a post I did on my MSDN blog when I was previously at Microsoft on the Sapir-Whorf hypothesis (roughly, the hypothesis that your language shapes your view of reality) and its application to programming languages.  The blog was: The Sapir-Whorf hypothesis. Does program language “centricity” limit you?  At that time (April 2005) I was just making the transition from Java to C#, learning some ML in the CS master’s program at Depaul, and, getting influenced by a few quite a bit by a few Ph.D. friends down the hall at Microsoft (in particular Erik Meier and Ralf Lammel).   I had nearly forgotten the post but looking back on it I guess I was fated to end up in a group focused on implementing programming languages such as Ruby and Python (and perhaps other emerging languages over time).

By the way, it appears that Sapir-Whorf has more acceptance in programming languages and methodologies than it does in psycho-linguists circles (here, and here) at least at the extreme end of the  language determinism spectrum.

On another note Sapir-Whorf is being invoked regularly in relation to Behavior Driven Development (BDD) as implemented in RSpec the popular ruby testing framework.  BDD is heralded as an evolution of Test Driven Development (TDD to get to the promised land of TDD where tests become executable specifications.    Developers move from using the verbiage of “test” and “assert” to words like “describe” and “should” using the business domain language as much as possible.  There are many articles and blogs  (just web search ‘rspec sapir-worf’) linking RSpec to the Sapir-Whorf hypothesis (many of them pretty in a pretty cavalier manner) .  The general idea appears to be that because BDD changes the words for writing  “tests” (whoops, I used the wrong word there), I mean “specifications”, which in turn influences the developer’s to think differently about tests.   I generally agree with the conclusion, we are using a variation of RSpec to test IronRuby completion and we think of it very much like a language specification,  however I am not so sure that Sapir-Whorf is the right theory to support this change in perception.  I am no expert whatsoever but it seems that the language determinism point of Sapir-Whorf is about an entire language shaping an individual’s view of reality based on the inventory of words available to express a concept.  It seems like BDD’s effectiveness is orthogonal to Sapir-Whorf since the developer is already likely to know and understand the concept of “test” and “assert”.  RSpec is really influencing a mindset by introducing and enforcing words that will invoke a “set of assumptions, methods, or notations” that create a “powerful incentive” to “adopt or accept” a set of “behaviours, choices, or tools” (paraphrase of the wikipedia entry for mindset).   I like the response that John Roth gave here along these lines.  This is all just quibbling though.  RSpec is a most excellent step forward.

rem