Building web applications and websites is often a complex and time consuming task which requires a coordination of many different activities. To manage this we use various systems and applications described in this article.
The below is described as of the time of writing the article. We continuously improve, change and test our processes and tools to achieve the following:
- eliminate repetitive tasks in favour of programs, systems and scripts
- increase the speed and quality of programming
- improve communication within the team and with the client
Project management tools
Our main project management tool is Redmine (http://www.redmine.org) which sits at the heart of each project. We use Redmine to add, keep and monitor progress of all activities on the project. Usually for a website we would create 3 separate 'Redmine projects':
- Backlog/Client - used for communication with the client and for tracking high level tasks. This project allows the client to see progress of work and allows for easy communication ensuring nothing is lost.
- Dev - this is where the team communicates to work on the project. High level tasks are split here into small specific tickets which can be worked on. We would usually use Backlog plugin for Redmine here (http://www.redmine.org/plugins/backlogs). Each requirement is created as Story and then split into small tasks. Task statuses are:
- new - not yet started
- in progress
- code review - the task is ready for code review
- test - finished and ready for testers to test
- resolved - task is finished and code merged to main development branch
- Nonbillable - Vast majority of our projects are billed in a time&material model - clients pay as per hour for the time we spent working for them. Sometimes though we want to add improvements or create tools which will help us working on a project but for which the client did not ask. In such case we would log all time on this project. Here we also log time required to onboard a new developer. We want to be fair and we never charge clients for things they did not order of for time used because of changes in the team.
All the work we do in Droptica is tracked and managed via Redmine. This is also the case for all the projects not directly relating to client work. Eg.
- internal projects, eg this website
- marketing, eg creating content for this website ;)
- administrative tasks (HR and other)
Communication between team members is critical, especially in a company with people in multiple offices. We use Redmine for project related communication but often it's quicker to write directly to the particular person or team rather then wait for them to reply on redmine.
Initially we used Skype for this with chats for projects. Then we moved to Hipchat (https://www.hipchat.com). Hipchat offers cool integrations with Redmine, Github and Bitbucket. This was a great step forward.
This year however we decided to use Slack. Slack offers identical integrations but also has some additional cool features:
- notification settings separate for each channel and separate for mobile
- a bot which allows for creating reminders (eg. about a daily standup)
- "mark as unread" option which allows you to easier return to a conversation
Most of the time at work we spent writing code (PHP, CSS/SASS, JS HTML). In the last years we tested various IDEs. Initially we used Netbeans and Eclipse, then we moved to Sublime with plugins for PHP and Drupal. Since a year now we however use PHPStorm. In our opinion this is currently the best IDE for PHP on the market. It is not free but the cost is quickly made up for in achieved productivity. (PHPStorm has a 30 day trial so can be easily tried out).
We would love to hear how you manage your work and projects. Perhaps you know of better applications or software.
In the next post we will write more about working with code, code revisioning, development environments and testing.