I’ve worked with engineering teams that have used a variety of methodologies. Here are some tips on a recent approach that worked quite well. It’s an agile/lean/kanban approach that enabled me (the product manager) to work closely with engineering, can be deployed quickly, and minimized waste. This is a supplement to a brief presentation.
1. Above all…
Reduce barriers as much as possible in team communication, development environment setup, branching application code, testing, and deployment.
Measure the time it takes for an engineer to setup their environment. If it takes days or even hours, you’re missing opportunities to reduce waste. Putting in the effort early to get this process down to a few commands that can be executed within minutes frees up valuable time in the future for developing new products and improving the quality of your application.
Along with an efficient environment setup process, engineering teams should always write tests. These are valuable tools that will help you catch bugs early and save time at all stages of the deployment process.
2. Do code reviews
Consider reviews to be the gate that code must pass through in order to be merged. Keep it simple – approve or reject – and encourage reviewers to give feedback in all scenarios. Code reviews are an excellent opportunity for everyone to learn about the new code entering the application but also suggest ideas on how to make it better.
For teams that are doing code reviews, limiting branches to a max of x lines (like 500) has a few benefits.
- Encourages engineers to land code regularly instead of once a week or longer
- Forces people to think more about how to split up the work and ship value more frequently
- Trains the other engineers across projects as they review merge proposals in small chunks
3. Open communication
While email has some benefits as a communications medium, it can really hurt an agile team.
- It’s not real-time
- Can easily lead to silos of information
- Becomes another system to manage access
There are many simple, low-cost solutions available that foster open communication within teams.
- Open bug trackers empower anyone on the team or in the company to report issues. Bug reviewers should reply with honest feedback on the bug’s status and progress toward resolution (or “won’t fix”).
- Distributed Version Control Systems (DVCS) like Git, Mercurial, and Bazaar are a key component to transparent development. Use them.
- Wikis, text chat (e.g., IRC, HipChat), and even video conferencing (e.g., Google Hangouts) and screensharing from Google Apps helps teams collaborate openly and multi-task whether they’re in the same office or on a different continent.
- Finally, tools that simply share basic text like pastebin, gist, and etherpad can save time and enhance collaboration.
4. Continuous integration
Invest in continuous integration (e.g., Jenkins). It will make your operations more efficient, shine a spotlight on problems earlier, and save you a lot of pain in the long run. Use something like Selenium to constantly test your application automatically and raise flags when failures occur. Ensure all team members can stop the line and fix the problem when important issues are identified.
Use multiple environments in your architecture for testing and getting feedback on enhancements. A staging environment enables testing of enhancements prior to a production release. For this environment, using a copy of the production database will give you more accurate test results without the risk of damaging live user data. An edge environment using the production database and accessible to everyone is also useful to test new features before they’re finalized.
Frameworks are wonderful tools that help your engineering teams move fast. Unfortunately, making poor choices (e.g., using multiple frameworks that deliver the same functionality) can result in higher long-term maintenance and support costs and slowly chip away at the efficiency of your team. So make careful decisions to keep your team agile and contribute any enhancements upstream.
7. Final bits
Do daily standups because it’s a fast way to keep everyone on the team in the loop. Keep it to 15 minutes. Each person should share what they did and what they’re going to do next.
Periodically look at your development processes. Waste is sure to creep in so identifying and removing anything that isn’t directly adding value is a good thing to do every now and then.
Have a regular cadence for your releases and target each piece of work to those releases. Having a defined schedule will help to keep the entire product team (including marketing and sales) stay in the know about when features will be released.
I hope this will help your teams to be more agile and enhance the development of your extraordinary products. Best of luck!