How Zapproved’s collaborative teams drive Agile software development.
We’ve talked in this space about how quickly our engineering teams innovate to push out new software products and features. But how exactly do we structure our teams and communicate within and across teams to drive that innovative development?
Team Structure
Our teams work closely together, emphasizing collaboration, so it’s important to keep them manageable. We try to follow the two-pizza rule, having only five to seven people within a team. We’ve had some growing pains as Zapproved and the engineering division has gotten bigger — and sometimes a little unwieldy — but this two-pizza guideline works well to keep our teams and meetings focused and productive.
These small teams are cross-functional, incorporating software engineers, QA engineers and other roles as appropriate to the project. Teams are loosely coupled with each other, and we have embedded teams for UX and DevOps, but each team operates with a fair amount of autonomy. Our UX team in particular interface with our product teams to determine the key aspects we need to bring to each task and to establish the various touch points we’ll hit along the way.
Development Process
We follow the basic principles of Agile software development. In part, that means we work in two-week sprints, bringing solutions to market and getting them in our customers’ hands as quickly as possible and adjusting as we go to ever-changing needs. Note that even though these work periods are called “sprints,” we work at a pace we can sustain over the long run. Our people are our most valuable commodity, so we protect their productivity!
Any one developer is likely to have a couple of different stories in process at any given time. Each story represents a different work item. This might be a new product or service based on feedback from our product team, such as an added function or a new field. Our product team members are really our eyes and ears: they talk with prospects during sales cycles and with existing customers, so they know what people need and want out of their software solutions. They pass along those user stories to us, and together with UX, we bring those ideas to market as quickly as we can.
Because we follow that fast-to-market Agile development principle, we also regularly course-correct some of our technical debt from previous products. Basically, as we get further into understanding a user problem, we’ll often develop a better solution. Keeping that routine maintenance ongoing ensures that our products continue to function well as a problem evolves.
Collaboration
At Zapproved, our highly collaborative environment is what makes this Agile development work. We aren’t just code monkeys, sitting alone in a dark room banging out code. Instead, we emphasize the human side of software development — both in terms of our projects and in terms of developing our staff.
Our daily rituals are based on Scrum methodology, ensuring that we maintain a regular cadence of Agile, iterative development processes. This centers around our daily stand-up meeting, where we review our progress and identify impediments, keeping small problems from mushrooming into big ones. One thing I emphasize to the teams is that their productivity is our highest priority. If a developer has encountered a roadblock, he or she can pull me or any engineering manager out of a meeting. Keeping that forward progress going is a higher priority than anything else we might be doing.
We use pair programming on an ad hoc basis, both to solve specific problems and to build in some on-the-ground mentorship. Having the option to pull in a partner for pair programming means that our more junior team members who are just starting their careers can get some direction from our senior developers. It keeps those experienced people energized and thinking creatively, too! We also use tools like Slack to ensure that the right folks are having the right conversations in the right channels to maximize their daily progress.
Finally, we focus on continuous improvement, so we build in feedback loops to ensure that our teams are always getting better, both as individuals and as a collaborative team. We have regular retrospectives where we consider issues that we encountered in previous projects and problem-solve around them to make sure we do better next time. Recently, we improved our QA process by looking at some of our documented test cases. We realized that having the whole team, including developers, pitch in to complete QA work prior to a release created a stronger product.
Conclusion
By working in small, autonomous, cross-functional teams and collaborating in a variety of ways, both scheduled and ad hoc, Zapproved can innovate at a ridiculous yet sustainable pace. We can often solve a software problem within just a few weeks after an initial comment to a sales representative — keeping our customers delighted!