A new feature was due before a code freeze days before Christmas. We’d committed to a release before the end of the year and the project was not going well. There was a bug in some changes to the pricing algorithm and the original author had checked out for the holiday. My colleague and I were in the cafe trying to figure out what changes needed to be made. There was no automated testing. The system was a black box, and every push needed our QA counterpart’s blessing. Did we make it on time? Yes, but it was not a release we were proud of. Is this how coding is supposed to be? Can this scale? What could be done so that we don’t find ourselves repeating history next year?
As development teams grow coordinating among team members is a challenge every company needs to solve. The way in which work gets done is evolving. A recent trend over the last few years is that more and more companies are hiring remote employees. This could be to reduce costs, expand the hiring pool, make companies more elastic, and provide more flexibility to employees. A view of interest over time for “remote work” illustrates this trend pretty well.
The introduction of remote employees opens up a host of issues that don't always exist with colocated teams. The focus and attention these issues are getting is giving birth to a new set of tools that are changing the way organizations function.
Teams need to work across distance and time. With distributed teams, members are often in different time zones and organizing meetings can be difficult. With agile methodologies being commonplace, priorities often shift and projects are left unfinished. Loose ends and state of the system need to be represented by either code or artifacts created by the team in various project management tools.
With modern projects often there is no definitive scope of work. You have a ballpark idea of a level of effort, but you don’t really know until you get in there. Project teams form around the necessary components required to deliver and the teams reconfigure as requirements change. In order to succeed, cross-functional teams need to work together effectively.
Staying organized and moving forward while maintaining agility is no small feat.
Communication is key. The methods and techniques employed can set a stage for how a project will play out. They are best outlined at the beginning of a project or implied through organizational standards.
Software development is an industry where face-to-face interaction is not a necessity to design and build systems. In fact, most software engineers work best when they’re left to focus and minimize context switching.
Keeping everyone on track and being able to communicate project milestones and successes is necessary. So, how does it get done?
Define a lead. Accountability is important. Ultimately a single person needs to feel a sense of ownership and be responsible for delivery. They’ll be the person who nudges other stakeholders to move the project along.
Have a communication plan. The development and adherence to a communication plan can be a very useful tool for organizing how work gets done from the outset of every project. Every individual within a team is different, and dynamics can vary different combinations of team members on a project. It’s helpful to align upfront, for example: “for this project, we’re going to try daily standups and post updates in xyz slack channel.” If it works, great, if not, try something else until you find something that works for the folks involved.
Often times a communication plan can be reused from project to project or reproduced in its entirety. While a formal document can be created, it could also be part of a conversation during a project kickoff. Your mileage may vary depending on the organization. If you have the same team working on another project, there may be no need to go through formalities such as drafting a doc; the plan can be implied. Never do work for the sake for the sake of work. Again; we want to reduce the amount of overhead. These things are most helpful only during times of change, like putting blinkers on before making a turn.
Theres plenty of tooling available which can eliminate the need for meetings but they can’t always be avoided. The following is some advice to make the best out of meetings and other forms of asynchronous communication.
Make meetings intentional. Prepare agendas for all meetings and highlight decisions that need to be made and any constraints upfront. Give everybody involved the opportunity to prepare in advance to reduce the need for follow-ups. Give the team the opportunity to resolve the need for the meeting if possible
Be flexible with scheduling. Whenever coordinating a time to meet, give a few options or a date range to reduce back and forth.
Make next steps concrete. Don’t assume everybody knows what needs to be done and when. Spell it out exactly and set timelines.
Be a bridge builder. Always create artifacts and leave them behind in a discoverable place. The next time somebody goes down a similar path, there will be prior art for them to build off of or expand on. If you're asked a question and it seems like the answer can benefit others, write it down.
Optimistic Decision Making. Coming to a decision through consensus is difficult. When working within asynchronous formats, it's even harder. If you think there’s a viable solution suggest that it's the direction you're going to go unless somebody suggests otherwise. The goal here is to non-action.
Friendly Wording. In textual communication some tone is lost and words can be misconstrued or perceived as patronizing. Be careful with wording and be sensitive to how messages would sound if read out of context.
Be concise. Imagine everything you’re writing will be read on a phone. A reader will glaze over a large block of text will and try to address it later. If your note is short and to the point, they may be more inclined to address your concerns immediately. Favor lists over sentences if verbosity is unnecessary.
Follow the chain of command. Nobody likes when you go over their head. You can’t always assume that what’s important to you is as important to everybody else. Before escalating things, always go through the appropriate channels - whatever they are.
Cushioning. When replying to communications, fully acknowledge what the other person has said before following up with questions. Make clear what was and was not understood and needs clarification. Don’t let the sender feel like their message was dismissed.
Be frugal with trigger words. Avoid adding highlights or words like “urgent” and “important” to email subject lines and slack notifications. While the outcome of a task may be important to you, you need to always consider your ask from the recipients perspective.
Communicate Impact. The squeaky wheel gets the grease but can become annoying over time. Gain buy-in from stakeholders by communicating the impact their contributions will have on the project.
There are a few technologies that have stood out in helping our team work well in an asynchronous manner.
Slack - A popular instant messaging platform that has a lot of cool features like channels, threads, mentions, and countless third-party integrations. It’s easy to code custom plugins, and is widely used across the tech industry. It’s a no-brainer replacement for most emails and most other forms of instant messaging.
Humble Dot - This app directly aims to replace fixed meetings by creating a communication format where questions are disseminated to employees on a schedule. They can either have public or private responses, and the answers are aggregated for reporting. It’s a high tech tool with all the bells and whistles (mentions, magic links, slack integrations, etc). It does a great job of replacing weekly alignment meetings and daily standups.
Pull Panda - Specific to engineering teams, Pull Panda provides a set of rich features on top of pull requests in GitHub. Pull Panda auto-assigns pull request reviews to team members, and expands the built-in slack integration with additional helpful notifications. With Pull Panda, integrated into the development workflow,
Notion - A full-featured real-time text editor. Think of it like a wiki + google docs on steroids. Notion supports embedded tables, visualizations, mentions, rich text formatting, and has countless integrations.
Google Drive - Great for document sharing and storage compared to digging up files buried in email. Keeping a shared document repository can prevent unnecessary communication clutter.
Clubhouse - A lightning-fast project management and issue tracking tool. It supports all of the common primitives like projects, epics, milestones, and issues and is fast and easy to use. We’ve found it infinitely easier to use than Jira. Clubhouse’s drag and drop UI and Story View are second to none. They’re also nimble and responsive with support, we’ve found working with their tool to be a pleasure. They’re constantly rolling out new and cool features, so if you haven’t already I suggest checking them out.
With remote work comes friction, much of which arises from issues of inclusion. Different team members don't need to be privy to every bit of information related to a project. High-level vision and goals are helpful for gaining alignment. Detailed information specific to an individual's tasks can be made available for all to see, but don't need to be pushed onto everybody. Shared knowledge bases such as notion are great for storing this information and making it accessible.
Within every project will be segments whose associated nuances and related conversations can become complex in and of themselves. Every person working on a given project may not need to be an active participant in some of these micro conversations, however, keeping everything organized will keep everyone sane and the project moving forward without unnecessary delays.
Tools like Clubhouse and Jira, allow teams to record and categorize tasks and associate them to projects and other tasks. You can create dependency chains, hierarchical configurations, and arbitrary groupings as needed. Methodologies vary widely by the team and use case. By designing a framework for creating and classifying tasks, every member of a project’s team can contribute as needed (and, more importantly, ignore issues that don’t pertain to them).
Depending on the tool, color coding, tags, and naming conventions are all great ways to help group issues. Clubhouse, in particular, provides a really slick UI for creating arbitrary “spaces” with custom filters which makes navigating issues really seamless.
Often times the last leg of a project is the longest, and for the most part, requires the least people involved. It’s helpful to understand who can be disengaged from a project and released back into the worker pool, and who needs to stay on through to completion. To give a concrete example, early on in a project you may have a DevOps resource involved to help spin up a new CI/CD (continuous integration, continuous delivery) pipeline and set up deployments across environments. While they contribute to a project in the early and final stages, they probably don’t need to be around for the meat of the work. At the tail end of a project, fine details are usually hammered out by continuous enumerations between the developer and business stakeholders. Deployment components are automated at that point and the Ops resource can be freed up for other projects.
Keeping folks around who are for the most part done contributing keeps this project on their plate and takes up headspace - a valuable finite resource - so understanding the start and end of a project but also individual’s engagements are important.
Project Management is an ever-evolving landscape. There are many new tools being created to help solve organizational communication challenges. Some of the most exciting products in development are those which address the issues of distributed teams. The common need exists to facilitate communication between stakeholders and report on progress. As teams grow in numbers across workspaces and time zones, the need for tooling increases. At the same time, the effectiveness of meetings as a form of organizational alignment has a sharp decline. Hopefully, my perspective on the current state of affairs with today’s best-in-class communication tooling can help your organization move in lockstep and deliver more quickly.
Did I miss anything? Use anything I might find helpful? Leave a comment!
Thank you for reading! To be the first notified when I publish a new article, sign up for my mailing list!