Adding a new piece of technology to your web application is not a consideration to take lightly. There are a lot of factors to consider that can slow down or doom a project if the proper evaluation is not given up front. In the end, you want the long term benefit to be worth it, but not derail any short term milestones.
And when I say technology, I mean a framework, library, automation tool. Whatever the type, I use it to encompass anything that you might be considering adding into the technology stack that is new to your web application. This most often involves something you’ve only read or heard about, or maybe only worked through a tutorial. This is a case where there is a large unknown component to the technology you want to add.
When evaluating adding any new piece of technology to your web development project, use the criteria below to help you make your decision.
Does the new technology ______:
1. Address some problems in your software architecture
If you have some software design problems that you consistently struggle with given the tools , libraries, frameworks that you currently use, and this new framework will solve that for you then go for it. If you are just adding this new framework only to learn it, and it doesn’t add value to your product or software process, then go pick something else to learn that does add some value.
2. Allow you to become proficient in a reasonable time
Depending on the time frame that you have within your development cycle, you may not have a lot of time that can be considered R&D time to learn a new framework. A new framework should not require a year to become proficient at, that is a lifetime in the development world. This is also another reason why the skill level of you and your team should be considered. Master some core technologies first before you start learning something new. You can always get stuff done with the other languages and frameworks that you already know if you have to, then refactor later.
3. Enable you to create software more quickly and with less effort
Anything that improves your efficiency is something to invest time in. Always strive to do more with less code.
4. Result in software that is more maintainable
If the new framework best practices result in software that is more maintainable, then in the long run that will pay off. Your product will be easier to add new features to and be able to be picked up by other developers easier.
5. Result in software that can better adapt to changes
If you have a problem with handling growing complexity without big rewrites and lots of bugs introduced, then integrating a piece of technology that adds to that is going to make things better, it’ll add to your problems. If on the other hand, using the framework allows for better overall design and encourages solid, maybe even SOLID, design principles, then your software project will be better off.
6. Improve the testability of your software
If testable code is important to you, and it should be, then you should always weigh the impact that adding a new framework has on your ability to test. One clue to look at is also how the framework tests itself? That can tell you how much importance it places on testability.
7. Have no significant degradation in performance
If your software designs have problems with performance, and it is really important to your product, then a new framework should be providing a lot of benefits without significantly impacting your software’s performance. Most of the time, because a framework adds flexibility and adds a layer on top of your existing stack, it often will decrease the performance compared to well-designed code in current tool sets. The opposite would be writing absolutely optimized custom code for every interaction, but that’s a tradeoff with speed of development and maintainability. I always opt towards speed of development and functionality first, then look at performance later. If you know ahead of time performance is valued highly in the product, then make sure you at least have a plan to optimize performance if and when issues come up.
8. Encourage good programming practices
A good framework that you add should be using design patterns that encourage you to write good quality code. The effort to write good code should be no more than writing bad code so you have no reason to not just write good code using best practices at the start.
9. Have good support by its creators
Sometimes the creators are commercial, sometimes it is open source, sometimes it is a combination where it is open source contributors that are employed by a big commercial company. Either way, I consider support being the same as documentation, so how well does the project itself keep up with changes in its development with the corresponding documentation. Checking commit history looking for a variety of committers over a long period of time also helps grow confidence in the project that something that changes in the core developer’s lives or career, or the company’s finances, won’t derail the project.
10. Have good support by its users
Where does the user community get support? These are the same channels you will use to learn and help figure out best practices. Looking on Stack Overflow to see how many questions are being asked and how well they are being answered is a good gauge (lookup questions using Tags). Also, seeing what conferences exist and what other companies are using the project helps. Having someone you have a personal relationship with that has experience and that is willing to help answer some questions is also a plus.
11. Have a good chance to be actively maintained during the useful lifetime of your design
This is something that depends on your product life cycle, if you most likely redesign your product every 3 years, then only has to exist for that long. If you have to distribute software for a hospital, useful lifetime might be 10 years, so are you confident the new piece of technology will be maintained, updated, and still valid that far in the future?
12. Currently in a state where it is complete and functional
If still in a state of flux, with lots of API changes, or bugs being introduced, it’s not worth using it in your product because you will be constantly working around bugs or wasting time debugging. Unless you like that sort of thing. Harder to do if you are working on a product because you are contributing to someone else’s code.
13. Change not too quickly
Will new releases be completely breaking old ones. If a project is iterating quickly, and your software relies on stable code with infrequent releases, this may not fit into your project well.
14. Allow you to collaborate more easily with other people
If the framework you are adding is not very popular, or not well documented, then if you work on a team with others, it may be frustrating for them to work alongside you. Also may be hard to find contractors who know the framework. Ideally you should have the ability to share components you made with the public, or to get them on github or other sources.
15. Minimize complexity added to environment setup for developers and production servers
Does the framework add any complicated steps to the build or test process that will not be able to be automated. Also, consider the impact on developers setting up a local environment, which is important to truly distributed collaborative work. Sometimes unavoidable depending on role of the framework.
16. Cost should not be prohibitive
Sometimes the costs are direct, like you have to pay for a license. Sometimes the costs are secondary, for example, what if a new framework requires a lot more memory usage on your web server, so you have to upgrade your server’s RAM costing you X/month.
17. Have only reasonable requirements to be brought into your product
If a framework has a lot of requirements, need to evaluate their impact too. Might not be a big deal if you never directly use the required projects and they are abstracted when you use the framework. But maybe some of them are exposed and new things you have to learn.
18. Have a software license compatible with your product
Have a commercial product? Make sure the license allows you to sell online, distribute, or sell a subscription to your product, whichever applies depends of course on your monetization strategy.