Tuesday, December 27, 2011

Toolchain

I work for startups, mostly on web-based software and services (SaaS). Tools are everywhere, and we need to get a lot done. Fast. Our tools have to work for us, not against us. The right tool makes life a lot easier and gets features out the door faster. The wrong tool slows the whole team down, wastes money, and wrecks morale.

So what do I use?

Before I talk about specific tools, let me lay a bit of groundwork. When I'm working for a client, I frequently use their toolchain. When I'm running engineering, we frequently use the toolchain I describe below. Most of the projects I work on are web or mobile web applications, or software APIs (think SaaS). We're almost always a distributed team, and we usually use some variation of agile methodologies (SCRUM-like or kanban-like). The important part to take away is that we're generally working on multiple things at once, we try to keep those things small, and we push new features or changes into production when they're ready, without waiting for a defined release cycle.

Feature Tracking:

Product: PivotalTracker

Cost/Level: $18/month will hold until your dev team passes 5 people, then $50/month

Summary: I'm not in love with this one. It works pretty well, but there are a few features I wish it had, like: (1) distinguishing between done and deployed; and (2) a UI that doesn't feel so darn squished.

Other candidates worth considering:

Jira: Too heavy and too pricey. Annoying to configure, and really encourages excessive time spent on tracking ("ooh! pretty graphics!"). It's useful if you have nervous and overbearing management involved.

Lighthouse: Good for very small projects with savvy business types. Good email and source code integration and very simple, but little to no workflow or enforcement of procedures.

Trajectory: I've heard good things, but not used it. Somewhat niche.

Bug Tracking:

Just use the same thing you're using for feature tracking. Don't overthink it.

Source Code Management

Product: GitHub

Cost/Level: $12/month will hold until your dev team passes 5 people, then $22/month

I can't make a single recommendation for hosting, since it depends so much on your product and your team. There are a couple of scenarios that might make sense:

If your goal is cheap, you're on Rails, and you don't have a sysadmin type on staff, use Heroku.

If your goal is reliability and you can do your own administration, use Amazon AWS and put your database on an RDS instance.

Product: Heroku

Cost/Level: varies based on usage, but the add-ons add up

Summary: This is cheap and it's the easiest scaling I've ever done. It's also well configured, which makes a big difference. Big downsides: frequent downtimes (especially if you use the shared database), and it will only backup once an hour, so data loss is a possibility. Also, use the kumade gem if you're using heroku. The deployment model of heroku alone is pretty bad; kumade helps.

Product: Amazon AWS + RDS

Cost/Level: varies based on usage

Summary: This lets you start small and will scale with you. It's also very reliable (and can be made more reliable if you have more money to spend). Interaction with Amazon is a solved problem, so scaling and deployment are simple problems. Big downsides: you have to do your own configuration, which means you need some sysadmin skills to set it up.

Development Environment

This one varies based on your product and personal experience. I mostly work on web apps, and my preferences look like this: Ruby on Rails, TextMate (vim is fine, too), cucumber, rspec. As long as there ARE build and testing tools in place, let the dev team pick what they like.

Build and Deployment

This is another one based on product and personal preferences. Just make sure there IS one. Oh, and the deployment should be something that's run automatically from the build system. The answer here is a tool, not a manual process.

That's my stack. If I've forgotten an element, let me know and I'll be happy to talk about it. If you disagree or recommend a different tool, let me know. I'm always curious to see if there are better tools for my toolkit!

1 comment:

Hi Catherine - Adding another couple of names to the feature/bug tracking roster:

I've been on a team using Redmine over the past 9 months or so. It's open source, and in the last couple of months we've had Backlog and Taskboard functionality added to the set-up here. There are a few creases that need ironing out (like the best way of closing out a sprint, and the fact that only features show up in the backlog, not bugs as well), but I'm becoming quite a fan of it. It seems to have sufficient features and customisability without being over-spec'd.

I've been part of a trial of Pivotal Tracker on a previous team, but it didn't "stick". Our defect tracker on that previous team was Gemini, and that's heading towards a taskboard view, plus they are very responsive to customer feedback, but is a costed product again. I like the visual dashboard of Gemini - very useful as a test manager, to keep an eye on different projects.