Behaviour and protocol

Code Code reviews Consulting 101 Feedback Good meetings practices How to facilitate team meetings Inclusive language Values


360 review Continuing education policy Engineering manager career ladder Roles Software engineer progression framework Technical skills sheet

Employee manual

Abtion's pomodoro Employee benefits Internal days & community Intro Parental leave policy Safety and security Schedule, time tracking & calendar Sickness & unplanned absence Travelling Vacation & planned time off Work from anywhere policy

Project management

Technical setup when starting a new project Client discontinuing hosting or sla Converting projects from development to maintenance mode Estimating Estimating project maintenance Go live checklist Handoffs Invoicing guidelines Procedure for traffic


Audio setup Create amazon bucket Database backup setup Gpg signing Pairing setup

Technical practices

Bug triaging Css How and why we do design research Kick off meeting Pair programming Tdd testdriven development Workflow



Tools and services

Access and permissions Purchasing licenses and memberships Sharing sensitive information Stack and services Wordpress

Project management

Technical setup when starting a new project


When starting a new project for a client, we try to be consistent with resource allocation.

You can read more about basic rules & culture surrounding these resources in Access and permissions.

NOTE that a big part of the startup process & best practices examples are covered by our project templates MuffiRails & MuffiNet. These projects are examples of Abtions Internal Projects, which is the client. In other words: Muffi, Pomodoro and all other internal projects should be stored under [email protected].

When setting up the codebase / hosting & security during startup, we set up the following

  • Github for Code & Continuous integration (Github Actions)
  • Google Groups for emails, notifications & access for the project team
  • Heroku/Azure for hosting client applications
  • 1password for secrets

To kickstart a foundation for a new project, follow this plan step by step:


  • Make sure you have the right information for the foundation:
    • Client name
    • Project name
    • Team members
    • Client’ billing info
      • Billing email
      • Billing address
      • Credit card information
  • If by any reason you won’t have access to the billing info in the stage of kickstarting the project:
    1. use Abtion’s billing info and credit card (see 1pw)
    2. inform PM about this, and create a ticket in the project’s Asana board to transfer billing to client

1. Google groups setup

  • create a group [clientname]
    • Invite team members
  • Correct the Group settings:
    • Enable ‘Who can post’ to ‘for anyone on the web’
    • Enable ‘Who can attach files’ to ‘anyone on the web’
    • Add subject prefix [clientname]
    • Uncheck the “Include the standard Groups footer” box

2. Create Vault in 1Password

  • create new Vault with [clientname]
  • Generate codes for all logins and activate 2fa following the guideline Access and permissions

3. Github setup

  • create a new account [[email protected]]
  • User name [client]-abtion
  • add this user to 1Password
  • Unsunbscribe from email notifications

Login on Github as [email protected] (requires admin role):

  • create a new team in Abtion named [clientname]
    • invite team members
    • invite [client]-abtion account for Heroku CI reasons (to connect with Heroku)
  • create a repo in Abtion named [clientname]-[projectname]
    • add repo in Abtion team
      • ensure ‘read only’ role in Abtion
    • add repo in [clientname] team
      • change role to admin role

Setup automerge github action

  • sign in [client]-abtion github account
  • create a personal access token
    • Expiration: No expiration
    • Scopes: repo (Full control of private repositories)
  • create new repository secret in [clientname]-[projectname] settings/secrets/actions
    • Value: personal access token generated in previous step
  • create github automerge action
    • copy auto-merge.yml, dependabot.yml, workflows/auto-merge-dependabot.yml from muffi/.github into [clientname]-[projectname]/.github

*4. Heroku project setup (NOT relevant for all projects)

  • create a new account [clientname]
  • create a new team [clientname]
    • invite team members (as member)
    • invite admin@abtion (as admin)
  • add clients credit card (unless not possible, add Abtion’s until the Client can take over)
  • Logged in on Github under [[email protected]] (In order to not make the connection sync with [email protected])
    • Create or transfer new pipeline*
    • Creating the new pipeline (optional):
      1. Pipeline name: [clientname]
      2. Pipeline owner: [clientname] team
      3. Connect to Github account. To find the repo, remember to select Abtion organization. NOTE: The pipeline should be connected to: abtion/[client name]-[project name] by [client]-abtion (Not through by adminabtion, as this wil break the connecting when handing over the project to the client)
    • Transfer the new pipeline (optional):
      1. Invite the owner of the pipeline to the new team (usually [email protected]). Remember to accept the invite to the new team. Unfortunately, this may require access to [email protected]
      2. From the account that owns the pipeline, go to settings and transfer the pipeline to the new team.
    • activate automatic deploys after connecting the account on Heroku

*4. Azure project setup (NOT relevant for all projects)

The goal of the setup is to have the client owning their own directory with billing. However, if we are on an initial phase where we just want to put an environment up and running, we can skip step 2 and temporarily create the project under Abtion’s directory.

  1. As admin user on Abtion Azure Active Directory
  2. (optional) Create a Subscription with the client’s billing
    • Start with free trial
    • add client billing info and credit card info (unless not possible, add Abtion’s until the Client can take over)
    • Under Cost Management, add invoice recipient (client as default, otherwise [email protected] (not possible to add [email protected]))
  3. create a Resource Group containing the project name which should be used for all project resources
    • If you skipped steps 1,2 and 3, use “abtion-general-subscription” when selecting the subscription.
    • from the *Resource Group, go to Access control, click on ‘+ add role assignment’
  4. Update the Asana licenses overview as per Purchasing licenses and memberships
    • If it is using “abtion-general-subscription”, add a due date on an estimate on when you believe the subscription should be transferred to the client. Bear in mind that Abtion will be paying for the client’s subscription until then.