Automate work as much as possible. Using CI to automatically do releases and investing time in automating other manual tasks is crucial for delivery. Manual tasks are both a huge drain on morale and prone to errors. It’s much easier to give engineers a bug to fix in an automated tool than to ask them to do the same thing multiple times.
Work with smaller, iterative pieces. Breaking work into smaller chunks, iterating frequently, and indicating priority more clearly within a milestone enables better predictability for what’s going to ship. Planning becomes easier, because individual issues are smaller, so it’s easy to shuffle issues around if something unexpected interrupts other work.
Use feature flags. Rather than using a giant merge request to make every change for a feature at once, which is harder to review, update, and keep up-to-date with the master branch, consider developing more features behind short-lived feature flags.
Measure the impact of components. Measuring impact can help determine whether a process either doesn’t help out that much in the end or helps out infrequently. In either case, the net benefit can be small, but the pain it adds (in terms of how much extra time you spend trying to ship) makes the overall impact negative. If you can’t measure impact directly, you have to be willing to experiment. Try things, see how they work, and decide if you should keep them or not. It’s important to remember that experimentation doesn’t mean process creep - the default end state for an experiment should be “let’s never do that again,†unless there’s a strong sense of value in it.
Communicate and automate where possible. Automating how others get a finished product before releasing it (e.g. create a package on click) and broadly communicating how to work with a team can result in better decisions and faster discussions.
Develop a training program. Creating a training program to help engineers from other teams perform reviews can reduce cycle time for those teams that regularly depend on the Database team. This strategy has the added benefit of giving the Database team more time to focus on their own work.
Use project management tooling. Consistent project management tooling ensures consistent board configuration that behaves the same at every level, meaning that data rolls up to one top level board which contains a snapshot of an entire team, ensuring that prioritization is clear and workload is transparent.
Spread triaging. To spread the load of triaging across teams, use triage-package. Here is a recent example of how we used triage-package to lessen the burden on one team.
Have more focused milestones. Creating focused milestones can reduce context switching, since team members can concentrate on specific aspects of a feature.
Work on multiple items. Having a list of multiple items to work on during each release cycle helps team members easily transition to another task rather than remaining blocked when waiting for feedback.