Duoblog: Everybody wants choices, but nobody wants to make a choice

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?

Comments

  • Anonymous
    October 08, 2009
    I really like the definition of Passionate vs. Pragmatic developers. I also agree that it is important to note that not every developer needs to be passionate. In fact, if everyone was as passionate about new technologies as I am I reccon that nothing would ever get done. We would all be looking for new ways of doing the things we should do instead of actually doing them..

  • Anonymous
    October 08, 2009
    I would argue that even if you are pragmatic and not passionate. You should take the time to figure out what value a technology can give you, you don't have to invest a lot of time in learning it up front, but knowing about most choices and knowing what each choice brings to the table should be a basic part of our job description.

  • Anonymous
    October 08, 2009
    Thanks for your comments. Maybe pragmatic should be replaced with practical, but the reasoning still remains the same.

  • Anonymous
    October 08, 2009
    Do you mean that a passionate developer aren't practical ;) Jokes aside, I understand exactly what you mean. But pragmatic might have a double meaning here. The pragmatic programmer: http://www.pragprog.com/titles/tpp/the-pragmatic-programmer

  • Anonymous
    October 11, 2009
    The comment has been removed

  • Anonymous
    October 11, 2009
    "SQL for example has been quite stable for a long time." So have C, Fortran and Cobol. Stability is not a guarantee for being the "end all be all" of anything. It just means that for the scenarios it was built it fulfills most of the needs. There has been introduction of new things in T-SQL as well, like spatial data and xml column types. New things that has been requested by business. But the main point is that there is also other types of database engines around, that isn't using SQL (or at least not it's relational variation). Like column databases or object databases. Should you not learn about these technologies and figure out when they are the best match, because SQL has been "stable"?

  • Anonymous
    October 11, 2009
    Of course software technology must evolve at some pace and system developers must learn the new features and possibilites. My question is simply about he speed and size of the changes. MS has the position to redefine software development many times a year. Would that be a good thing to do?

  • Anonymous
    October 18, 2009
    Imho this "problem" resembles alot to a market economy. We love to have a choice, but in the end, most people tend to buy stuff they've seen in an flashy add (even though few would admit it) because that is what's on top of mind at the moment of purchase. Perhaps an anology even could be drawn to the possibility for everyone (at least in Sweden) to choose which company that delivers their electricity. There are heaps of companies to choose from and if you don't feel like or don't have time to put your time and effort into evaluating all you choices find the perfect one for you many people just pick a random one and sticks to that. Luckily there is help to be found on the Internet from price comparison sites. My point is, when do we get the "pricerunner" or "prisjakt" for dev technologies? Imagine just pulling some levers and out pops some proposals on what technology to base you system on ;-) Jokes aside... perhaps what is needed is needed is just an even better overview whats out there to make the choice easier.