This is the getting started guide for new devs or reminder for current devs :)
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
style_guides
README.md
code.md
devops.md
docs.md
links.md

README.md

Welcome to Synq.fm's R&D team's getting started guide. This document describes our development philosophy and outlines things we care about as a team.

Our Mission

To deliver business value quickly and iteratively

Doing it right with Core Behaviors

If you are on the Synq Engineering team you already exhibit some (or all) of these behaviors, but if you don't exhibit all, don't worry. We understand some of these behaviors rely on a bridge of trust, and we're happy to build that with you.

  • Psychological Safety - It starts here, without Psychological Safety we cannot Communicate and we cannot Care. These are some examples of creating a psychologically safe team, everyone must be responsible and exhibit these behaviors at Synq. Some examples:

    • Encourage team mate participation.
    • Engage and investigate all ideas equally.
    • Define problems collectively as a group.
    • Make sure everyone has a chance to participate.
    • No blame, succeed or fail together mentality.
    • Willingness to try without fear.
    • For more details and examples read here
  • Communication - Communication can take many forms, but it is important that we are always communicating at Synq. Without communication, none of this is possible. The only clause here is that we don't want to be jerks; if you are feeling upset please take time to construct your narrative before sharing it (see psychological safety). Some examples:

    • Creating PRs.
    • Writing documentation.
    • Communicating in person or online.
    • Giving and receiving feedback constructively and in real time
  • Care about... - If you don't care about Synq, about your craft, about engineering, or about your coworkers, working here will be tough. You don't have to care about everything, but caring about something is important. Without caring you wouldn't be motivated to do the work that's required of you here. Some examples:

    • Care about Synq.
    • Care about your coworkers and their success.
    • Care about standards or quality.
    • Care about the craftmanship of your work.
    • Care about learning and growing your skills.

If you retain anything from this article, it is the 3 core behaviors from above. We live by this, we hire by this, we fire by this. You can review past hiring/firing decisions here.

How and why we do it

Here are things we specifically do to help achieve our mission

Code

What Reasoning Tooling
(Near) Atomic Changes Pushing smaller changes allows us to deliver incremental value; also reduces chance of breakage GitHub
High code coverage CI is useless without good quality coverage, and we can't ship to production confidently without it CircleCI, Coveralls
Refactor constantly Code debt slows us down and counters our fast PR turnaround GitHub

Docs

What Reasoning Tooling
Branches and PRs introduce small changes safely, ensure the code fits our philosophy, knowledge sharing GitHub, Slack
Effective documentation moving quickly means we work on a lot of different things, coming back to it later or having another teammmate look at it, they need to know GitHub Markdown, StackOverflow, Stoplight
Aligned Development Make sure what we're working on brings business value Trello, GitHub

DevOps

What Reasoning Tooling
Tight CI/CD The way we can ship the code quickly and confidently GithHub, CircleCI, Nanobox + Digital Ocean or Heroku
Automated System/UI Testing Once code is in production, is it really working? Running things like Runscope against the API gives us confidence that new changes didn't mess up prod CircleCI, Runscope, GhostInspector, TestLodge
DevOps Culture Everyone should know how stuff runs and keep an eye that services are working as expected Slack, Runscope, PagerDuty, StatusPages

Technology Overview

Architecture Diagram

Core Services

Name Build Code Coverage Description Maintainer(s) Wiki Link
Akka CircleCI Coverage Status API Core Bruce, Fiona here
Wraith CircleCI Coverage Status Programmable Webhooks Chris, Bruce here
Unicorn CircleCI Coverage Status Upload API producing s3 signed urls Bruce, Jessica here
Hydra CircleCI Coverage Status Transcode jobs service Bruce, Jessica here
Pixie CircleCI Coverage Status Videojs player service Jessica, Bruce here
Mizuchi CircleCI Coverage Status Media Metadata parser Chris, Shan here

Processing Services

Name Build Code Coverage Description Maintainer(s) Wiki Link
Ifrit CircleCI Coverage Status Import large amount of files from disk Bruce here
Incubus CircleCI Coverage Status Lambda Importer Jessica here
Ikiryo CircleCI Coverage Status Lambda Importer Chris here
Charybdis CircleCI Coverage Status CDN log store Jessica here
Calingi CircleCI Coverage Status CDN log parse Jessica here
Aerico CircleCI Coverage Status CLI Cleanup, Legacy -> New importer Bruce here
Anansi CircleCI Coverage Status Metadata / Video quality analysis tool Shan here
Serpent CircleCI Coverage Status Search Service Shan

Frontend

Name Build Code Coverage Description Maintainer(s) Wiki Link
Duwende CircleCI Coverage Status ReactJS based Dashboard for SYNQ Fiona

Shared Services

Name Build Code Coverage Description Maintainer(s) Wiki Link
Imp N/A N/A DNS, Ansible Glen, Bruce here
Golang SDK CircleCI Coverage Status Shared Golang libraries Bruce

Repo naming scheme is based on legendary creatures, ideally matching the first (or more) letter(s) of the service "Search -> Serpent"

Resources

Technologies to Explore - if you read something cool, put it here
Useful Links
General Wiki