A technology stack
"comprises the layers of components or services that are used to provide a software solution or application."
It is a sum of APIs, platforms, operating systems, databases and components that are intertwined for the building of a product. A rather simple definition depicts it as
"a set of code (and hardware) modules which build one on top of the other from general to specific".
Technology stack from the Thinslices perspective
Whenever we embark on a new project at Thinslices, customers ask us the same question: “what technology stack is best to use?” Sometimes, people are inclined to believe that choosing newer technologies will be synonymous with immediate success, but reality is far from that. The answer to this question relies in a deeper, more complex understanding of certain technicalities. In other words, it is an "engineering" decision that should always take into account the following guidelines:
- Always start with the technology you (the product owner or your team) know best.
- Anything will work in the beginning.
- The simpler the structure, the easier it will be for you to adapt and modify it in the future, when scalability will become key. Think about it like this: whatever the product you are building, in its beginning it will be simple - no larger than a 2-room house. Small, but fully equipped to attend to the simple needs of your MVP. The more the house grows (think about a larger number of visitors accessing your website), the bigger the costs and the functionalities required. Sticking to the initial structure and rebuilding a block of flats on top of it will determine malfunction and eventual collapse. Which is why certain changes have to be made along the way, in order to accommodate the new infrastructure requirements.
Remember that even Twitter was rewritten several times until it reached its actual form. In 2011, for instance, they started shifting massive amounts of Ruby on Rails code to the Java Virtual Machine. This due to the better performance and scalability of JVM. The previous year, the team admitted to having completely rewritten the search engine in Lucene (and hence dropping the usual MySQL).
Technology stack from your perspective
We decided to address the issue by simply answering a few punctual questions that our clients ask before starting to work on a project. Hopefully, these answers will manage to shed light on how to choose the proper technology stack.
1. Is .NET better than Java or Node.js better than PHP?
None is better than the other. Each programming language has its own particularities that make it suitable for a certain class of problems. Depending on the language you will use, the final structure of your product will have its different, unique way that will guarantee a certain modus operandi. Here’s a website that describes some native and hybrid frameworks, with regard to costs and complexity.
2. What technology stack guarantees the quickest speed of development?
We’ve said it before, each programming language comes with its own pros and cons, and to a certain extent the choice of programming language and development framework will influence the architecture of the system.
It is difficult to claim that one of them will offer better results in the long-term. What is certain, however, is that the better the code is written and the system engineered, the easier it will be to adapt it once the business grows.
The decision between Node.js or anything else belongs entirely to you – the product owner – and will entail inevitable compromise. Working with Node.js will bring a lot of expressivity to your project but it will also mean that developers will have to be more experienced. Since there is no compiler in Node.js, as there is in Java or .NET, developers will have to stay creative, while simultaneously imposing a strict discipline on the code they write. Test-Driven Development is one of the practices that can make up for the lack of a compiler, but it is not very widely adopted.
On the other hand, easy as it is to find a greater number of experienced Java or .NET developers, their work will always comprise a certain amount of boilerplate code that’s significantly larger than in the case of Node.Js.
3. The costs and advantages of Node.js
The solution space is infinite so it’s quite difficult to estimate costs depending exclusively on the predicted technology stack you’ll be using. Apart from the licenses you will be forced to acquire, that can range from hundreds to hundreds of thousands of dollars, keep in mind the cost of the developers. The more “exquisite” the programming language (take Clojure, for instance), the harder it will be for you to find experienced developers and to scale your team, once the product starts growing.
The main advantages of new technologies (such as Node) is that
- developers will love working on them (as they love learning new stuff all the time)
- new features will probably enhance the speed of your product, thus making you better than your competitors.
Advantages of Node.js
Most programmers out there (the ones at Thinslices included) claim that Node.js wins any possible competition when it comes to speed and scalability. This is probably the reason why most Silicon Valley startups these days choose to work with Node.js. Asynchronous, event-driven programming seems to win the competition when it comes to developing performant web apps in rather short amounts of time.
We've chosen Ivan Loire’s blog for quoting some of the most important features Node.js proves when compared to .NET:
- simplicity: all that needs to be programmed on Node.js is a text editor, a web browser and a system console - code can be reused in both client browser and server;
- the Node.js library is non-blocking, and uses just one thread per instance;
- the development environment can be made to work on any machine in 10 minutes;
These are some of the reasons why enterprises such as LinkedIn chose to shift from Ruby on Rails to Node.js:
"On the server side, our entire mobile software stack is completely built in Node. One reason was scale. The second is Node showed us huge performance gains." (Kiran Prasad, Mobile Director of Engineering)
- it is dynamically typed, which allows for a great level of expressivity. This means that developers can write code worrying less about the syntax and more about the overall sense of the project;
- multi-paradigm: it is object-oriented (prototype-based), imperative, functional. It’s just like a big toolbox with everything you need to get the job done. Different parts of an application can be written using different paradigms that are more suitable.
Of course, any experienced programmer who’s been working with ASP.NET for long enough knows that there are sufficient disadvantages to a new language such as Node.js. The feeling of safety is significantly lower, as there are still things to figure out about it. This makes debugging relatively hard, which, in the end, can justify the option for .NET, in spite of its slower speed. Even in comparison to good old plain PHP, Node.js seems to win the battle. An experiment made by appdynamics.com shows that Wordpress (a PHP-based blogging platform and CMS) is 678% slower than Ghost (a Node.js based blogging platform), given the ordinary workload and functionalities a blog should handle.
4. How does the technology stack affect long-term maintainability?
Maintainability is affected by three main factors:
- the structure. The better the initial architecture, the easier it will be to maintain. The harder it is to work with the initial structure, the more deviations will appear along along the way;
- the code length. There are studies that show that humans can process a limited number of symbols.' Therefore, the longer the code, the harder it is to process. At the same time, writing code that is too compressed can render it cryptic. And this is where compromise kicks in again. A good programmer will be able to write compressed code that is easy to understand and reuse, whereas a less experienced programmer will produce several lines of code that aren't necessarily reusable. Code has to be clear and short, not long and redundant. It is a matter of art and science combined;
- duplicated code. Lines of duplicated code are "sequences of source code that occur more than once, either within a program or within several programs owned by the same entity".
Duplicated chunks of code can constitute a problem on the long run, as they can interfere with the smooth functioning of the program. A very simple example can show the ramifications of a problem including duplicated code; for instance, a money transfer performed within a "homebank" system can be registered in the user’s transactions, but can fail to be registered in the official banking log. This means that the change was not operated within both occurrences of the program. Of course, the example is only imaginary, as no respectable bank would allow for source code to be written in a deficient manner; but it helps better understand the importance of writing clean, manageable code.
Refactoring is crucial at this stage and will ensure the longevity of your project. By practising continuous repeated refactoring, duplicated chunks of code will be extracted and the code will be left clean (concise refactoring methods include "Extract Method" and "Extract Class").
Here’s an article we wrote that remotely tackles the issue.
5. How does the technology stack affect long-term scalability and security?
Scalability refers to two main dimensions of a project:
- a horizontal one (more machines to which the program has to be scaled)
- a vertical one (more processes going on on each machine)
Depending on the stage in the life of your project, you may choose to go for one or another technology stack when having to scale your product. Performance is key, once you start growing. Some virtual machines perform the same tasks better than others, IT specialists claim. For instance,
"Ruby MRI, the reference implementation of the Ruby Programming Language, can be 30x slower than C, PHP can be 8x slower than C, and a JRuby/JPython/Java implementation is about 2x slower than C."
We are a mobile development company, so a complete analysis of the technology stack choice should take into account all mobile development languages and frameworks, including the front-end ones. We will tackle AngularJs in comparison to Bootstrap in a future article, that will eventually point out all their pros and cons.
Some people even claim that choosing a technology stack has a lot to do with personal values and with the way in which you, the product owner, imagine the final outcome. Do you appreciate sound technology more than exquisite design? Because you won’t certainly have the money to fund both.
Other times, choosing the technology stack has to do with company policy; some technologies have been used for certain products forever and reverting to Python or Ruby after years of PHP might be excluded from the start.
As we pointed out in the beginning of this article, choosing the right technology stack is simply a matter of thinking ahead. Based on the programming language best known to the engineering team, you - the product owner- will need to anticipate the needs and the potential changes of your business model. It’s easier said than done, we know. But, with careful analysis and monitoring of product behavior and market trends, you will manage to understand how your resources can fulfil the needs of your product and of the technology stack used.
YOU MIGHT ALSO BE INTERESTED IN
The Essential Role Of Trust In Product Development
As you get ready to build your product, you'll need a team you can trust to take the best possible decisions.