Communication & Collaboration - codemagic-ci-cd/company-handbook GitHub Wiki

Communication

Codemagic has about 30 people from 15 different countries working from Portugal to Australia. Having clear communication is very important to succeeding as a team.

This page is designed to help guide us on communicating both internally and externally.

Our communication values

  1. Assume positive intent. Always coming from a position of positivity and grace.
  2. Take time, because what you say matters. Take care to listen and also think through what you are communicating. Everyones opinions and thoughts matter so take a moment to formulate them.
  3. Feedback is important. The best team is humble and willing to learn!

Pro tips

  1. Use asynchronous communication when possible: use Notion or Trello cards, GitHub issues, pull requests, discussions or other relevant communication channels to discuss matters related to a project or task. Announcements happen on the appropriate Slack channels and people should be able to do their work without getting interrupted by chat.
  2. You are not expected to be available all the time. There is no expectation to respond to messages outside of your planned working hours.
  3. Ask all the questions you have. It is completely OK and encouraged. Please do so in public channels! That being said, please try to look up the answer yourself first. This is common courtesy if you are expecting the other person to explain it to you. Good idea is to say what you are interested in and how you tried to find the answer so people know where we can improve!
  4. When someone asks for something, reply back with an actionable response. Answers like: 'will do', 'OK', or 'it is on my todo list' are not helpful. If it is a small task for you but will unblock someone else, consider spending a few minutes to do the task so the other person can move forward. If it will require a resource request please let the person know and instruct them where to place the resource request.
  5. Public channels are preferred and private channels should be avoided.

Communication channels

Our primary communication channel is Slack and our primary language is English. We use Slack for almost all of our communications internally and written communication is in English. There are several advantages to using Slack as our primary communication channel.

  1. Security - there have been several cases where we receive phishing emails or bad actors trying to fraud our team members.

Do not click on links you’re not sure about or transfer money to an account that tricks you into thinking it is Codemagic.

  1. Visible and searchable internally - Slack has many useful features to promote discussions and maintain history. It’s great that all of this is available for everyone. So if you remember that you at one point said something to someone then there is a good chance you are able to find that message on Slack.

Our secondary communication channel is email. Your @nevercode.io email is your official email.

Email

  1. Internal email should be avoided in nearly all cases. Use your team specific async communication methods e.g. either via Trello cards or Notion cards for specific task discussion. Use Slack if you cannot use Trello or Notion cards, and use Notion pages or Google Docs for anything else.
  2. The only uses we have for internal email are:
    • Obtaining approvals for legal matters
    • Sending official company documents (e.g. job offers, payroll forms)
    • Communicating with external partners

That being said, it is still your responsibility to manage your inbox.

  1. Good practice is for example to set yourself out of office when you are not available to reply to emails.
  2. When you receive email and you have not set yourself out of office it is assumed that you have received the information.
  3. Always write emails as if they would be published. Consider how someone else would read your email if it would to become public.

Slack etiquette

