We believe a transparent culture is essential to retaining and developing employees. This belief manifests itself in different ways at Geckoboard - from KPI dashboards on the wall to all-hands meetings to company-wide chats where employees can ask anything.

As part of this mission for transparency, we’ve incorporated several helpful development practices to ensure our engineering team is empowered to do their best work and maintain a healthy work/life balance. Here are three of our favorite techniques.

1. Focus and Feature Teams

A year ago, we were frankly not very focused. Our team of eight developers had four different overlapping sub-teams, each with separate skills, standups, and missions - so a front-end developer might spend 55% of his time on the spreadsheets project, 20% on bugs, and 25% on widget improvements. This led to loads of expensive context switching, a raft of bugs and inefficiencies, and unhappy developers.

Now we have two major projects, each of which is the focus of one of our two separate feature teams. A feature team is a group of developers with a mix of skills suitable for taking on any feature - see http://featureteams.org. We gave our teams abstract (and silly!) names - Taco and Burrito - to help us remember that they are not tied to any particular task or skill.

Our product managers and designers help both teams as needed, and we do shared standups and cross-team pair programming to keep information flowing between the teams. Team membership is fluid - people move back and forth as needed, at least one move a month. And projects sometimes move from team to team too, when that helps us maintain flexibility and responsiveness.

This structure lets each feature team focus entirely on its current project. The mix of tasks and projects we agree on for each team helps ensure no one gets bored. And the results are really positive - we’ve nearly doubled the size of the dev team while shipping new code multiple times a day from both teams, and morale is at an all-time high.

2. Better Conversations, Better Meetings

Do you imagine conversations you wish you could have with colleagues but avoid because they are too painful? Are there topics you’d like to bring up at a standup or retrospective, but you don’t feel it would be safe to do so? We haven’t eliminated interpersonal conflict or invented telepathy, but we have found some techniques from a practice called “Action Science” that help us rapidly share relevant information and decide how to act on it, with minimal fear and blame.

Action Science by definition is a set of techniques for increasing the skills and confidence of individuals in groups to create any kind of organization and to foster long-term individual and group effectiveness. Action Science strategies can be applied to any situation where individuals work on challenging tasks together.

The article Eight Behaviors for Smarter Teams is a great introduction to Action Science by Roger Schwarz, President and CEO of organizational consulting firm Roger Schwarz and Associates. Schwarz identifies eight behaviors that, if adopted, can help teams to learn faster and make better decisions.

  1. State views and ask genuine questions
  2. Share all relevant information
  3. Use specific examples and agree on what important words mean
  4. Explain reasoning and intent
  5. Focus on interests, not positions
  6. Test assumptions and inferences
  7. Jointly design next steps
  8. Discuss undiscussable issues

Some appear easy, like “stating views and asking genuine questions” - but they’re actually quite challenging (try counting the number of questions you ask in your next difficult conversation or argument - there may be none at all!). Others are particularly challenging, like “discussing undiscussable issues” - it takes a lot of practice to use these consistently, and we’re always falling short and trying harder.

But we find that just aiming for this level of mutual learning and joint design, whether or not we reach it, is an enormous help. For example, just this morning we had a vigorous debate at our retrospective about how to structure our daily standups. We could easily have wound up arguing uselessly for our respective positions, but invoking behaviour 4, focusing on interests not positions, helped us come up with a good next step to be sure we improve.

3. People First - Creativity and Balance

We think happy engineers write better code, so investing in practices that motivate and energize the team is very important to us. One practice is our Innovation Wednesday, an all-day event every two weeks where the team take on creative projects that don’t have to be work-related. Recent innovations include a raytracer, an implementation of Lisp from scratch, experiments with material design, improving the speed of our builds, and a space game to make reviewing pull requests entertaining.

Another investment we make in our team is ensuring work-life balance. We expect everyone to go home at a reasonable hour every day - no all-nighters writing terrible code full of bugs round here. We have unlimited holiday, which in practice means we view our contractual 25 days off per year as a minimum, not a maximum. Our founder Paul comes around and bugs us if we don’t book enough time off. And we provide generous training budgets for everyone and strongly encourage learning as much as possible from conferences and courses.

We don’t claim to have a monopoly on good ideas for informing or motivating staff, but we hope these three tips help your team become healthier and happier. If you have some best practices of your own, please feel free to share them with us in the comments!