Choosing right technology stack!
A vital part of creating solution architecture is the selection of technologies for each of the components. As a solution architect, when choosing a technology, you should look at it from an architecture and development perspective as well to build resilence with agile business solutions.
One of the hardest things about technology selection is that for every problem there are several technology options and a lot of information available about them. Fortunately, selecting the right technology is not that tricky and you can quickly trim the options down by considering some of the key factors that we are going to see in this post.
This article is of my thought process, and it's a checklist of non-negotiable considerations for choosing a technology stack or a COTS product based on my hands-on experience in designing and executing enterprise scale applications/services, but the list is not limited to, and does not recommend any specific technology/platform stack to consider with. With that note, let’s understand what those are on a high level with examples-explained below.
1. The first and foremost factor is getting a high-level understanding of enterprise reference architecture. Thus, you can get to know the industry best practices, architecture styles, tools, frameworks, and technology platforms that are already established in your domain or enterprise to form a solution. Taking them into consideration will help you in identifying suitable stacks and narrowing down to a right one which can capitalize the current state capabilities like enterprise messaging/event streaming platform, SSO model, Service/API layers, file transferring component, content management process, hybrid cloud model etc.
2. Identifying the strategic dev/testing technology that is already being used across your enterprise is very important. Java and C# are the commonly used programming languages for large or complex projects in the enterprises, similarly, Oracle for better scalability of large size data source, PEGA as rule engine, Selenium framework for automation testing suite are some of standard considerations. Thus, you can get some idea of the applicability of a technology that you consider selecting for the new solution.
3. Considering strategic hosting platform and its compatibility, your enterprise may continue hosting on-premises servers or already being in adaptation of Cloud platforms or even may be under planning in near future, however your technology choice should in-align to the target platform compatibility as well. For example, if you are building a Greenfield project then .NET Core framework should be right choice over a traditional .NET framework as considering its native support for cross-platforms and cloud computing.
4. Next factor is deciding technology stack based on application road map. Your selection should enable a futuristic solution, but at the same time you should ensure minimizing the regret spending. For example, if you are developing an application that has a longer business scope to evolve further, then you may consider a trending technology stack like HTML5, Node.js, Angular/react.js etc. for rich and high performance web layers. Howver, sometimes it may be other way around, you may need a component only till end of certain period (let say, phase-1 execution), and later it may be rebuilt or fully decommissioned, so bringing a new technology may not be a best bet considering its incurrence cost which would become a regret-spending later.
5. In-align to domain/application/data security standards is a non-negotiable factor. Your technology selection should support developing a secure application and must compliant with certain standards. For example, industry compliance (like HIPAA for health apps), app security standards (like OWASP for web apps), data security compatibility (like SSL for transit, TDE encryption for storage) etc. That's why, generally the Fintech platforms are usually built using Java or .NET because of regulatory and compliance issues.
6. Keep solution problem spaces in your mind while selecting a technology stack, let say if you have a requirement to build responsive pages or cross-browser websites then the CSS framework you selected, and its core elements should be compatible with popular browsers. In another instance, the technology selection should work with underlying legacy components of current state i.e. connecting to an older version of database or hosting on prior version of Windows operating system etc., likewise there could be multiple constraints/requirements. So, your technology selection should solve your solution requirements efficiently.
7. Another critical, perhaps the most important factor is defining the non-functional aspects of your solution before you select a technology stack, realization of NFRs (like scalability, performance, cross-platform support, stateless transactions, seamless integration capacity etc.) will definitely help you in finding the right fit for solution purpose. Let say, when the number of users goes up the app must be able to handle the load and accommodate future growth so the framework you selected should have excellent scalability support like the components of the MEAN (Angular and Node.js) stack. So, do remember that the technology you select should give full control over supporting all the NFR that applies to your solution architecture.
8. Next factor is about Software licensing, which could directly influence application build cost, leveraging existing enterprises licenses will help in saving development and distribution licensing costs. Simply following a trending technology and obtaining new licensing may not be a cost-effective decision in the longer run, so see the possibilities of leveraging current enterprise licenses. Even public cloud providers like Azure support "Bring your own license (BYOL)" to Windows VM's for better cost management in case of migrating on-premises workloads.
9. Resource skill-set plays a vital role in choosing technology stack. When choosing a technology make sure there are enough programmers and testers in the market or in your team with the skills you require. Let's assume there are two different frameworks, and both could meet your requirements, let say Angular and React.js for building the SPA architecture. In that case, you should prefer the one in which your team do have strong expertise, otherwise you would end up spending time and cost for developing new skills as a learning curve. Alternatively, you should also consider building custom solutions with low-code apps or workflows with your existing services without needing developers.
10. Meeting business objectives, it is always better to go with industry proven technologies rather than reinventing the wheel unless it is critical to your solution. Because the technology is a tool that can help you to build a profitable business. At the end of the day, your users will not care how trendy your technology stack is, but they will care how well your application/system works. Also, do remember a larger community of developers’ contribution and support of technical forums are necessary to faster development. For e.g. .NET and Java both languages having a vast talent pool and extensive product documentation.
11. Final factor to be considered is, finalizing a technology based on POC outcome. Performing a POC is essential because quickly validating your selection will reduce the risk of failure. The scope may be a piece of technology work or MVP of business requirements, but its outcome would help you make a concrete decision for the rest of the execution. Do remember the technology recommendation should be specific to your project/solution requirements rather a high-level proposal like a Gartner report.
That’s all. I hope this post helped you to learn how to make a more informed decision on selecting a technology that fits for your solution requirements. As a final note, every technology has its own pros and cons, only you can determine which solution is best given your requirements. So, you should do a detailed technical selection analysis before finalizing it with considering these 11 key factors.
Find this blog insightful? Share your comments below. Thanks :-)
Happy Solutioning!!
Comments