This is the general flow in the PHP family at Clicksco. As of June 2014.
As an international company the general business relies a lot on email, Basecamp and Skype however as a tech team we have an arsenal of different tools and services we use and I would like to share our processes with you.
Instant Messaging and Beyond
We used Campfire for a long time; however more recently have moved to HipChat. Everything, and I mean everything, is centered around HipChat. We have rooms for general discussion, Design, Frontend, internal frameworks, PHP, .NET, Laravel, Music, Infrastructure Management, Project Management and the most important rooms of them all, project rooms.
Like GitHub, we like to centre everything possible into project rooms and have Clickbot (our version of Hubot) running in all rooms. Although we do not rely on Clickbot as much as GitHub relies on Hubot, we do rely heavily on the ethos that if it is not in a project room then it is not happening! Most of the team have the HipChat app on their mobile so if they are away from their desk and you @mention them in a room they will get a notification. It is then up to them how and when they respond.
Source Control & Project Management
As a company we use BitBucket as our central remote repository solution; however in the PHP family we have our primary remote repository (origin) set to a Codebase repository. Codebase classes itself as “Professional code hosting, with a complete suite of project management tools built-in.” Every project we work on has a Codebase project and that project may have one or many repositories. The most used feature in Codebase is the ticketing system, which we use to assign features, enhancements and bugs to members of the family. We then set ticket priorities and can give them relevant tags. Each Codebase project is then linked to a HipChat project room so that we get notifications on commits, ticket creation and ticket updates.
Agile Software Development
We follow the basic principles of SCRUM and so our day starts with a standup outlining what we worked on yesterday, what we have planned for the coming day and highlighting anything that is blocking progress. The standups are quick and done via Google Hangouts (because HipChat does not yet support team video chat).
Throughout the day HipChat is always open and is our central communication tool throughout the entire tech team, not just the PHP team. With the recent launch of individual video calling in HipChat we frequently have one to one calls to discuss ideas, issues and problems. HipChat also allows us to share our desktop screen with the other caller. Although we do use HipChat for this, we also frequently use Screenhero which has the added feature of allowing live collaboration. It is sometimes much easier to just let the other person click and type. Usually a request for a video call or screen share will be done in a project room in HipChat so itis nice to have the new ‘/hero @jamesmills’ command for HipChat which will open a Screenhero session with the user specified.
Source Control Workflow
All the tech teams at Clicksco use Git and in the PHP family we follow GitHub Flow. We all work on branches which are synced remotely on each commit. Once we are happy with a new feature or a bug fix, we create a merge request in Codebase and set one of our fellow family members to be the person responsible for the merge. This brings us nicely onto one of the most important steps in a projects lifecycle: Code Reviews. Every line of code committed will get reviewed by at least two developers. Code reviews are a fundamental part of our process. A code review helps to bring our team together, widen knowledge, pull everyone to the same level, give a sense of ownership and achievement, catch bugs, discover new feature enhancements and possible refactor opportunities.
Deployment is always an interesting subject and I still find it staggering that in 2014 people are using FTP to download/upload files manually. For the situations where we have to use FTP to deploy to server we have a DeployHQ account (by those nice people at Atech Media). Our main deployment tool at the moment is Codeship. Codeship is proving to be an amazing tool and I would recommend you to try out their service, they have a free plan.
Once something is merged into the master branch, Codeship takes over. Codeship will run tests on all branches. If the merge is made on the master branch and all the tests pass, then Codeship will then run custom deploy scripts. As we have a number of projects deploying to a number of servers we keep all our deployment scripts in source control.
Obviously, whichever tool is being used, everything is set to report back to the project room in HipChat. You can literally see the commit, merge, test status and deploy result just by sitting in the HipChat room.
Once a system is running live on production we make use a service called BugSnag which reports any errors and exceptions on a given environment. For example, if an exception is thrown, then BugSnag will pick this up, automatically create a ticket in Codebase and notify the project room in HipChat. A member of the team will jump on the ticket, update its status, create a branch, commit code, merge request the branch and code review will take place. The merge will get approved, deploy will kick in, ticket will automatically get updated with ticket reference in the commit message and every single step will get logged via notifications to the project room in HipChat.
Communication tools and keeping up-to-date
We also have rooms in HipChat to discuss things like Laravel. Having things like new Laravel.io podcasts and new lessions on Laracats all fed into a central location is all part of the ethos so we use Zapier to monitor RSS feeds and post notifications into the rooms when something new is released. We are working on getting Clickbot to help us with this.
Is this the only way?
No, not by any means. I wanted to write this blog post to share what we do in the PHP team at Clicksco, at the moment. One of the main reasons I added the month and year at the start of this post is because there is no way of knowing when it will be outdated, probably as soon as next month. We have got to this stage by having a great team who are always bring new tools and services to the table and are willing to try new things. The key thing is that there is a method, there are principles and a procedure. Everything and everyone is open to change, but if you do not have an established process in the first place, you have no process to improve.
We also have a site that documents our flow and our tools that is available to view at http://php.clicksco.com. Please let me know your thoughts in the blog comments.
So that is about it. A brief summary of what we use and how we use it. As I am sure you have established, there is one tool that is a hub to all our activities. Having HipChat, although anything like Campfire or Slack would work, as a central hub has proven fundamental to improving communications and efficiency in the PHP family at Clicksco.
Why the emphasis on a central notifications hub like HipChat? Anyone, at any time, from any location, can go into any project room and know exactly what is happening. You can scroll through the room history to quickly get up to date and you can see live updates from everyone and every tool we use all in one place.
Soon we will be able to use Clickbot to issue more commands from within HipChat, heck we might be able to just all work from within HipChat.