nerdgeschoss Guide to the Galaxy

Hello and welcome to nerdgeschoss GmbH. This document is here to help you find you way around the company, gives you all needed contact data and a general overview on how we work.

The Why

Company Values

How do we make decisions? What are our strategic movements build on? We tried to define six core values that we want to base our decisions on.

🔝 Always Raise the Bar.

We strive to create awesome work that we can be proud of and others look up to. We never stop improving ourselves.

🧙‍♂️ Be Gandalf!

All heroes need guides. Help others achieve their goals. Empathise, care and challenge.

🎟 Solve Problems, not Tickets.

Don’t create solutions for problems that do not exist. Ask better questions, listen and repeat.

🚪 Be open, be Honest.

Honesty is the foundation of good communication. Show trust and respect for each other by always choosing transparency over secrecy.

🧟‍♀️ Bring Your Whole Self to Work.

What makes you weird and special makes you memorable. And not only that, it makes you authentic and original. This is your superpower.

A Short and Incomplete History of nerdgeschoss

nerdgeschoss GmbH was founded in 2013 as a legal entity as a project of Christian and Jens. Before they worked as colleagues in a design agency called nulleins. From the beginning on we had a focus on apps, mobile and ux while the term responsive design wasn’t even a buzzword yet. During the first years we focused on native and hybrid apps (iOS, Mac, Android) while spending the majority of time wrestling with Wordpress. In 2014 we joined a Startup called MyLane, trying to disrupt the point of sale of german local retail with iOS based point of sale systems. As it turned out this was quite a nice idea (as Square proved a bit later), but failed quite badly for us. Recovering from this fail nerdgeschoss pivoted back to the initial idea: Doing serious applications instead of Wordpress pages and startups. We started taking Ruby on Rails as our main stack and extended it in 2017 to use React on the frontend, targeting companies from startups to bigger corporates. This is where our technical mission statement came from: Build solid and maintainable software that is focused on helping and delighting the end user.

The How

Your First Day at nerdgeschoss

You arrived at the office, signed your contract and probably already had your first coffee. Now the fun can start! After receiving your new MacBook and other hardware, you will get access to a lot of web based tools we use for collaboration.

Gmail / Google Calendar

The first thing that will happen. You get a Gmail invite for you personal [email protected] address. From now on please use this email account for all business related signups and conversations. This is an email account to document your work, so we reserve the right to have a look into it if we urgently need any info from it (just store your vacation bookings and loveletters in a private account, please 💁‍♀️). This invite also includes a google calendar. All calendars in the company are connected and public to each other. If you’re interested, you can add others from the web interface to your view (this also translates to Calendar on Mac/iOS).

n.U.T.S.

n.U.T.S. stands for nerdgeschoss Unified Tech Stack, our common architecture for Rails applications. You can find out all about it here.

GitHub

All collaboration happens in GitHub. We have a company account for both private repos for our customers and public open source repositories. You will be added to the developer team and therefore will have admin access to all repositories (this is intentional - waiting for an admin should never be a thing). More on how we use Git later.

Slack

This is were internal communication happens. Every project has its own channel. Also make sure to subscribe to #office to communicate with everyone in the office. More on the slack workflow later.

Harvest

Our time tracker. Most of our projects are billed by time and material to our customers, therefore it’s important to track your time every day. We do not use the time tracker to check how many hours you spend in the office, but just to bill our clients (so please don’t make up numbers here to look like you’re working more - we won’t see it anyway). You might want to install Harvest for Mac which allows you to start time tracking via hotkeys.

Heroku

If you survived the job application process you probably already touched Heroku. In our experience it is the easiest and most stable hosting solution we tried so far. We use it for everything from simple Wordpress to microservice-backend-apps. Have a look at Heroku Review Apps if you need more arguments for it. We use Heroku Flow as a development style. The rule is simple: Whenever you don’t have an explicit reason not to go for Heroku, always go for Heroku and don’t host it yourself.

nerdgeschoss App

The nerdgeschoss app contains everything company related you might need at https://app.nerdgeschoss.de. Here you can check on your paychecks, remaining holidays or sprint performances. This app is open source and available in our GitHub account. Feel free to do pull requests to improve it.

Jira

This is where project management happens. There is an All Projects board that contains everything that is currently in worked on with filters for each project. More about columns below.

Other Software we are Using

1Password

Contains all passwords and software licences you might need. Ask Christian or Jens for access. You can get the current version here.

Tower
Figma
Visual Studio Code

