Categories
Product Management Software Development

How to Measure a Development Team’s Output

A friend emailed me for advice this morning:

How do you track/measure/analyse how much work you get out of your team over a given period of time (sprint/quarter/year/etc.)?

It’s an interesting question that I’ve dealt with as a designer, a developer and a product manager. It’s a question that comes up all the time, so I’m adding my response here hoping that someone else gets value out of it at some point.

How to measure your development team’s output:

  1. Value delivered. This is the biggest way to measure team output. 2 “high-value” deliverables pushed is better than 5 “small-value” almost every single time. While this has the potential to be relatively subjective, if your team’s mission/goals are aligned with the business’s mission/goals, then it should be easy to know.It’s important to remember that this doesn’t have to be financial value: if your goal is to strengthen the reliability of your video processing pipeline, then adding the fourth or fifth 9 to the overall success rate is value delivered.Also consider non-code output as value, such as increased team learning: if the team has spent the sprint cleaning up tech debt that drive them nuts, they’re going to be more productive in the future. That’s value. If the team spent the entire sprint interviewing customers, holding a design studio to sketch next year’s 2.0 version, or having a massive grooming sprint to clear up the mess in Jira, that’s long-term value that you won’t be able to assign dollars to.
  2. Velocity achieved. Assuming every card that your team works on has an estimate, tally up the sum of the estimates of finished, deployed work. Keep a record of how many points you ship per sprint and work to keep this increasing. This is more objective, but easier to game since the team could just start padding numbers to make it appear that their velocity is increasing. It is also a very good way to make your developers feel like code monkeys.

I would hesitate to use any of these to measure team output:

  1. Lines of code shipped. If your team cares about succinct code, they won’t want this number to go up anyway.
  2. Number of deploys to production. Lots of deploys could mean lots of hot fixes or prod issues.
  3. Number of cards deployed. Easy to game: all of the sudden, 1 card with 4 sub-tasks becomes 4 cards because “now we’re shipping 4x the work!”
Categories
Software Development Tech

There’s an Entire Programming Language for Building Messaging Apps

Where has Erlang my whole life?

Part of the trick is that the company builds its service using a programming language called Erlang. Though not all that popular across the wider coding community, Erlang is particularly well suited to juggling communications from a huge number of users, and it lets engineers deploy new code on the fly.

Why WhatsApp Only Needs 50 Engineers for it’s 900M Users on Wired

Categories
Ruby on Rails Software Development

How to Rename a Rails App

There are a number of reasons you’d want to rename your Rails 3 app. To do so quickly, search and replace the following files of a standard Rails 3 application:

  • config/application.rb
  • config/environment.rb
  • config/environments/development.rb
  • config/environments/test.rb
  • config/environments/production.rb
  • config/routes.rb
  • config.ru
  • config/initializers/secret_token.rb
  • config/initializers/secret_store.rb

Obviously, if you referenced your app in any other files, you’ll want to change them there, too.

From StackOverflow:

In Rails 3, it’s a little different. Rails 3 projects are name-spaced to a module defined inconfig/application.rb. This application module is used to house your app, and you’ll see it referenced by your config.ruconfig/routes.rbconfig/environment.rb and all the environments defined in config/environments/.

If you were to open a terminal session and run the command rails new myapp, yourconfig/application.rb file would define the module Myapp, inside which will be defined an Application class, which extends Rails::Application. All the other files will referenceMyapp::Application.

In both Rails 2 and 3, you will find a string key for your session defined inconfig/initializers/session_store.rb, which takes the default value of ‘_<myapp>_session’. It’s not really tied to the “name” of your application, though you should try to keep it in sync to prevent any accidental session key name conflicts with other apps.