The Magic Formula to choosing the right piece of software


Throughout my career software has come and gone and trends flare up and disappear like a shadow into the night and before you know it, there's a new shiny toy sitting on your desktop. That's really what makes our industry exciting and why more and more people are getting into it every day. With that though, there is always the question of which horse do I hitch up to? Do I latch on to the cool ReactJS framework or stick with Angular? Do I move to DapperORM, NHibernate, EFx, Telerik ORM etc etc etc.

The options seems endless! and most of the time they are... which is great! but also kinda sucks; how do I pick one over the other?! How do I go to my boss and get them to invest thousands of hours and dollars into a new piece of technology. Well, I've been doing this a long time, and there really is no magic formula (gotcha!) I can recall a blog post by  Chris Aitchison  titled: You are NOT a Software Engineer! that really resonated with me. The argument is that we are more like gardeners in a sense that we need just the right environment ( and even a little horse-manure ) to get the product we want. furthermore, you never really know 'exactly' what you're going to end up with; it could be riddled with bugs or could yield a beautiful crop at the end.

But, I didn't write this entry to try and capture you with some click-bait, but to highlight the problem that a lot of us deal with everyday; how can I pick between two pieces of intangible products that may or may not be useful for me? So, I'm going to divulge my method in part to get some critique and in part to help those who have to make these decisions themselves and might need some guidance.

I will be making the assumption this is for a business and not a project or startup. This is because some of the variables you will factor in will be tied to cost and maintainability. I will highlight these when they come up.

 To start off, you need to define what your variables are for your equations; these will be evaluated by you and plugged into the equation in the end. I like to start off with these:

  • Age of the tech: Is this something that's in beta? Is it mature? Have the bugs been stomped out?
  • Owner of said tech: Is it one contributor? Is it an active open source product?
  • Community/Support: When it breaks, who can help? Do I need to pay? Are there books etc?
  • Performance: Is it fast? Is it slow? 
  • Feature breadth: Does it do one thing well or a bunch of stuff just "OK"?
  • Is it widely used: Are people actively using this product?

These are a handful of metrics you can use to determine how to rank a piece of technology. Some of these are hard numbers, and others are not. You can take a best guess at ranking each of them but make sure you are objective in each case. 

Lets take an example, lets say you want to pick the next great piece of tech to help you build your latest awesome front end application. The buzz is all about React and Angular, but you have heard about Ext JS because your last 2 jobs used it. Lets see how they stack up.

First thing i like to do is check google trends to help me figure out a few of my metrics.. This is what comes up with a quick trend search:



  • Age of the tech: Looking at this chart, looks like ExtJS beats the other two by a few years (2007 vs 2012 and 2014ish). Of course, you can get the exact numbers, but we dont really care. So the results: ExtJS scores 3, Angular scores 2 and React gets 1
  • Owner of tech: All of these are backed by some big guys in the industry; Google, Facebook and Sencha. This is where things get tricky: If you are building an enterprise application, Sencha might fare better than Google and definitely better than Facebook, but if you are building something more social etc, you may reorder those. So the results: ExtJS 3, Angular 2.5, React 1
  • Community/Support: This is another tricky one, older products tend to have more documentation and examples than new ones, but newer products with proper backing can catch up pretty quick. Looking at these three, they all have great documentation but Angular has a lot more in terms of quick searches. Results: Angular 3, ExtJS 2, React 2
  • Performance: You can get technical here, but for the sake of this blog, I will mark them all as 0
  • Feature Breadth: To do this correctly you need to list out all the features that they have against each other and rank them accordingly. Furthermore, just having features doesn't mean that its a useful feature; try to indicate what features you need and which of these has them. For the sake of this example, they all score equal marks of 1
  • Is it widely used: This is also something you can get from the trend graph: we see that 5 years ago ExtJS was the 800 pound gorilla (maybe because nothing was there to compete) but that number peaked in 2009-2010 and has been on the decline ever since. On the other hand, Angular churn is just skyrocketing at a slightly more rapid rate than React. So, looking at the projection of the lines into the future, you can clearly see who, for the foreseeable future, is more talked about. So the results are: Angular 5, React 2 ExtJS 0.5 (I counted the lines for this one)

Ok, so far we have the following scores:
ExtJS = 3+3+2+0+1+0.5 = 9.5
Angular = 2+2.5+3+0+1+5 = 13.5
React  = 1+1+2+0+1+2 = 7


Now, does that make a clear winner? No, software isn't quite that simple. There are also intangibles in the mix; things that can differ from situation to situation. Lets say you are someone who will need to hire people to work on this tech. Well, you would need to look at trends of candidates and how many of them have that tech on their resumes. You may also want to consider how attractive is that tech to a potential employee; in our example, using a new attractive framework is probably more attractive than an older one on the decline.
Finally, the last thing I throw in the mix is a multiplier; so, in my specific scenario, I value my last point more than anything else, (Is it widely used). So what I would do is multiply the numbers by 2. This changes the score to the following:


ExtJS = 3+3+2+0+1+(0.5 x 2) = 10
Angular = 2+2.5+3+0+1+(5 x 2) = 17.5
React  = 1+1+2+0+1+(2 x 2) = 9

So you see, in our fictitious scenario we would be inclined to seriously look at Angular versus the other two for our current development. Boom.. there you go..

Of course, this might not be the result you wanted to get, and might even make you made, but you cant argue with the numbers and you can defend your position with your facts. Of course, its not a science and its not perfect, its just a tool. I welcome feedback and comments because I actively use this process in my day to day. If there is a better way please let me know!

Comments

Popular posts from this blog

How to unit Test Entity Framework

//TODO: Tackling Technical Debt

The Yin and Yang of software