You got everything setup correctly? Time to get some work done!

Your Time in the Office

We’re here to help you grow and get the best work possible done. If we can support you in any way with that just let us know. This includes everything from drinks to software licences you might want to use or additional hardware.

Drinks and the Snackbar

For all employees the snack bar and drinks are free.

Wifi

For credentials to our Wifi, check 1Password.

Using the Meeting Room

There is no calendar for the meeting room as of now, so it’s used on a first-come-first-serve basis. If you need to reserve the room for specific meetings, just let the others know via slack.

The meeting room has a 55inch 4k TV with an attached ChromeCast, so you can mirror your screen or individual windows and tabs without installing additional software (assuming you have chrome installed). On the other side of the room you will find a magnetic whiteboard and markers. If you use the board, please clean it after the meeting. Those markers have the nasty habit of becoming quite permanent over night and are super hard to remove the next day.

Where to Work

We pride ourselves on not only being remote-friendly, but remote-first. All processes are designed to support an asynchronous workflow across timezones that should help you to adapt work to your life - and not the other way around. There are no minimum office days, you can individually decide where to work.

Remote

Feel free to work remotely as much as you want; there is no minimum of days in the office. We have some recommendations for you though:

  • Make sure you have a productive environment. That includes a decent office chair and desk - your body will thank you for it.
  • When you are in calls, you need an environment where others can actually understand you. A busy cafe might not be the best place for this.
In the Office

Feel free to switch between tables whenever you want. We try to keep all tables equipped with the same hardware so it’s easy to switch. If you feel like it, you can also work in the kitchen, on the couch or on the balcony. If you have long phone calls, it might be a good idea to switch to the meeting room or the phone booth to not disturb the others too much.

When to Work

Work at nerdgeschoss happens asynchronously, there are no fixed working times. We believe that work should adapt to your life and not the other way around.

Nevertheless we have some rules to make working (especially across timezones) easier:

  • during the sprint you should reach an average of 7.5 hours per workday, which accumlates to the a normal 37.5 hour work week. If you want to split this across 6 or 7 days instead of 5, this is also ok; we're interested in outcome, not in you having busy-work.
  • We encourage you to reach 6 billable hours per workday. This leaves 1.5 hours of sprint meetings and working on non-profit projects or personal development.

Core Meeting Times

