Our Playbook.

Our goal is to create a working environment that allows us to learn, to teach, to reach our goals – both corporate and personal, and to have fun!

Operations.

 Friendly and positive attitude

 Willingness to learn and to teach

 Attention to details

 Clear communication

 Responsiveness on Slack

Daily checkins in the project-related Slack channel: what was done the day before, what is planned for today, and what obstacles/problems you faced. Checkins are super-important, it shows the progress to all of us.


Development.

Find a balance between overthinking a feature/missing a deadline and delivering a shitty code: think how to implement a certain thing in a best way, but realize that at this moment you might need to take some shortcuts, but then get back to them later to make it right.

Make your habit to refactor as you go: if you see something that is not right and can be improved, please don’t hesitate to include it in your commit! Your future self (and present myself!) will be very grateful.

Changes are made in a separate branch that has a Jira story id followed by a short description, ie: vid-18-description-sort

Commits have JIRA story id in the beginning, followed by a short description of the changes made, ie: [VID-18] Sort by Description field in Admin panel.

Pull requests are made from your feature branch to master.

One pull request (PR) a day – this way we ensure both granularity and consistent delivery; your performance is judged by it

Time is tracked in Jira using its time-tracking feature, at least once a day

Each public function in a class has a unit test.

Code styling is universal across a single project: function/var names, single/double quotes, spaces/indents, etc.

Code styling is enforced using IDE-based or build-based (even better – both) linting tools.

Don’t comment things out without a proper comment of why it was done, and how you are going to fix it. If you truly need to remove something – just delete it. We’re using a VCS after all! Can get this piece back if we need to, at any time.

CI is used – test/linting is run, and project is built on each push to master.

Project is Dockerized. This allows us to develop and deploy software in a closely contained environment, avoiding lots of potential problems with library conflicts, OS conflicts, etc.

If you’re stuck, don’t hesitate to ask! We all want to figure it out ourselves, I know. But please, don’t spend more than 30 minutes on something you can’t do! You’ll be surprised how much easier it will be with somebody’s help. Also, you’ll feel better!


Workstation Setup.

OS X is preferred, Linux is a second best choice, Windows won’t be tolerated!

Must encrypt your startup OS X disk with FileVault. For PC-based hardware, make sure you have a password on BIOS, and that you disabled booting from external devices.

IntelliJ PyCharm / RubyMine / WebStorm / IDEA

screen or tmux as console screen manager

zsh + oh-my-zsh as your shell

Homebrew for package management on OS X

Slack desktop client

Skype. Wireless headset is required! Otherwise we’ll have lots of problems with call quality, especially on conference calls.

Gmail / Google Drive / Google Calendar

TeamViewer for being able to help (or be helped) remotely

Docker and Docker Compose

virtualenv for Python

nvm for Node.js

rvm for Ruby/Rails

Amazon AWS

…and many others!