1. We do our work using Pull Requests
We use feature branches and Pull Requests to document our work on a specific feature. Every task in our issue-tracking app (we’ve recently moved to Jira after using Pivotal Tracker for years - read why) is connected to a pull request to facilitate the easy understanding of the context behind the implementation. Additionally, thanks to Github’s features, we use static analysis tools which inform us about inconsistencies in code style and security issues on a per-Pull-Request basis.
2. Code review
Even though we’re sure that our developers create good code, we don’t want them to feel pressured by being the only person responsible for it.That’s why all Pull Requests are reviewed by another member of the team (a teammate, not necessarily a lead developer) - there’s no merge to master without the go-ahead from a second developer. Two pairs of eyes are better than one.
3. Continuous integration
We’re always up-to-date with what’s happening to the code. Every pushed commit goes through CircleCI first. CI is the practice of running a series of checks on every push to make sure it’s always in a good state, and to make sure we’re alerted as soon as possible if it’s not. If CircleCI detects a failing test and the commit fails to reach the next step - we drop what we’re doing and fix the existing bugs first.
4. Automatic deployment to integration and staging environments
Every Pull Request builds an integration environment where we can see changes from a given branch in action without worrying that other
features we’re working on might get broken. It gives our QA team a place to test the implementation - they can mess around in this environment and add comments/suggestions if something’s wrong. We won’t deploy the changes if they haven’t been accepted by our QA team. If our Pull Requests are merged to master - we push the changes straight to staging. All team members are aware of the fact that what is on staging is the current version. This helps us eliminate questions like “Where are we now?”, “Is it already done?” or “What are we doing next?”.
5. Strict tracking in Jira
JIRA is a project management tool of our choice. It allows us to manage our workflow extremely efficiently, as it was created with Agile development teams in mind. Every commit pushed to staging is supposed to be connected to a flow in JIRA, and everyone is supposed to have tasks open in there, indicating what they're working on. As a result, both developers and stakeholders are always on the same page in the project and can comment on current tasks.
6. Regular production deployments
We do our best to keep our codebase clean and to make sure that everybody realizes that what we commit will go to production very soon.
As a result, we insist on doing production deployments as frequently as possible. Thanks to this approach, all the stakeholders can see steady progress in the development process.
7. Project chatroom
All the ingredients of the Netguru development process listed above are integrated with Slack.
Slack is an online chat app that combines notifications from various tools. One such tool is Rollbar, which we use to identify bugs in production and to collect all notifications concerning the production, i.e. information about new deployments, recurrent bugs, etc.
8. Weekly uptates
It’s very important for us that our clients know how much our team contributes to the development process. That’s why every Project Manager writes a weekly update email on Monday to let everyone else know what was accomplished during the last iteration, what’s planned for the next week and if there were any problems in the workflow.
9. Time tracking
It’s important for our clients to know how much time we spend on a given task or project because we use the time & material model and charge only for the developers’ services. We use Toggl to accurately track the time and workflow of tasks. This helps us assign tasks and projects to different periods and prepare transparent reports about their workflow.
10. Flawless communication across time zones
A vast majority of our clients come from outside Poland. Moreover, many of them reside in distant time zones. We’re aware of the fact that while working with long-distance clients, good communication is crucial. To successfully manage the workflow process and keep each stakeholder informed, we have established daily instant communication via Slack and weekly updates via email as part of our standard procedure.We keep ongoing discussions concerning projects on dedicated Slack channels integrated with all the tools we use - Jira, CircleCI, CodeClimate, Dropbox, Github, Google Drive, Hangouts and others.
Establishing a transparent set of rules followed by everybody at Netguru has significantly improved our workflow. By sticking to them, we have managed not only to limit the number of misunderstandings during the development process,but also to get the most out of the time we spend on a project.