Fixed-cost, Monthly Maintenance Services
When we started offering productized Node.js upgrade services , we wanted to bring our technical debt expertise into the JavaScript ecosystem, with the goal of helping as many people and companies as possible.
Unfortunately, in the past we’ve had to turn down companies who wanted to work with us but couldn’t secure the minimum monthly budget to work with our experts.
I’m pleased to announce that we’re now offering new opportunities for startups and small businesses to work alongside our team.
In this article, I will share a few new options to collaborate with our team of experts who specialize in technical debt remediation.
Why
After connecting with a lot of SaaS founders at MicroConf ‘23, I realized that there are many entrepreneurs, startups, and small businesses out there that want to pay off technical debt by investing a small amount of money per month.
While teams understand the need to remediate their technical debt, this very often loses priority to shipping features, releasing patches, and addressing other tasks prioritized in their product roadmaps.
Although everybody would like to upgrade their app as fast as possible, sometimes that’s just not within the budget. Instead, a good alternative can be to gradually work through your technical debt with a slower-paced retainer model.
We started by launching a fixed-cost monthly maintenance service for Ruby on Rails applications and, following the success of that service and feedback from companies looking to pay off their JavaScript technical debt we have engaged with in the past, we are bringing the fixed-cost monthly maintenance service to UpgradeJS !
What's included in our monthly maintenance services
Our fixed-cost, monthly retainer will include services to gradually reduce the technical debt in your application. Our services will include:
- Framework Upgrades
- Framework Migration
- Dependency Management
- Performance Monitoring
- Tech Debt Management
- Security Patches
Framework Upgrades
If your application could use an upgrade, be in Node , React , or Vue , we will start by identifying the critical path for your upgrade. Often, the dependencies are where the complexity is hiding, and we’ll help you identify what you’re looking at in terms of what needs to be done to upgrade.
Depending on your needs and what framework you’re using, we might be able to go straight to the upgrade you want (for example, upgrade from Node 18 to Node 20 ) or we might recommend intermediary steps.
For the Vue 2 to Vue 3 migration , for example, it is recommended that you first upgrade your project to Vue 2.7, update any deprecated syntax then leverage the Vue migration build to gradually migrate to Vue 3.
Our team will evaluate the path that makes the most sense for you, and make a recommendation.
Whatever path we need to follow, we’ll start by shipping changes that will prepare you for the upgrade but are compatible with your current set up, and will gradually work towards your desired version. We’ll also note any other potential improvements we notice so they can be prioritized next and worked on along the course of the engagement.
Once we’ve completed all steps required for the upgrade and have fixed any errors in your test suite, we will make sure your application works in the staging environment using the next version.
Only after we are satisfied everything is working and issues have been found and patched will we recommend deploying the change to production.
Framework Migrations
There are a variety of different reasons that might lead you to decide that migrating is the best thing to do for your application. Maybe you’re running AngularJS, which reached end of life in 2022, and need to migrate to Angular or ReactJS. Maybe you are seeing the benefits of Next.js and would like to migrate to it. Maybe you want to introduce TypeScript into your codebase. Or maybe you have looked into some of these things and need some help deciding the best way to go.
Whatever you need, our team of experts will make an assessment into the pros and cons of a migration, provide alternative recommendations if we have any, and trace the critical path for you.
We will then gradually work towards your migration, with as little disruption to your flow as possible.
We will ship small PRs with the necessary changes, allowing you time to review and QA, and will address any issues that might arise. Once the migration is completed, we will make sure your application runs well in staging and patch any issues that might arise.
After we ensure everything looks good, you can deploy to production and we will support the rollout.
Dependency Management
While there are great tools out there that can quickly help you upgrade minor versions of your dependencies (e.g. Depfu ), there seems to be a missing link between what we do (JS Upgrades ) and what they do (shipping automated pull requests, upgrading one minor version at a time).
That’s where we come in. We will work on minor and major version upgrades (according to semver ) for all of your dependencies.
Whenever applicable, we will also identify which ones of your dependencies do not support a target version of Node ahead of time and focus on upgrading those first. We even built a tool to help with Node compatibilities , depngn .
We will submit one PR at a time. This will give us the opportunity to properly test, deploy, and monitor any issues in production.
Performance Monitoring
If your application is not currently using an Application Performance Monitoring (APM) service (e.g. New Relic ), we will set one up for you. We’ll consider your needs and budget, to make the best recommendation.
Once your APM is up and running, we will keep track of low performance and high memory load issues. We will share a monthly report with the top issues we noticed together with our recommendations to improve your performance.
If you want a more in-depth analysis of your application’s performance, we can discuss a custom report that would meet your needs separately.
Tech Debt Management
As a company specializing in paying off technical debt, we understand how important it is to keep track of your code complexity, churn, and code coverage metrics.
On top of that, we know how difficult it is to communicate the problems with consistently increasing technical debt:
- Reduced development velocity
- Constant regressions
- Undesired side effects when deploying small changes
We can help with that! Every month you will get a report on your technical debt, not just on the codebase, but also in your development workflow, infrastructure, and best practices.
In this report we will include any changes that were made to simplify complex code structures, enhance your development workflow, or anything else that was shipped to make your codebase easier to maintain.
Our goal is to gradually improve code quality without disrupting your development team’s operations. To ensure you and your team know what to expect, we will also work on a strategy to pay off your technical debt. After all, as outlined in our investigation of the Express code base with ES6-Plato , we understand that each case requires its own tailored strategy.
If you don’t have a shared understanding of what “code quality” really is, we
can help you define one that works for your team. After that we can help you
“codify” your code quality definition with tools like eslint
, jsLint
, and
jsHint
.
Security Patches
Picture this: On day one of our engagement our team will perform a quick security assessment of your codebase. This will give us an idea of the work to be done to secure your application from known exploits and potential attack vectors.
Every month we will make security patches that will level up the security standards for your application. Depending on the severity of the issues we find, we might prioritize this topic on day one.
Pricing
Are you ready to make your application more maintainable?
Considering our 10+ years of experience upgrading applications, and more than 20,000 developer hours paying off technical debt , we believe we can offer meaningful updates to your codebase starting at $2,000 per month:
- Shohin: $2,000 per month
- Komono: $3,000 per month
- Dai: $6,000 per month
Each package includes a maximum number of hours per month that we can invest in your application. When naming these packages, we decided to go with Bonsai types because we see a lot of similarities between pruning Bonsai trees and gradually paying off technical debt. 🌳
Shohin
This is a great package for organizations and companies that either don’t have a lot of technical debt or want to go slow.
Their test suite might be well-written, their JavaScript application might be small, or their development team would be overwhelmed with more than 2 pull requests per month.
Komono
This is a great package for organizations and companies that have some technical debt, know they need to fix it, and are ready to review from 2 to 4 pull requests per month.
Their test suite might need some attention, their application might be more on the medium size, or they have several outdated dependencies or are a lot of versions behind with their framework of choice.
Dai
This is a great package for organizations and companies that are ready to ship 3x more than if they had chosen the Shohin package.
Usually their application is rather large, their main dependencies are a few versions behind, or they might even need a migration, their test suite is flaky, or they need to move fast and upgrade things.
Depending on the plan that you pick, we will invest from 10 to 30 hours per month remediating technical debt in your application/s.
Strategic Projects
We know that every now and then our clients will have one-off, strategic projects they will want to ship as soon as possible and we want to be able to help.
When that happens, we can offer our services on an hourly basis to ship value in the form of features, infrastructure upgrades, bug fixes, or anything that will make a difference in our clients’ businesses.
Rescue Services
Our monthly packages don’t include rescue services. If your application needs to be rescued, we can certainly help! We’ve done this many times in the past and we are happy to get you out of a thorny situation.
For these projects, we need to start with a short, one-week retainer to kickstart the rescue project. This will give us time to assess the situation, come up with a rescue plan, and start executing it.
How does it work?
We are used to working with teams of all sizes. From engineering teams of one to teams of 50+ software engineers, we see every engagement as a successful collaboration between our team and your team.
We thrive when we collaborate with our clients’ engineering team on a daily basis, so we will have a channel to communicate asynchronously. If you need to get on a call, we can do that too!
Any of the changes that we submit will be open for review and discussion. We will clearly explain why they are necessary, what the changes will do, and what impact they will have in your tech debt scorecard.
Communication is key to us! We provide you with a monthly report on your technical debt, including codebase, development workflow, infrastructure, and best practices. We are always open to hearing your thoughts and needs and answering your questions.
Summary
Our commitment to helping people and businesses overcome their technical debt is stronger than ever.
We are excited to launch our new monthly maintenance packages tailored for non-profit organizations, startups and small businesses. We are certain we will gradually reduce technical debt in their applications.
Our technical debt remediation services, provided by a team of experts, include dependency management, framework upgrades, framework migration, performance monitoring, tech debt management, and security patches.
These three affordable plans starting at $2,000 per month are cashflow-friendly, consistently add value to your codebase, and give you access to our team of legacy code experts.
You can expect to see gradual improvements in your code quality and overall decreasing technical debt while keeping your development team’s velocity uninterrupted.
“The typical development organization can increase their feature delivery efficiency by at least 25% by managing technical debt. That’s the equivalent of having 25% more developers without additional staffing costs or coordination needs.”
(Source: CodeScene Whitepaper )
What would you do if you had 25% more development efficiency? How much more could your development team deliver in a month?
Let us be your trusted partner in making your application more maintainable, secure, and efficient.