Note: This post was co-authored by Chad Michel. The rest of this 5-part series can be found here:
Part 1 – What and Why
Part 3 – Maximizing Productivity
Part 4 – Processes Can Be Fun
Part 5 – A Layered Approach To Quality
In our previous post we covered how we think software development shops can instill some sort of culture and processes that help their teams realize the motivations that got them into this industry in the first place. We call it “funability”, and break it down into seven major components:
- Frequent delivery of value to customers
- Being part of a team
- Maintainability of systems
- Effective management of technical debt
- Consistent quality of product releases
- Productivity and efficiency of the developers
- Sound software design
But once we have it defined, what do we do next? While it may sound like most of what we emphasized can be managed through office layout and agile processes, there’s actually much more to it. But at the same time, we don’t want to diminish the importance of these two factors. So let’s start with them.
Who doesn’t want a cool office? Many of us started out in very strict environments, so any kind of laid back environment is a welcome change. But even developers who have only worked in these 21st century, t-shirt and jeans shops are not achieving their full potential with simply a loose approach to dress-codes and office aesthetics.
This isn’t to say they aren’t important. We feel that our space – its layout, amenities, and other flourishes of fun – definitely contributes to not only our culture but our effectiveness and productivity. It increases socialization among the engineers, which is essential for collaboration. Our recruiting efforts are also made easier with our unique space. So because of this we can’t understate the impact physical environment has on getting the right people on your team (and keeping them).
But the spaces in which we work can’t be everything.
Agile is not a silver bullet. Let’s just get that out of the way.
Don’t get us wrong, we believe that it provides one of the best (if not the best) approaches around which to center most software development. It allows our teams to operate lean, fast, and efficient, which are three essentials for nearly every shop but especially those in the startup world.
Like we’ve said before, our use of agile methodologies is not a dogmatic adherence. Rather, we leverage the basic principles and adapt them into our processes when they’re most applicable. And it’s this kind of flexibility that makes us as effective and productive as possible.
But agile methodologies alone are not a magic pill for solving all of our difficulties. This is due to the ever-increasing complexity of the problems that we’re trying to solve with our software.
We came up with this simple table to paint a more concise picture of which aspects of funability are addressed by office layouts and agile processes. As you can see, there are plenty of gaps that need to be filled.
So how do we fill these gaps? Our first strategy is to look at the key roles within our development team that can significantly impact funability.
Key Team Roles
Taking time to reflect on how our teams are thought of and organized has really helped us. It gave us time to be honest with how we can most efficiently function at every point throughout the software lifecycle. From scoping to deployment, we have a really good idea how everyone works together. And by just having this bit of knowledge is essential to our funability.
As you can see, we place quite a bit of emphasis on two main roles: Developer Leads and Project Managers. While obviously everyone on the team is important, there’s special emphasis placed on these two roles. And for good reason.
Strong Developer Leads
Most development shops have the position of “Lead Developer” or “Senior Developer” on their teams. These are usually engineers who (almost always) have the most development experience, and hopefully have great leadership qualities and the willingness to mentor younger or less-experienced developers. But we take this a bit further.
For our “Lead Engineer” role, we give them the duties of the traditional “leader” role and include these responsibilities:
- In charge of maintaining conceptual design
- Maintains the “big picture” of the product
- Responsible for the performance of the product
- Ensure engineers are testing their code
We’re sure that most Leads or Seniors at one time or another have been stuck helping others get Visual Studio set up, guide them in getting familiar with the particulars of your development environment, and other menial “getting started” tasks. We’ve all been there at some point. And while those just come with the position, that is not what we’re talking about. We task our Leads with being the “vision holder”. We need to have strong technical oversight throughout the lifecycle of the projects. Without that, it’s too easy for engineers who are in the code all day to stray from sound principles, established design criteria, and best practices.
So when the vision, design integrity and principles are maintained, funability is increased. Avoiding as many violations of these objectives as possible helps pave a better road forward. Nobody is going to have fun if the project takes a turn down the wrong road and additional work (or re-work) is necessary. We need to put greater emphasis on fixing the broken windows as soon as possible and avoiding breaking them in the first place.
Strong Project Management
The other essential role we have at Don’t Panic Labs is that of Project Manager. They perform tasks that are just as important as the engineers. Without them, we sometimes wonder how far any of our projects would go. Many of their responsibilities include:
- Central communication for the project
- Tight coordination with Lead Engineer, UI/UX, QA, and product manager
- Decision tracking and documentation
- Release plan development
- Task/action item tracking
- Project status monitoring/reporting
- Project health monitoring/reporting
- Information/decision coordination
- Conducting retrospectives
- Management of external communications
- Lead daily standups
- Keep sprint planning to less than an hour in length
But what we consider to be the primary role of the Project Manager is that of “process facilitator”, and this makes them key to funability (although we’re not sure they always think of it as fun). They are tasked with keeping track of all the little project details so that the engineers are freed up to focus on their projects. Once again, it’s all about clearing the road ahead for the developers and removing unnecessary mental weight.
Here we’ve covered how you can use your office space, adhere to your processes, and leverage your leadership roles to increase funability for your teams. But there’s still more.
In our next post we’ll look at the importance of protecting engineers’ schedules and how that helps increase funability by providing long stretches of uninterrupted time to focus.