Next Stop: SpringSource


I’m very excited to be able to announce that as of this past Monday July 12th, 2010 I have officially begun work in my new position as a Senior Software Engineer with SpringSource.  This opportunity represents the next (interesting) step in my software development career and I’m looking very forward to the kinds of things this position will permit me to focus upon as time progresses and I’m able to grow into the role.

Plus ça change, plus c’est la même chose

(for the French-challenged, that’s “The more things change the more they stay the same”)

In this new role, I will be ramping up to act as both the Technical Lead and the Community Evangelist for the Spring .NET Application Framework project.

As Technical Lead for the project, my role is expected to primarily consist of a combination of technical management and software development tasks including…

  • Designing, developing, testing, and documenting Spring .NET features
  • Coordinating development activities with external (non-SpringSource) committers
  • Managing the release process
  • Triaging and Fixing bugs

As Community Evangelist for the project, my role is expected to focus on the following areas…

  • Promoting the Spring.NET Framework to .NET developers in conferences, blogs, twitter, etc.
  • Interacting with users in the Spring.NET forums

Those of you who know me well will probably recognize some significant similarity between this set of responsibilities and the kinds of things that I already do in connection with several other Open Source Software projects in the .NET ecosystem.  This is an important aspect of what makes me excited about this opportunity: in a weird – and entirely accidental — way my activities in the .NET OSS community have been a sort of ‘training’ for this very position (or certainly one very much like it!).

Any time you can get paid to do something you love to do anyway you’ve pretty much got a ‘win’ on your hands.  I already had some of that in re: designing and developing software for a living, but being able to now add to that the kinds of activities in the OSS world that I previously had to perform in my spare (off-hours) time has to be considered an even bigger ‘win’ for me – and hopefully for SpringSource and the Spring .NET user community at large!

What a Long, Strange Trip its Been…

“We now rejoin our intrepid hero where we last left him…”

Seriously though, this new position is the next step for me in a journey that really began innocently enough nearly two full years ago with the combination of two events: the recording and launch of my Summer of NHibernate screencast series in June of 2008 and my co-founding (with several others) of the NYC ALT.NET User Group in August of 2008.

The Summer of NHibernate screencasts inadvertently started me down a path of significantly increased visibility as a member of arguably one of the most highly visible OSS projects in the .NET ecosystem – certainly one with the most vocal contributors 🙂  This had the (turns out incredibly valuable) effect of increasing my ‘street cred’ in the .NET OSS community.  The number of people I meet at CodeCamps and other similar gatherings of .NET developers that approach me and offer “I just wanted to say thanks for that great video series – it enabled me to learn NH in a fraction of the time I would have needed otherwise!” is truly the best compliment I could ever ask for in return for that effort.

The co-founding of the NYC ALT.NET User Group turned out to be important for two reasons: 1) one of the other co-founders of the group whom I met through this process was Mark Pollack, the original author of the Spring .NET Framework (and now my co-worker here at SpringSource) and 2) the local Microsoft Developer and Platform Evangelism team’s involvement in helping to provide space and other logistics support for the user group began my introduction and involvement in the rest of the local NYC area .NET development community.

This series of relationships more recently resulted in my being Chairperson of the most-recent NYC CodeCamp event in March of this year – which in turn put me on a first-name basis with all kinds of speakers, presenters, attendees, and others in the local community and beyond.  And its though this series of ever-expanding professional relationships that much of my opportunity to do a variety of other public speaking engagements has progressed.

Looking back on all this, one might be tempted to conclude that it was all part of some grand plan to end up being offered an actual job that pays me to do all this that I already do on a volunteer basis, but that’s simply not the case.  This present opportunity for me is merely the result of some strange confluence of events all happening to coincide at about the same time – including but not limited to my interest in leaving my last position with Skiff as it was acquired by NewsCorp and my not really being too excited about the opportunity to work for Rupert Murdock, et. al. in a journalism industry with a somewhat questionable future.

The Essence of Spring .NET

How do I see Spring .NET?  Well, there’s always the official brief of the Framework…

Led and sustained by SpringSource, a division of VMware, Spring .NET is an open source application framework that makes building  enterprise .NET applications easier.  

Providing components based on proven design patterns that can be integrated into all tiers of your application architecture, Spring helps increase development productivity and improve application quality and performance.

…but from my perspective the important part of the Spring.NET Framework is found on the overview page of the project website:

