Developer Exchange: How a Week at Another Company Helped Us Refresh Our Culture
In April, I had the opportunity to spend a week at Unruly as part of an experimental developer exchange. It was not only a chance to code with new people in a different environment but to observe and learn from each other’s processes and culture. I got to experience the differences between a typical workday at Storyful and one at Unruly, and bring home some ideas for our own teams.
In many ways, the two organisations couldn’t be more different. Storyful’s lingua franca is Ruby; we organise our coding work with git flow, and our product teams with Scrum: typically two-week sprints, with product demos, sprint retros, and planning. Unruly use Java, trunk-based development, and organise around the principles of Extreme Programming (XP). In truth, having barely written a line of Java since college, I worried I’d be nothing but a nuisance for a week.
As it turned out, sitting back wasn’t an option. In XP, pair-programming is mandatory and at Unruly no one commits codes alone. Since “driver” and “navigator” rotate regularly, there’s no escaping writing code. It’s worth taking a step back and looking at the culture this practice produces.
While ad-hoc pairing is common in Storyful, at any given time a team at work looks something like this:
Whereas, at Unruly, work being done looks like this:
A practice we share in common is the morning stand-up.
Stand-ups at Storyful take place at our media bar, are staggered in 15-minute intervals through the morning and use Redmine to track progress on user stories, tasks and the burndown chart. On the walls are our sprint goals and waste snakes.
Unruly teams have contemporaneous stand-ups first thing in the morning in their own section and use physical boards and cards for almost everything.
Unruly prioritise the sharing of knowledge and responsibility. Whether about code, architecture or product design, decisions rarely rest on a single individual. Information radiators, ubiquitous in their office, communicate the state of the project to everyone so that teams can adjust course to achieve goals. The cost is that consensus must be achieved in advance of progress being made.
By comparison, at Storyful we try to equip developers with the information and resources they need to make decisions autonomously and as a team. We use regular touchpoints to identify and clear blockers. Organising in chapters, developers maintain the style-guides that drive our static code analysis tools and allow tactical decisions to be made on the fly. The challenge is in keeping the whole team informed as the project moves on.
While intended to reduce bus factor and improve quality, knowledge-sharing meetings and code reviews happen retroactively. Those who participate haven’t been involved in producing the work and revisions are costly as it is already practically complete. While we’re unlikely to suddenly adopt XP wholesale, Unruly’s example shows how close communication at every part of the design process is a better substitute. It has compelled us to experiment to see if we can gain some of the benefits.
We’ve started by simply changing how teams are seated. Seating them around their desk clusters seems logical, as they face each other and are close together. However, it’s noticeable how monitors form a de facto partition down the centre of the cluster and members have to walk around the whole thing to see each other’s screens. So, we’ve moved teams into the negative space between the clusters so that they only need to spin their chairs to talk. It has also more than doubled the space they have autonomy over, as they can utilise the space in between clusters. It’s early in the experiment but teams are already customising the new space in a variety of ways, holding stand-ups together first thing in the morning, and mobbing on problems at various points during the day.
We’ve also introduced a dedicated pairing desk. The desk has a single workstation with a standardised set of tools — OS, IDE, VCS etc — and is set up to facilitate formal pairing. That means driver/navigator pairing with the roles being rotated in some pre-agreed fashion; even if it’s just to swap every 10 minutes. The desk can be booked like any other meeting space. The crucial thing will be to make sure it becomes a facility people use to craft new work together and not just another retroactive knowledge-sharing tool. We’ve experimented with pairing before, this gives us a specific place to do it.
Finally, we’re trialling a Gold Card system similar to Unruly’s, where engineers are given time to study, experiment and learn new things directly or indirectly related to their work at Storyful. It won’t be exactly the same, as our context is different, but it will give engineers a chance to keep their skills sharp and hopefully feed into a culture of increased learning. On Friday afternoons the whole product and tech team get together for a beer and anyone can present a talk on a piece of technology or a field of study they’re interested in. In time there will be some great talks from people who have participated.
As time goes on we’ll measure how these changes work out and adapt accordingly. They’re a work in progress and we’ll continue to gradually evolve our processes through the retrospective processes of Scrum. But they represent a new start for us in improving how we collaborate to build software.