Communication

Hero image for Communication

Building great software products requires extensive and efficient communication across the team. Explaining ideas, providing insightful comments in pull requests or getting clarifications on user stories are part of the every-day life of every team member and all require great communication.

High Level Principles

  • Always express yourself in an articulate way.
  • Use a confident and clear voice to make sure everyone can hear you.
  • Don’t use sarcasm. Be objective and constructive.
  • Provide context to what you want to convey. Providing background information on the topic or issue at hand can go a long way to bring people at the level of knowledge you need them to be to understand you.
  • Make it personal. Always use a photo as avatar to present yourself as a person, it makes communication more human.
  • Use emoji, animated gifs, or humor when appropriate. These forms of communication can help to convey an emotion, but don’t force them.
  • Expect online communication to be asynchronous most of the time. Repeated interruptions are not encouraged as every team member must be able to focus on their task. Therefore, when you need for feedback, it’s critical to plan in advance.

Tools

When we do not speak in person, we rely on a few tools.

Chat Communication

Slack

Slack is our primary tool for both internal and external chat communication.

  • Each project has three primary channels to which only the team members involved in the project are invited along with the external stakeholders (the Client):
    • A private channel to discuss all project matters between internal team members and the external project stakeholders. Most communication must happen here for transparency purposes.
      This channel is named <project-name>-squad.
    • A private channel to discuss project matters between internal team members only. This channel is named <project-name>-internal.
    • A public channel to receive all third party and monitoring tools notifications, such as CI, Github, Shortcut, LinearB, etc.
      Notifications are purposely separated from the other chat channels to (1) avoid interrupting conversations and (2) allow having different settings of email and app notifications.
      This channel is named <project-name>-activity.

      When working on a project comprising multiple developers, prefer to subscribe to the repository notifications in this channel. Below is an example of the Slack command for a repository hosted on Github:

      /github subscribe #{owner_name}/#{repo_name}
      

      Here is an example:

      /github subscribe nimblehq/cx-web
      

Additionally, when a project involves the development of applications on more than one platform (Android, iOS, and Web) and the squad for each platform has two developers or more, a private sub-channel for each platform must be created. This allows developers on each platform to discuss technical project matters more often without interrupting the communication in the other project channels like internal or squad.
The channel for each platform must only include the Team Leads and Developers for each platform alongside the Engineering Lead(s) for the project so that the latter can support the squad they oversee.
These channels are named after the platform name, for example: <project-name>-dev-android, <project-name>-dev-ios, <project-name>-dev-web.

  • Chapter-based private channels regroup all teammates interested in each stack e.g. android-chapter, ios-chapter, product-chapter and web-chapter. Tech news, cool articles or technical questions are welcome in these channels.
  • Many of our Slack channels are private, so a request must be sent in the channel #access-request with the channel details.

    Communication - Slack - Access Request

    For all public channels, the built-in channel browser can be used to view the complete list of channels.

Keybase

Keybase is our secondary tool for both internal and external chat communication.

As all communication is securely encrypted on Keybase, we primarily use it to send credentials such as username/passwords, API keys/secrets to our team members but also to external stakeholders.

Credentials are permanently stored on 1Password. So only resort to Keybase to send personal credentials that cannot be stored on Vault.

Line

Line is our tertiary tool exclusively used for internal and out-of-office chat communication.

Video Calls

Google Meet is our primary tool for both internal and external video-based communication.

While Slack offers video calls, the team predominantly uses Google Meet for all internal meetings:

  • Sprint planning sessions.
  • Chapter retrospectives.
  • One-on-one feedback sessions.
  • All-hands sessions.
  • Direct calls between teammates.

When it comes to video calls with external parties, Google Meet is also always used when Nimble is the host. The main use cases are job interviews and client meetings.

However, the team often uses other tools such as Zoom or Microsoft Teams when the external party is the host for the calls. Therefore, our teammates must ensure to have these tools set up.

Email

Every teammate has a company email @nimblehq.co on Google Workspace. To maintain consistency between all email signatures, and to ensure that they all look good, we have designed an email signature template. Follow these steps to set up a signature:

  • Generate the signature at https://nimble-email-signature.herokuapp.com/
  • Select all (CMD+A) and copy it (CMD+C)
  • Open the Gmail web client.
  • Open the settings (⚙️ icon in the top right corner)

    Gmail settings

  • In the General tab, scroll down to the Signature section
  • Paste (CMD+V) the signature in the textarea

    Gmail signature setup