Category Archives: Uncategorized

Choosing the right technology.

This has come up for me multiple times in my career, and recently I was messing with building a web application and was trying to figure out what Web Framework I should use to build it. This can be a very divisive topic, everybody has their favorite something. The technology they think is really top notch and should be used all the time. I have my favorite technologies, and they have changed over the years. But I also love learning new things, which sometimes can be a problem when making decisions like this. I would say that no matter whether developing is just a hobby to you and you are messing around, or you are a Software Architect at a Fortune 500 company choosing technology that could have billion dollar impact, the decision to make is a similar one, just with different implications. Obviously if you are doing it for fun, the implications are simply at worst a waste of time. If you are an Architect at really any sized company the worst case can be really bad. So how do you choose a technology?

Throw out preconceived ideas

This is the most important first step. Leave your ego, or your preferences by the wayside. If you had a bad experience with Postgresql years ago, don’t let this get in the way of evaluating the software critically and fairly. Node.js is having a huge impact on the web world, and Javascript is still as massive as it ever was, much to the chagrin of backend developers. Sometimes something like Node.js is a useful tool. We love to tout our favorite technology, but rather listen to communities. Some are very vocal, others are smaller, but if you filter out the passion you will get a great understanding from them.

Everything is a tool in the toolbox

Every bit of technology built has a use, and it is simply a tool that a developer can use to achieve their end goal. No one has ever complained that people don’t use wrenches enough and should rather use screwdrivers. It is a stupid argument because people understand the uses of each tool and use them accordingly. Of course software is infinitely more complex in it’s usage and defining which is the best can take a lot longer, but if you look at them simply as tool’s you can focus on getting to that answer instead of just choosing the tool you want.

Developer resources is a factor

This is an interesting one, because it can go both first. Firstly if all your developers have spent their career in .NET and you are thinking of switching to Java then you have to evaluated the pro’s and con’s of that. Let’s for arguments sake say that Java fits perfectly in what you are trying to do. Is the man hours that will be inevitably be used in learning a new language be worth the payoff? Sometimes that answer is yes, other times it is no, and sometimes it is in between. But it definitely should be taken into account.

Understand your requirements

Often times we make decisions based on the technology without actually understanding the requirements. This will cause us to focus on what we want, rather than what we need. Kind of like the concept that if you have a hammer everything looks like a nail. And sometimes you can get that to work, but as developers I think we have all hated those guys when we find ourselves in control of code that was built because the original developer loved technology X.

Understand your restrictions

I think this is just as important as the requirements. It is important to understand what is needed. I recently watched a great talk on the comparison between Play and Node.js as a web application framework to use. I thought it was a well balanced talk and one of the points was related to time. Basically Scala is not an easy language to learn, and the idea was to build out a working something in 2 weeks then Node.js probably would be a better choice. Some backend developers may balk at the suggestion of using javascript as a backend web server, but he had a point. Scala is a difficult language to figure out sometimes, whereas Node.js seems like it is dead simple to get things going. This may have implications down the line but if you have a hard requirement like 2 weeks, then it probably would be better to use Node.js.

Stay away from Flame wars

Linux vs Windows (vs Mac), Java vs .Net, C++ vs Java, MySQL vs Postgresql vs SQL Server, etc. etc. etc. Everyone gets burnt in a flame war and rarely does it produce anything productive. They are all tools, if someone is developing on Windows with .Net and you are “true” C developer on linux then that is fine. Just be awesomely thankful that both of you have the intelligence and joy or developing software.

Mac’s vs PC

I will comment slightly on this war because for most of my career I coded on a Linux PC (spent a little time in Visual Studio, but not a lot) and started to code on a Mac. You can read a little about it in this post. I switched reluctantly as I had always been extremely negative about Macs, so much so that now both my younger brothers have a certain hatred to all things Apple. I know can’t imagine not developing on my Mac, and I went through a time when I was trying to convince everyone that Mac’s where the greatest thing since sliced bread for developers….all those other people using Macs were posers though and didn’t even realize that they had the power of a shell at their fingertips. Anyway I have realized the stupidity of that minor stage, because in the end it is simply a tool. And if I had to start my own company I would not buy Macs, not because I don’t think they are amazing machines, but because I would imagine one of my restrictions would be money and a Linux PC is still damn good. Anyway all that to say, don’t think you are better because you chose technology A. Remember it would pretty much be like laughing at someone because they were using a hammer when you had this awesome screwdriver.