To simplify the planning of required team meetings, there is a Core Meeting Time from 10:00 to 12:00 (Berlin time). Do not schedule any other appointments and make sure that you are available during this time. This also includes any private meetings or doctor appointments (these can usually be scheduled to a later hour or if it's really urgent you of course can take a day of sick leave). This way we can schedule company wide meetings without having to schedule with each person individually.

At the End of the Day…

You’ve done your best for today and it’s time to head back home and enjoy some time away from the keyboard. Before you leave please check some things:

  • Write a short paragraph about what you’ve done today and plans for tomorrow into The Daily Nerd channel in slack. There’s also an automatic reminder pinging you at 5pm to not forget about this (this basically replaces daily stand ups).
  • Check your time tracking and add missing entries. If you forgot to track your time, we can’t charge the customer!
  • Clean up your workplace. Put bottles back into the trays, trash into the bins and used dishes into the dish washer. Your place should be ready to be used by another person.
  • If you’re the last one in the office
    • check if all windows are closed
    • double check that the doors to the balconies are closed
    • turn off the light (there’s a huge button next to the door that turns off all lights)
    • lock the door after you leave via the app

After you left, don’t bother with work. Your free time is yours, so you don’t have to answer slack messages or emails (if we manically call you for 15 times and leave hundreds of slack messages pinging you, it might be worth checking in with us though 🙄).

Over hours are neither expected nor seen as a good thing. Focus on the time during work, work efficient during the day and use your free time to restore your energy. And if you still stay in the office we might kick you out at some time 🚪.

Your Week Comes to an End

Every second friday during Review we recap what we achieved during the sprint together. We discuss impediments and their solutions and how to continue during the next sprint. This is also the moment to showcase your work, present libraries and helpers you’ve written during the week and give each other feedback.

Vacation and Time Out Of Office

Vacations and sick days are managed via the nerdgeschoss app.

Calling in Sick or for Personal Reasons

As we’re all not machines, unforeseen things can happen. First things first: If you’re sick, stay home and take care of yourself. No one will be happy if you get worse by forcing yourself to the office - or worse: make your coworkers sick too. So stay in bed and take care of your health.

Nevertheless there are some legal/organisational parts to this too: If you are sick, tell us before the core office hours. If you’re sick for more than one day, we need a notice about this from your doctor from the second day.

Visiting doctors or related services during work times depends on the severity of your condition: You have fever and can’t breath? Probably you shouldn’t be in the office in the first place. You’re going to your quarterly health checkup or yearly dentist appointment? Do this outside of work hours. We offer quite flexible core working hours, so it should be possible to shift your appointment accordingly. Keep in mind that time at the doctor is not working time (unless he writes you sick, in that case it’s part of the sick time).

Working on Tasks

The following are guidelines to help you coordinate your work with your team. They are just general ideas and can always be adapted to specific project needs.

Planning the Work

Any ideas and customer requests go first to the Shaping status of Jira and stay there until all external factors are determined and all open questions are resolved. This usually involves talking to the customer, creating mockups or doing user research. During this time we might assign a Shaper to the story who is responsible for coordination and making a plan how to implement this. Once a feature is clear and decided to be worked on, we estimate it together as a team in story points. You have any ideas what you would like to change about a project? Throw it into the "Shaping" status.

Estimated stories will get unassigned and move to Todo. We use this column to fill our 2-week sprints (always from Monday to Friday one week later).

What to Work on

All tasks in the task board in the “Todo” column that are not assigned to a specific person can be worked on. If there is a task marked as “important”, you should consider taking this one first. Also make sure to check if you can help your peers in a peer review before starting new work. If you find something you want or need to work on that is not on the task board, create a task in the backlog and advocate to get it into the next sprint.

Starting a new Task

Pick the card and move it to the In Progress column and assign yourself. Next up, create an empty pull request (in status draft if possible) in the project. Your branch should be named feature/KS-123_task_i_am_working_on - make sure to include the issue number. Give that pull request a descriptive name (“Bug Fix” is not descriptive!) and add either the ticket number and link from Jira or a proper description to this pull request (again, “fixing a bug in cards” is not descriptive!). The early pull request is there for your team to see what you’re working on and prevent duplicate work. If you create a pull request with the Jira number in the title, a bot will automatically move the ticket to "In Progress". To simplify the process, you can also use the pull-request gem which installs a pr command.

Finishing a Task

Your work is done, now it’s time to integrate it into the project. Have a look at your pull request in GitHub and check the following:

  • are all tests passing on the CI server?
  • (if existing) open the deployed review app and check if your feature is working as intended
  • is your branch up to date?
  • have a look at the committed files. Did you check in anything that shouldn’t be there? This is also a good opportunity to review your own work and check if this is actually the best solution to this problem.

If you’re happy with your work, now move the corresponding task to Review and mark your pull request as ready for review. If you think that some specific coworker would be good for a review, request a review directly from him/her (you can use the GitHub feature to request a review). Do not request a review like that on every PR from each coworker - you don't want to spam their inboxes.

Peer Review

Peer Review and QA happen in parallel.

This state is designed to have your code reviewed on a technical level. We use GitHub’s review feature to leave comments directly in the changed code. If you request a change, move the issue back into the Todo column.

Things to look out for as a reviewer:

  • Reviewing code has precedence over coding new features. Always first check for open peer reviews before starting something new.
  • Does the code match our coding guidelines?
  • Did you try out the feature as a whole? This means running it from a review app or running it locally. A grean CI status does not mean that the feature actually works - so try it manually.
  • Try to break it. Put strings into number fields and numbers into string fields. Click things that are not supposed to be clicked. Check options that don't work together and see what happens.

Once you're done and everything is fine, approve the PR in GitHub.

Quality Assurance

QA means testing the feature once more before the end users see it. This happens in parallel with code review to not block each other.

  • does the implementation feel right? This is mostly about user experience and behaviour in real world scenarios like performance, usability, accessibility, …
  • does the implementation look right? This checks if the feature looks like the design that was offered upfront.
  • does it fit the product vision? Did it use any technical assumptions that we cannot keep up at a later stage?

Once you're done and everything is fine, approve the PR in GitHub.

Release

When the pull request reaches the Peer and QA approvals, it is time to merge. The last person to approve a PR is responsible for merging into the main branch (usually with a squash commit) where it’s directly picked up by deployment scripts and deployed to staging/production servers. This also means nothing should be merged before it is finished, including translations, icons or other assets. Once the feature is released, move the issue to Done.

Salary and Compensation

To create an inclusive work environment and reduce bias in salaries, we use the nerdgeschoss Human Growth Framework to determine salaries.