In today's fast growing software industry it’s evident that more technologies are being developed than developers are actually able to understand and leverage. Still we are constantly asking for multiple choices and competitive alternatives to drive the innovation. But when it comes to actually investing in a technology or product, we want as few options as possible.

This post is a personal observation which has emerged after some years of trying to guide Swedish developers and companies in the right direction on the Microsoft platform. It’s also part of a duoblog initiative which was introduced to me by Chris Hedgate in June. I’ve asked Patrik Löwendahl to duoblog this title with me since I’m both very interested in his opinions in the matter but also since I respect his competence and guidance when it comes to make choices on the Microsoft stack of technologies. Please read Patrik’s take on “Everyboday wants choices, but nobody wants to make a choice” on his blog!

Is Microsoft to blame on software complexity?
When I listened to the interesting podcast “Panel: Is Software Development Too Complex” which was recorded by the DotNetRocks-crew live at DevLink in Nashville Tennessee, I was a bit surprised by some of the opinions from the audience. Someone actually considered Microsoft to be the source of creating complexity since we recommend a n-tier architecture pattern and constantly making starter-kits and demonstrations way too complex. I found this to be very interesting since I usually get comments the other way around, making demonstrations way to simple, not being realistic and “real-world-usable”. I do however understand the need for both real-world recommendations as well as “do-it-yourself”-demonstrations to get people started, unfortunately we also have limited time, and unfortunately no more than 26 hours each day (yep that’s a benefit you get when signing up for Microsoft, 2 more hours for work each day :) ). But doing demonstrations is one thing, creating technologies and frameworks is another, and I personally believe that we (Microsoft) are absolutely working in the right direction in opening up our development process for external viewers, both in source code and in publishing betas and CTP’s (Community Technology Previews) more often than earlier. All to make it available and possible for the community to comment upon and help us write better software that in the long run helps you create great products.

There’s no silverbullet
Microsoft will keep innovating in the .NET Framework and creating new frameworks and foundations on top of the Common Language Runtime, have no fear! This also means that in the future, some of today's technologies will be replaced by something new. How companies adopt these news will be impacted by how quickly developers and architects can get up to speed on the differences, strengths and weaknesses each innovation brings.

Make your choice based on competence, not ignorance 
I totally understand that developing software is a time critical process and that investigating new technologies competes with the usual activities such as designing, coding and testing, but what if we actually considered “find new technologies or ways” as an activity as well, would it be beneficial? Possibly, but we would also have to include time to educate all of the team-members on the choices we’ve made. Hence, people with experience, passion and an open mind is crucial in this process. They can take lead on the investigation, prioritize and recommend the correct way to proceed. What’s interesting for me, as I see it, is that this process is not related to any single project but instead an ongoing process that could include passionate people from several teams, coming together and making a “suggested path” for projects to come.

If you’re not passionate, you’re not a professional!
But what about passion? Can we be professional in our employment as software developers without being passionate about the art of writing code. In my opinion, yes, but it does take some effort outside of the ordinary daily tasks to keep being updated and relevant to the market. I usually hear, and have myself started to leverage the term “pragmatic” for a person who’s not passionate about developing software. I wonder if these lines could be a correct definition:

Passionate developers investigate new technologies to find if it could provide value to them. Pragmatic developers needs to understand the value a technology could provide before they investigate it.

Passion for technology, passion for your ongoing growth, passion for helping others succeed, passion for innovation and new stuff, all of these are great values or strengths, which will help you, your team and company grow and compete. You don’t have to be passionate, but it could possibly lead to being replaced by someone more passionate than yourselves when the company is either trimming the work-force or trying to identify key people for the coolest or most important projects. I think that Walt Disney Company has a great title for the passionate people that also are very professional in their career: Imagineers

Conclusion, summary, next steps
For companies and organizations, my recommendation is to create some sort of “guidance team” that meets regularly and discusses and evaluates new technologies. I would personally love to regularly meet these teams and provide guidance and recommendations myself, especially if I knew that they had the mandate to actually make a difference in the long run. Call them the “internal imagineers”… :)

For individuals, I absolutely recommend to invest in educating yourself in new technologies, languages, frameworks and products. There are so many alternatives out there, and forums and user-groups with lots of passionate people that are willing to provide help and guidance, use your ears often and learn how to listen!

By learning new stuff you will be better at making choices, and also remember to learn from you losses! Or as Dahli Lama said: When you lose, don’t lose the lesson!

What do you think?