Upkeep: A monthly code maintenance retainer for Ruby on Rails projects

Ruby on Rails projects older than a year get progressively more difficult to work on. Tests stop passing, your gems go out of date and security vulnerabilities get reported. Without someone there to perform small but regular maintenance tasks, your code will quickly rot, making the application progressively more expensive to maintain and work on.

We know this because clients come to us with atrocious codebases all the time. They ask us to build new features on unstable foundations. Before we can help them we need to spend a significant chunk of their budget on getting their codebase to a state in which we can work on it without breaking anything. On many projects, it's often cheaper to throw out the old code and start from scratch.

Don't become our next rescue project. Rails applications don't need to end up like this. We'd much rather work with clients on an ongoing basis to take care of maintenance tasks than untangle big messes of code under the pressure of a deadline.

Upkeep is our monthly Ruby on Rails code maintenance agreement. For a flat monthly fee, we'll take maintenance tasks off your hands so that you can focus on your core business. You pay monthly and can cancel the agreement at any time.

Our goal with Upkeep is to:

  • Make it easy for new developers to get set up with your project
  • Use automated tests to help make it easy to reliably modify your code
  • Keep your application secure
  • Take advantage of performance and functional improvements in new versions of Rails
  • Keep the number and severity of bugs in your application to a minimum
  • Handle small occasional development tasks it's not worth hiring a team to do

Here's how we'll do it:

  • Respond to security alerts. When there's a security vulnerability reported in either a library you use or a third-party API you integrate with, we'll respond and take appropriate action to minimise your exposure to the problem. This might involve rotating your API keys, updating a library version or writing a custom workaround for you.
  • Maintain code formatting standards. We'll use an automated code format checking tool like Rubocop to incrementally improve the quality of your code. Any changes we make to the code will follow the established standards. We'll run the checks as part of an automated build process.
  • Upgrade your Rails version. We'll keep your Ruby on Rails application up to date with the latest Rails releases. If it's a few versions behind then we'll instead work incrementally towards getting the application upgraded.
  • Respond to changes in third party APIs. API's get upgraded, deprecated and sometimes go offline entirely. We'll help manage changes in your API suppliers and transition your code to new versions of client libraries as appropriate.
  • Documentation. We'll write and update documentation that covers the majority of developer use cases. Our aim is to make project setup, development and testing as unsurpising and error-free as possible.
  • Bugfixes. We'll monitor and QA your application for bugs and pro-actively fix them. If your users or one of your team discover a bug for us to fix then we'll prioritise and address it.
  • Small changes. Discrete changes, typically to the view layer of your application. We define 'small' to be a change that would take a senior developer less than half a day to complete. Upkeep doesn't cover feature development.
  • Automated testing. Most long-standing Rails application could do with a few testing improvements. We'll improve your test suite with incremental refactors on an ongoing basis. For projects with minimal testing we'll introduce high-level acceptance tests and work from there.

The Upkeep experience

Here's what you can expect on Upkeep:

  • Monthly updates - You'll receive an update detailing exactly what was completed under Upkeep at the end of each month. In it we'll detail new documentation written, tests written, bugs fixed and what the work entailed. This is so you have a clear picture of the value you're getting from the service delivered on a regular basis.
  • Email response within 24 hours - Email us with a bug report or request for a small tweak and we'll respond within twenty four hours. We'll work together to prioritise the changes you need alongside the other work in the backlog. We promise within twenty four hours, but in practice we try to keep response time to around thirty minutes during working hours.
  • Pro-active notifications - If we have reason to believe that your application is going to experience problems (e.g. sporadic reports of a service you rely on becoming unavailable) we will send you a quick note to say so. Where possible we'll try to suggest ways to circumvent the problem or fixes that will improve reliability.

Upkeep is for you if...

  • You want developers on hand to fix small issues as they arise.
  • You want to keep your web application secure.
  • You want to take advantage of the latest features in Ruby on Rails.
  • You want developers to be productive when working on your application.

Upkeep is not for you if...

  • You need developers to build new features in your application.
  • Another outside development team is actively working on your application.
  • You need production support for your application (e.g. someone to restart your server at 3am).

Questions you might have

How much will it cost?

The fixed monthly fee for new clients will increase in future. We currently charge £3000 GBP per month (or $5000 USD per month if you prefer) for Upkeep. For extra emphasis we must repeat: this fee will increase for new clients in future.

Can you give us a discount?

In return for pre-paymeent of your fees in full, we offer the following discounts:

  • If you pre-pay for three months of Upkeep we will knock 5% off the fee.
  • We'll discount the fee by 10% if you pre-pay for six months of Upkeep.

To summarise:

Pre-payment period Percentage discount Effective monthly fee Total saved
1 month 0% £3000 £0
3 months 5% £2850 £450
6 months 10% £2700 £1800

At the USD rate:

Pre-payment period Percentage discount Effective monthly fee Total saved
1 month 0% $5000 $0
3 months 5% $4750 $750
6 months 10% $4500 $3000

How much availability do you have?

We currently have the capacity to support three additional clients on Upkeep.

Who will work on maintaining my project?

On a given week, the active developer on your project will be any one of our experienced team of developers. So that we can provide a continuous service, we prefer not to assign a single developer to a single project.

How much time will you _actually spend_ on my codebase?

We will set aside one to two days of developer time per week for your codebase. In addition to this we will also rotate our QA engineer onto your project on an as-required basis.

How will your prioritise my retainer with other Upkeep clients?

All clients under Upkeep will receive equal priority to the extent possible, but we allow for a bit of flexibility in this. If an urgent issue crops up for you and we think it might be worth doing a little extra time this month to fix it, we might decide to keep going until the fix is implemented. We'll probably prioritise other clients slightly higher the month after.

Can we negotiate a different agreement?

Probably not. Part of the value of this service is that over time we've built up expertise on the specific problems it solves. This means we can efficiently and competently deliver the services offered here for a fixed monthly price. If there were services we thought we could deliver with the same level of expertise, we probably would have included it in Upkeep.

What happens if I'm not happy with Upkeep?

If for whatever reason you're not happy with the service you get under Upkeep we'll refund the previous months fee in full. You can also cancel Upkeep at any time. There are no long-term contracts or any terms that lock you into Upkeep.

Where are you based?

We're a globally distributed company. We currently get our work done in London and Brighton in the UK, Christchurch in New Zealand and Porto Allegre in Brazil.

Interested? Here's what happens next

If this sounds like something you'd find valuable, here's what we're going to do next:

  1. You get in touch with us noting your interest in Upkeep.
  2. We schedule a call to talk about your situation.
  3. You give us access to your codebase so we can determine whether can provide a good service for you under Upkeep.
  4. If we're both happy to continue we set a start date and begin the service.

To kick things off, please send an email to [email protected] stating your interest in Upkeep. We look forward to hearing from you.