In Defense of Technology Partisanship
Posted on Jun 10, 2010
Every now and then, usually in the middle of a debate between competing
technologies such as .Net and ColdFusion or Silverlight and Flex,
someone will espouse the idea that you should choose the technology that
best fits the problem rather than our particular personal technology
preference. Generally speaking, everyone will agree as this sounds like a
perfectly reasonable ideal. However, I am writing this post to cal
"bullsh*t" to that sentiment and defend the idea that people should feel
free to stick to their guns and defend their personal technology
preferences.
You Can't Know Everything
As any developer
knows, there are practically limitless options for building any
particular project. For instance, for a standard web project I could
choose ColdFusion, PHP, .Net, Ruby, JavaServer Faces, among many others.
Even if I were building an RIA application, which is a relatively new
technology, you could choose Flex, Silverlight, JavaFX, any number of
Ajax frameworks and other options I probably am not even aware of (ok,
ok, maybe JavaFX isn't a real option...I kid). Of course, these are just
technologies for building web applications. In my opinion, there is way
too much specialization required in application development for any
person to really be an expert in more than just a few of the available
options.
How do you objectively compare your options when
evaluating a technology choice for a project? The truth is, you can't.
There are too many options and the sort of cursory research of the
various strengths of each platform that any reasonable project timeline
might allow is not enough to give anyone a fair shake. In fact, much of
your research would probably be based upon a variety of highly biased
resources and you simply don't have time to actually build worthwhile
tests on each platform...or even a few. Even if you did, what kind of
quality would your test be given your lack of knowledge and experience
in the given platform?
Go With What You Know
The truth
of the matter is that in 95% of cases any one of the technology choices
would be fully capable of getting the job done. In my personal
experience, the other 5% is filled with a variety of exceptions, some of
which are solved by using multiple technologies together (like for
instance, plugging Java or .Net into ColdFusion or even how Twitter has
fixed some of its scaling issues by building processes in Scala) or in
some cases there is a specific requirement that does in fact lead you to
a specific option or finally in some other cases the problem has no
currently available solution among the various options.
Yes, its
true that each platform has specific strengths and weaknesses, and its
good to be aware of the weaknesses of your own personal preference.
Nonetheless, unless this is specifically a blocker, even many of the
weaknesses can be overcome by a strong knowledge and familiarity with
the technology. For example, if my team decides that PHP has better
solutions for a specific requirement in our application, does our
project really benefit from re-educating our team of ColdFusion
developers in PHP and having them develop a complicated application
using their newly acquired knowledge of the language (rather than their
years of experience in ColdFusion)? To me, the answer is absolutely not.
So,
I say, defend your technology preference. Even if you are forced to
admit that technology X is better at a specific task than the technology
you are comfortable with, you can still frequently make the case that
you can compensate in speed of development (no need for re-education),
knowledge of workarounds (you are comfortable with this solution) and,
perhaps, as stated above there are ways to combine solutions ( solve a
specific piece of the puzzle using technology X but not the overall
project).
Don't Be Ignorant!
Don't misunderstand my
message. I am not saying you should not be educated and aware of the
various alternative technologies available to you. You can't be an
expert in everything but you can be knowledgeable about what's out
there. Do the research and keep up with competing technologies. If
someone makes a compelling case for an alternative, be willing to look
into it and back up your case or even acknowledge the possibility that
they may be correct. Don't make your case from a position of blind and
ignorant adherence to a choice - but feel free to be a strong informed
technology partisan!
Comments
Developers are needed for their technical expertise and I agree with you that they are attached to technology by sentiment and not by economic reasoning (which doesn't have to be money). But more economic reasoning processes are needed. For example, what's the planned product market. What are the integration risks (possible loss/cost from integrating with other technologies), performance risks(can someone perform the code task; do they understand the technolgy), or change risks (do you work in an environment that changes often, do you have a change management system). An example of this ignorance occurs often. Adobe Flex has 96%+ of the browser market share yet people use Silverlight because they come from an all Microsoft Shop. These is a reason built on sentiment not on clear and accurate metrics. If you want to reach out globally in RIA market, you just don't use microsoft. You use Adobe Flex. Another example, is PHP is better for transforming XML than XSLT. With PHP, you are not forced by the constraints of XSLT's templates and it has more functions, it does not require compilation like XSLT, and it runs on most platforms. Try telling this to an all Microsoft shop. They will respond to you with the blinders on. Now, I am great with C#, and I enjoy the language very much... It is one Microsoft's greatest accomplishments. However from being a Flex and C# developer, I see where reason breaks down and people choose on sentiment rather than what is truly the best technology for the job, and over and over again, it is from poor economic reasoning and a lack of putting together a real and accurate cost, risk, benefit analysis.
Posted By Ari Walker / Posted on 06/10/2010 at 8:10 AM
Good points Brian. I've always thought that statement of choosing the right technology often does not apply. However there are situations where this can apply. Consider a medium to large web shop that already has the resources (many developers) so that they can choose between PHP, Ruby or CF.
But if you are dealing with a company that has its own IT staff, chances are they are already committed to one language/platform and are not going to retrain as you said.
I would actually like to see something that fleshes out the "right technology" statement and see an application where Technology X is clearly better than Tech Y. Not based on the skill set of the developers or on previous platform investment, just based on the needs of the software to be built. Like you said, I would believe that most mainstream languages could get the job done, even if they have to leverage some other technologies to do so.
Posted By Matt W / Posted on 06/10/2010 at 8:49 AM
@ari - thanks for the comment. I see your point however in the case of choosing Silverlight because you're a Microsoft shop. If the lack of adoption is a major factor for your application, then this could fall under the compelling case against it that would be an exception. Nonetheless, I still think its fair for said MS developers to advocate for Silverlight as their preferred option (even if I disagree with them :).
@Matt - Thanks. I think most shops don't have that widespread level of experiences with differing technologies on their team. Their may be an individual who is an exception but that's even rare in my experience. However, that being said, I would expect a consulting company I might hire should have a more wide ranging level of experience with competing technologies.
Posted By Brian Rinaldi / Posted on 06/10/2010 at 9:01 AM
Thanks Brian. This is a great topic few people address.
Actually, I believe there are 2 important perspectives that need to be reconciled so that an optimal decision can be made. Most of us come from the perspective of being a developer, and from that perspective, technology partisanship is chosen because it gives us job security and a feeling of comfort when we advocate what we are familiar with. However from the perspective of a business owner, I want what will give me the best outcome when measuring the costs, risks, and benefits of choosing the appropriate technology within the scope of the business requirements. Now someone being technology minded and having a background with economics and forecasting can look at technology in that light. However, as many of us know, business decision makers are often clueless when it comes to measuring scalability, interoperability, feasability, and identifying risks in writing code, so partisanship becomes the norm. Though, I think it is good for us to look at what metrics we are measuring and what will suffice. For example, the language has to be object oriented if we are going for scalability. Also, ambiguous languages like Perl don't scale well either. Another metric is TCO. Once Microsoft hooks you into using their technology, they dangle carrots and try to get you on a continual payment into their system. This where us developers can shine by putting together metrics so that we can make effective decisions where our leaders fail.
Posted By Ari Walker / Posted on 06/10/2010 at 11:35 AM
I think another aspect of this is that your skill set and choice of tools has to address the interests of your target market/demographic/user base. Choosing Silverlight just because you are a Microsoft shop might be in your best interest as a developer, but may not address your audience's needs. If the product fails, it could quite easily be down to your choice of platform or foundation.
The client's needs must be met as well ... too often I walk into a client's office and find they have been saddled with an unusable/unsupportable solution because they don't have the infrastructure to support what their previous vendors gave them. The reason is usually that the vendor didn't factor the client into the solution or just ignored them in preference to their own skill set.
I faced this a few years ago when a client wanted a website integrated with SharePoint. Doing this via ColdFusion simply wasn't economical/feasible at the time, so I was left with the choice of learning to develop in .NET or referring the client to another company.
Posted By Grant Shepert / Posted on 06/11/2010 at 11:21 AM
Brian,
I'm a big fan of choosing the technology right for the job.
Your "95%" number seems like something you made up while ignoring the full scope of software development.
If you're trying to say PHP, ColdFusion, and Ruby are "Close Enough" to each other that the choice doesn't matter, I'd agree.
But, if I were to build a device driver for a video card, any of those choices would be probably be horrible.
You need to choose the right technology for the job. I'd say the job, in this case, relates to the "class" of applications you want to build.
Sometimes we forget that not all software development is the. If you want to build a client/server app there are a bunch of comparable options for that. If you want to build a desktop application there are a lot of comparable options for that. If you want to build an embedded system there are a lot of options for that. But, you wouldn't want to choose a technology for one type of system and try to use it for another.
Posted By Jeffry Hoser / Posted on 06/12/2010 at 7:11 AM