What are some “must haves” for you and your development team?

Small business owner here with a dev background and now managing a small team of devs. I was able to build our app up to a certain point before finally being able to afford developers back in 2019, but after two and a half years now, I'm just now learning/hearing about Sentry, Bugsnag, etc.

I'm a bit surprised to not have heard about it before and it's been a pretty big game changer for us in just a few days of using it. That makes me wonder, what else are we missing out on?

One goal I have in the near future is to hire a consultant to provide guidance as we grow, but for now I'm really curious to learn more about what you guys consider "must haves", similar to how I feel about these tools now.

What are some "game changing" or "must have" apps/integrations that you and your team must have to help with troubleshooting, monitoring, logging metrics, expediting development, etc.?

EDIT: Just have to say I SERIOUSLY appreciate the helpful tips. I've wanted to ask this question since the beginning, but figured I'd just get flamed. Just the small advice goes a long way for me so I really appreciate the comments here!

11 thoughts on “What are some “must haves” for you and your development team?”

  1. Biased because I’m the Performance Guy but IMO you _must_ have an application performance monitoring (APM) service. The most popular vendors are New Relic, Scout and Datadog.

    You’re flying blind without it. Does that endpoint take 5 seconds to return for your most important customer? Who knows! With one of these services installed, now you know.

    Reply
  2. I’m sure this seems like a reasonable question from your perspective. Coming from a 20+ year software engineering background and experience. I can’t possibly give a satisfactory answer that will tell you what you’d like to know while not coming off as incredibly condescending or a long instruction manual on which things are needed in various situations and contexts.

    In short, you are asking for the secret sauce that sets experienced senior-level developers apart. That isn’t something that can be shared. Get yourself a consultant at least to help identify and handle any obvious low-hanging fruit and maybe get started on creating a roadmap for the software project.

    Reply
  3. APM, bug reporting, PagerDuty for critical alerts. Terraform for infrastructure. Most of the rest for me are for development only.

    Reply
  4. NewRelic/Scout + Rollbar + Papertrail + Heroku + Rails Console gives me just about everything I need to manage a large production Rails app.

    Reply
  5. It takes effort to maintain, but a CI pipeline that runs a suite of tests and enforces code styling is extremely valuable as your app grows. Github actions is easy to get started with if you’re hosting your code there.

    Reply
  6. $1000 budget for computer gear. Can still be company owned but they can choose how to spend it, eg headsets, ergo keyboard or chair, secondary display. Increases their productivity which is good for you.

    Reply
  7. * Something like rails\_admin, active-admin or administrate to give you an easy way to view your models
    * paper\_trail gem to give you edit history of your models (great for both debugging and customer support)
    * Sidekiq for background jobs
    * If you’re using Stripe for subscriptions, then ProfitWell is a free integration that gives a lot of useful statistics like churn rate MMR, lifetime value and so on.
    * A full test suite (i prefer using Rspec) with both unit tests and end-to-end integration tests
    * codecov to measure test coverage – you can set it up so coverage% must not go down when merging to your main branch on github – we used this to achieve 100% coverage after a \~9 month transition period, where we added more coverage every time we touched a piece of code.
    * rubocop to enforce styling – don’t enable all cops at once, and decide which ones you want to use, and set them up the way you want. It’s pretty amazing the kinds of bad practices it can help you detect and get rid of.
    * Automatic deploys, CI-CD and PR-based deployment. We are using heroku and github. Heroku automatically deploys any new commit on master – but you can only merge to master via a PR, and only if the test suite (on circleci) is green, if there’s 100% code coverage, if rubocop is happy and there’s at least 1 approving code review by someone other than the author of the PR. It sounds cumbersome when you write it out like that, but the reality is that all these automatic checks mean we can fearlessly deploy something new to production in less than 10 minutes.
    * faker and factory\_bot gems to help set up specs/tests really succinctly.
    * We’ve managed to speed up our test suite quite a bit using knapsack (to run the suite multi-core) and test-prof, mostly for its “let\_it\_be” command, a replacement for “let” that lets you reuse parts of the model between tests when they can be treated as immutable. Good when you have parts of the model that need to be there in order for everything to pass validation (e.g. organization, user, team, fundamental stuff like that, that “own” most of the other model objects you work on)
    * bullet gem to catch N+1 db queries and similar. It’s not foolproof (sometimes under- or overfetching is unavoidable, because you can’t know up ahead what data you’ll need, until you’ve already made the first query, and you just have to pick which side to err on – but bullet is still great for highlighting the places where you have to do that)
    * hcaptcha to stop bots signing up. We needed this sooner than I thought, and integration was easier than trying to come up with a bespoke solution.

    Reply
  8. 1. Adding Rubocop to your CI.
    1. Style guide for code (we use Airbnb’s)
    1. Style guide for front end components. I
    1. Audited gem
    1. Rails settings cached (global settings for your app) gem.
    1. PG Hero gem
    1. Rack attack
    1. Invisible captcha

    Reply
  9. The other comments are perfect. I will just add one thing nobody mentioned yet: prettier-ruby. With rubocop, it will help your team write code that looks good and its easy to read.

    Edit:

    I will add the traceroute gem. It will help you to find controller actions without an associated route or routes without actions (it can happen when the app is big and sometimes people forgets deleting stuff)

    Reply
  10. Some form of architecture guide. E.g. organize features into modules then establish one-way module dependency, synchronization strategies across models that does not rely on callbacks, organize code into specific concerns – view, domain, technology, etc. and arrange them in a vertical stack with downward dependency. And if you have the time, code against a model of some sort (e.g. DFD).

    Reply

Leave a Comment