Home

Awesome

General Inaka Development Guidelines

Introduction

This document describes the general guidelines we expect all our members (a.k.a. inakos) to comply with in all of our projects. For code guidelines and best practices regarding specific languages, please refer to the corresponding inaka/[language]_guidelines github repo.

The Inakos

Inaka is a community of open-source enthusiasts. This community is not closed to developers, some of our members are project managers, QA specialists, etc. We manage our community collaboratively and we communicate through our private Slack workspace. The community was originally formed by all ex employees of Inaka but now it's open to anybody else that wants to be part of it.

Joining the Community

To join our community you have to be invited by a current member, that will then become your sponsor. You can get an invitation by contancting one of us directly or you can send us an email requesting an invitation. Once your invitation is accepted, you'll be temporarily added to our Slack workspace. Then you'll be received by everyone and we'll have a conversation around 3 introductory items that will allow us to know you better:

After that conversation, we'll have an internal meeting with your sponsor and the inakos will decide if they let you in. If so, you'll then get access to all of our stuff, including this github organization, our private slack rooms and other resources.

Specific Guidelines for your Language

In this same repo we also have several other guideline files, specifically tailored to some languages or platforms (e.g. iOS, Android, Erlang, Elixir, etc.). Check them out to find out how we work in those particular cases.

How we use Github Issues

For project tracking we use Github Issues. Below you'll find our particular rules on how to use this system.

For Issue Reporters

For developers


TDD

We encourage the use of TDD as a method of development as much as it makes sense. The reasons behind this approach are:

When to incorporate TDD

TDD is not suited for all scenarios, but it is recommended when:


Version Control

Github

Commit Messages

Good commit messages serve at least three important purposes:

The blog post "On commit messages" has a nice discussion about commit messages.

Tip: if it seems difficult to summarize what your commit does, it may be because it includes several logical changes or bug fixes, and are better split up into several commits using git add -p.

Commit Rules

Check-in/push rules for the main repository/branch are the following:


Development Flow

We are an agile development community. This means we tackle projects in an iterative fashion and show results early and often as we progress through a project.

From a project day to day point of view, our developers work with Pull Requests and Code Reviews. To any one of our developers, the process (in a nutshell) is as follows:

Note that, mostly depending on the language and the product, there might be some exceptions in the aforementioned workflow, but the PRs and Code Reviews will always be there. We embrace code reviews for a number of reasons:

To get all the best from code reviews, while either submitting or performing a code review, keep in mind the following points:


Project Documentation

All github projects are required to have a clear and useful README file on their root folder, so that it's properly displayed on github. Besides that, all products (i.e. applications, servers, etc.) should have a wiki in the associated github repository that must comply with our wiki guidelines.


Core Values

Below you can see the list of our main values. The ones we think are essential to our culture:

  1. Concentrate on the task at hand.

    Focus on your tasks above all. Deliver on time, but never compromise quality. Follow the processes, but within reason (don’t create a detailed design and write a manual for a code review project, for example).

    Document as much as required, and keep your colleagues informed about the project experience (issues, problems and solutions, technical forums, progress reports, meeting minutes to log customer requests).

  2. Don’t complicate things, keep your design as simple as possible.

    Make it work.

    Make it beautiful.

    Make it fast.

    In that order :)

  3. Respect your colleagues and customers.

    Write code so that other people can read it with pleasure.

    Respect the coding conventions pertaining your language.

    Don't hide the problems, be honest.

    Be nice to people.

  4. Never break the master branch.

  5. Version control your code – Git is your friend.

  6. Do code review – use pull requests.

  7. Build your code – don't create a pull request without testing it first.

  8. Use the right tool for the job

    When in doubt, prefer standard and proven tools over the last shouts of hipster fashion.

  9. Report the project’s progress.

  10. Share your knowledge and experience, and learn from others.

    Take notes on the wiki as you work. Share knowledge with your co-workers. Do post-project summaries. Write down stuff you have learned and make it publicly available.


Communication

A lot has been said about roles, procedures, what to do, what not to do, etc., but sometimes even methodically following all of these guidelines is not enough to ensure the positive outcome of a project. Most of what we've talked about here can be easily fixed if problems arise. You can always move code back to a working state, undo a commit, improve your estimates, etc., but what is very difficult to fix are issues that arise from a lack of proper communication.

At the start of a project, things are usually fine, but as it advances, you might end up losing track of what your responsibilities are or what the other team members are up to. They are, of course, focused on their own tasks, but with no communication between team members, it's easy to get lost in your own little world and loose focus of the big picture. So, make sure you don't get too deep into your own tasks and forget about the other people. Try to keep track of what is being talked about in the chat room instead of just showing up when you're mentioned. Do your best to listen and demand to be listened to. Don't be afraid to talk to your teammates and let them know what the status of your work is, if you think you're not going to be able to deliver a task on time, etc.

This is not only valid for developers. The same goes for Project Managers. If you can anticipate a storm is coming, don't wait for the rain to pour to let the clients know. Golden rule is: Never keep users in the dark. Make a mental note to periodically send them a status update, so they're not only involved in the project, but they can also feel like they share ownership of it.

A successful project will most likely be defined by this item alone instead of the actual bits and bytes.