The design of Spring .NET is based on the Java version of the Spring Framework, which has shown real-world benefits and is used in thousands of enterprise applications world wide.  Spring .NET is not a quick port from the Java version, but rather a ‘spiritual port’ based on following proven architectural and design patterns in that are not tied to a particular platform.

Why Should I Care About Spring .NET?

Its a fact of history that Java preceded the .NET Framework’s development.  Because of this (and many other factors too of course), the Java developer community has in many ways had a sort of ‘head-start’ on the .NET developer community.

This isn’t a post about so-called ‘Java-envy’ from the perspective of a .NET developer – I’ve known (and worked with) enough poor-quality Java developers to know that there’s a significant amount of grass-is-always-greener going on when most .NET developers look to the Java community.  Having spent some time there, I can assure you that its not all ‘roses’ over there in Java-land – its got its own warts too 🙂

But with their frameworks, platforms, and general approach to the practices of software development, the Java developer community has tread on ahead further down the path of evolution than that of the .NET ecosystem in many ways.  We can debate the veracity of some of their conclusions, but that they are battle-tested and the result of a lot of real-world stress-testing is beyond contention.  Some of the issues with which the .NET developer ecosystem is only just now starting to grapple in significant numbers, the broader Java community has long-since settled and addressed. 

We in .NET often see the physical manifestation of this in the so called “N* projects” that began their lives as (often direct) ports of Java projects on the JVM into the C# language on the CLR (NUnit, NHibernate, NBehave, NSpec, etc., etc., etc. – and, yes, Spring .NET too, despite the fact that its not named “NSpring” – thank God <g>).

Even though many of these began as ‘pure’ language-porting efforts, over time these frameworks began to grow and diverge from their ‘Java’ roots to express themselves more as .NET projects, adopting the memes of their new environment – often mostly in the form of .NET language syntax for their APIs (lambdas being the most visible recent example of this but also in more subtle ways) but also to add features and capabilities not found in their Java ‘parent’ projects that were more appropriate the .NET platform.

But at their core, most of these such projects still share significant commonalities with their Java roots – and that means that in important ways they are a kind of codification of the results of the early struggles that the Java community had with these same software development issues.  I see these frameworks, tools, and other artifacts as a kind of “trail of bread crumbs” marking where the Java community has been and the conclusions gleaned from some hard-learned lessons that they picked up along the way.

In the Java ecosystem, the Spring Framework is in many ways the defacto development stack on top of the core Java libraries on the JVM.  There are a good number of business and historical reasons why that is the case, but many of the reasons are also technical and architectural: the Java community has learned some painful lessons from many past missteps and much of the results of those lessons are to be found codified in the design of the Spring Framework for Java.

Borrowing heavily from the concepts and patterns in the Spring Framework for Java, Spring .NET is in many ways the best embodiment of the lessons learned by the Java community in the context of Enterprise Systems Development – and as such, one of the best ways for a .NET enterprise developer to acquire some of the benefit of those very same lessons (without having to relearn them for themselves in quite the same — usually painful — way!).

What’s in the Future for Spring .NET?

Its clear from history that not all of the challenges in the Enterprise Systems development space have been solved by “the Java guys” (or even by “the .NET guys”) by a long-shot.  There’s plenty more to solve, patterns to uncover, and areas to explore, both in Enterprise software development and elsewhere.

And its clear to me that the .NET ecosystem has a lot of valuable experiences to offer other software development communities in return.  We’re looking to the Spring .NET Framework project to be the vehicle by which such experiences and patterns are captured, codified, and made available to others for their easy and efficient consumption in subsequent software development projects – making it just as easy for developers to leverage the collective lessons-learned by others in their own software development projects.

Want More Info?

What is this drivel?  I want specifics, damn it! 🙂

There will be much more to follow but as I’m just five days into the job (and still figuring out the shortest path from my desk to the coffee machine!) its a bit early for me to be publicly communicating a project roadmap, release milestones, or anything else ‘official-sounding’, but stay tuned for more coherent announcements, activity, and details about both short and long-term plans for Spring .NET.

You can watch my blog here for more info, but I would encourage you to visit the site itself for ‘official announcements’.

And for more up-to-the-minute micro-announcements and interesting Spring .NET news, follow our new SpringForNet account on Twitter (@SpringForNet).

I’d love to hear from you about opinions, features, functions, focus, and more – let the conversation begin!