Slack is used differently in different organizations. Here are some guidelines for how we use Slack at Nevercode:

  1. Keep #general open for company-wide announcements.
  2. @channel or @here mentions should be reserved for urgent or time-sensitive posts that require immediate attention by everyone in the channel. (Examples: changing a meeting invite URL just before a meeting, or soliciting urgent help for a service disruption, where you're not sure who is immediately available)
  3. Make use of threads when responding to a post. This allows informal discussion to take place without notifications being sent to everyone in the channel on every reply.
  4. When possible, summarize multiple thoughts into a single message instead of sending multiple messages sequentially.

Requesting for resources from other teams

At Codemagic we give team leads freedom to manage their teams as they see fit. In return it is team leads responsibility to make sure they can work well cross-functionally.

We are a relatively young company, but we already have some personalities forming in different teams. In general people are easily distracted because we all want to help each other. However, it makes planning and working together as a team difficult if we go off tangent too much, which is why requesting for significant time/resource should go through a process that each team is comfortable with.

Requesting for resources means that you request somebody to take significant amount of time out of their day and focus on things other than what is their current task. This does not include for example quick feedback on reading an article or responding to a product idea etc. An example of requesting for resources is for example filling in a security questionnaire or asking devrel team to dogfood a feature or take part of a webinar/conference or write an article.

Product team (Team Lead is Mikhail Tokarev)

Rule of 👍

  • communicate your goal, not a solution you want to see. This helps to prioritize your request or suggest alternative solutions that can be delivered faster.

Issue escalating

There are several cases when you might want to escalate an issue:

  • a service disruption affects all or the majority of users.
  • an issue blocking app releases reported by several different teams.
  • an issue reported by High-Value Customer and for different reasons ignored for a long time.
  • a security incident posted in public channels (don’t confuse it with vulnerability reports on info@ email)

All issue escalations should be raised in the #cm-help channel. When you provide the reason for the escalation, you can tag a specific @dev- group depending on the nature of the issue.

Only in the case of service disruption: if no one is replying in Slack for 30 minutes or longer, you can call the responsible persons on their mobile phone, in the following order:

  1. @tokarev (CTO)
  2. @vladimir (Senior Software Engineer)
  3. @priit (Senior Software Engineer) You can find the phone number in Slack.

New product features & ideas

Please post your idea in the #cm-ideas channel. Thank you! 🙌

Sales Team (4 people) Team lead is Martin Jeret

Sales will be successful in 2024 if they can generate interest in Codemagic products through sales activities and create sales opportunities from that interest

We generate interest primarily by building relationships - contacting potential customers and attending events.

Sales opportunities are those people/teams who are interested in Codemagic and we have had a call with them and can explain why they want to use us now.

Pre-sale & sales activity

Currently, we aim to handle pre-sale activities inside the Customer Engineering team. If for some reason you need to involve the Product team, it should be agreed with the CTO first. Use the #sales-discussion channel or CFM meeting to share the sales opportunity and the problem you need help with.

Marketing requests

Marketing requests should be raised in the #marketing channel.

⚠️ We used to have a practice where the marketing team requested changes in direct messages — this should be avoided in all cases.

Data analysis/information requests

Just start a new thread in the #cm-metrics channel to describe what information you are interested in. Some helpful questions to answer beforehand:

  • Is it a raw data request or do you want to see some visualization? Do you have an example of the visualization?
  • Is it a one-time request or do you want to monitor changes on a daily/weekly/monthly basis?
  • Do you have any deadline for it or not?

Internal or 3rd party tools

TBD

Open Source Engineering team - Team Lead is Darshan Kawar

The Open Source Engineering team’s main responsibility is to carry out the work described in the contracts Nevercode has with Google for issue triage and bug fixing. Team members have occasionally collaborated with other teams by writing articles for the Codemagic blog or representing the company by giving talks at conferences. The best way to request resources for something like that is to put the idea forward at CFM.

Developer Support team - Team Lead is Nihal Agazade

The Developer Support team takes care of customer support and inbound sales requests.

Developer support engineers:

  • Giving technical support to billing enabled customers via the Intercom chat widget.
  • Supporting free tier customers on channels such as Community Discord and GitHub discussions.
  • Responsible for customer retention.

Solutions engineers:

  • Responsible for evaluations and POCs (Proof of Concepts).
  • Deal with inbound prospects, demos and technical sales.
  • Adding sample projects that demonstrate product value.
  • Contribute towards growing the number of HVC (High Value Customers).

Sales team (5 people) - Team Lead is Martin Remmelgas

The sales team at Codemagic exists because some customers cannot use our product with a self-service option.

Self-service may not be available for new features, for example, if the self-service option does not exist yet or we have not built it on purpose (e.g. a new experimental feature we're gathering feedback for).

Some customers may not be able to self-service because they may require us to fill out security and compliance questions or maybe they require invoicing and cannot, therefore use a card for payment - https://github.com/codemagic-ci-cd/company-handbook/wiki/Pricing-Philosophy

Sales also tries to come up with ways to promote the service to attract new customers. Sales are best suited for this because they are responsible for talking to the customer from the start of the sale to the end of the sale and thereafter as well. So they have a very good understanding of what people are interested in and why.

We don't have specific roles yet in the team, but generally speaking everyone gets assigned a project and everyone is expected to take on inbound leads round-robin style.