- Introduction and Purpose
- Conventions
- Contributing and Updating
- Team Mission and Values
- On-boarding
- Tooling
- Process
- Policies
The Thrive Engineering team is responsible for implementing our company's roadmap, maintaining our existing systems, prioritizing feature work, recruiting top talent, and many other things.
The purpose of this document is to provide a place to keep important information about how our team operates in a central, easily-updatable place.
This document is structured as a single-page, internally-linked markdown document. We keep it in a single page so that it can be exported as a PDF, printed for distribution, etc.
Here are some key conventions that are used throughout the document:
- Code is
formatted like this
- Top-level (
#
or---
) headings should be linked in the table of contents, in the order in which they are written - The print margin is set at 90 characters. Wrap lines beyond that with a
\n
newline. - Sections that are incomplete should contain TODO in place of their content.
To update this document, fork the repository just as you would any other repository. You may then make your edits on a branch in your own fork, and submit a pull-request for review by senior members of the team.
Do not commit directly to the main thrive-commerce repository.
It's important as an organization that we write down our mission and values to help guide our culture. We should revisit this often, and keep both the documented version, and the real-life version aligned.
The mission of the Thrive Engineering team is to build, deploy, and maintain world-class software solutions that support our company's goals, in the most efficient way possible.
To Thrive Engineering, our core values are very important. They help us guide our culture, and ultimately provide a direction for our processes, policies, etc.
We value:
- The team over the person
- Process that supports autonomy
- Engineer empowerment, both to succeed and to fail
- Simplicity
- Efficiency
- Automation and repeatability
- Using the right tool for the job
If you're reading this section, then you must be a new member of the Thrive Engineering team, so welcome!
Here are the things you'll need to setup to get started:
You'll need accounts for the following systems:
- G-Suite (includes access to Clubhouse)
- Github
- Jenkins
- AWS IAM
- Slack
Also, speak to your manager about obtaining the keys.zip file and how to use it.
Thrive does not provide company-purchased hardware to employees. Please bring your own device with you each day. We recommend full-disk encryption, and password protection, as your device will have company source code on it.
Note that you may wish to create a new user or a new virtual machine to host Thrive-specific code on, but we leave this choice up to you.
The building locks at night, so you'll need a swipe card for the main entrance. You'll also need an office door key.
We do not have a hard list of tools, languages, frameworks, etc. that a member of the team can use. One of our core values is using the right tool for the job, so if we're not doing that, speak up!
We do however have a standard set of tools for our common tasks, outlined below:
- G-Suite: All communication, calendaring, documents, file sharing, etc.
- Clubhouse: All engineering task management and prioritization.
- GitHub**: Source code management and review
- Jenkins: Build and release automation, testing, etc.
- Useful local tools
One of our core values is that we use process to support autonomy. We do not believe in process just for process' sake. Autonomy in an engineering team can only exist if it is supported by a process that provides both accountability, and visibility. By that, we mean: As items move through our development life-cycle, it should be easy to see who is working on an item, and what its status is.
Our process is described by the three sections below, meetings, intake and execution, and code.
Until someone figures out a better way for people to collaborate, every organization has meetings. At Thrive, the engineering team has the following key meetings
Monday thru Thursday we all meet to discuss progress, blockers, etc. We also triage any bugs that have been submitted during this time.
Every other week we meet to groom the backlog, ensuring that it is in the proper order, and that all items are still pertinent. Anything that's ready to work on can be moved to TODO status during this time.
This section details how we take in new work, bugs, etc. and how we then execute on it. For the time being, we're running the Kanban agile methodology, shipping code whenever we feel that it's ready.
The three areas of focus with regards to work management are:
This process is guided by the board called "Bug Triage." Bug Triage represents accepting or rejecting bugs, and categorizing their priority. This should be a lightweight task, and should not be used to dive too deeply into the bug itself.
This process is guided by the board called "Epics." Feature intake represents new work coming into our team. Epics represent work that requires multiple tasks, and is generally client-facing. Prioritization of the epics can happen during intake, or during backlog grooming. The overall status of a feature should be able to be determined from viewing the "epics" board.
This process is guided by the board called "Work Items." A work item is a task that has output of some kind (whether that's communication, code, documentation, etc.) and is assigned to a specific person. Work items can be "Tasks," "Sub-tasks," "User stories," etc.
Most of an engineers time is spent working on "work items" and should be reflected by the project management tool being used.
TLDR:
- Always work in a fork, on a feature branch
- Submit PRs
- Never merge your own PR
- Commit messages and branch names should follow the format described below
There are an infinite number of ways to manage a codebase. The way we like best is Git Flow. We don't follow it strictly, but the main idea is that you should be working in your own fork for everything, and all work should be done on feature branches.
For versioning, we follow do not use version numbers. All modules are versioned by their git commit hashes.
Commit messages should include a few key pieces of information:
- Clubhouse ticket IDs (if any)
- A one-line (on the first line) description of what changed
- A bulleted list of any details or ancillary changes
Example:
TE-1234 added some awesome feature
* changed the way X works
* built a new Y that will handle all new requests for Z
Branch names should include the top-level Clubhouse ID that you're working on, whether that's a story, epic, etc., and a short description of the item.
Example: structured_markup_TE-37
TODO