The pandemic and the subsequent interest in decentralizing big cities and shifting toward a better work/life balance has amplified an already-existing problem for companies: finding qualified devs that are close enough to the office to work in person. These factors have led to a supply-initiated evolution of how we manage development teams which are predominantly remote.
However, this change has brought a significant upside: when remote work is implemented in tandem with management that’s mindful of the new challenges involved, it can lead to unprecedented advantages including more satisfied team members, higher productivity, and more cost-efficient hiring and management practices.
A company has to overcome two main challenges to obtain all of these benefits:
- The well-known issue of supply being lower than demand when it’s time to recruit and hire qualified developers.
- Changes that management has to make in order to ensure that remote dev teams are successful.
These challenges aren’t just unique to SMEs and startups: FAANG companies face them too.
At Workana, we solve the first problem from start to finish. With our highly-selective curation process, we vet profiles and technical certifications and conduct rigorous interviews to ensure that every candidate that you evaluate is highly qualified and committed to completing the task at hand.
The second problem stems from the company culture and internal leadership styles. There are three key factors to keep in mind:
1- Establish Clear Priorities
Establishing priorities and ensuring that everyone understands them should always be the first order of business for onboarding new team members and communicating with existing teams. The importance of this aspect is often undervalued. Sometimes companies don’t implement any good practices to maintain this clarity over time.
Everyone should always be on the same page. Every team member should have a full understanding of how to proceed and why. Obviously, communication is key, so any and all questions should be answered about why the priorities are established as such. But at the end of the day, everyone should ideally understand their role without needing further clarification.
Prioritization can be handled in a variety of ways. While there’s no one-size-fits-all solution, everything can generally be handled on two levels. At the micro level:
- In Scrum: Keeping a readymade backlog for the next sprint.
- In Kanban: Keeping the top of the queue prioritized in at least the next 20 tasks (this number will depend on the size of the team and speed.)
- The points above are transferable for all other methodologies.
On a more macro level in the mid-term, it’s important to implement Team Level OKRs that everyone understands, has helped define, and agrees on the priority levels. There are plenty of frameworks available including Radical focus OKRs and V2MOM. What’s most important is that the team can use clearer objectives to prioritize their tasks at a micro-level.
Communication is more than just small talk, ice breakers, and team building exercises. It deals with the way that team dynamics are organized in order to facilitate clear execution without hold-ups or misunderstandings. The goal is to achieve sustainable long-term engagement that’s easy to maintain. It should be natural and not involve a lot of extra busy work.
A few key aspects of good communication are:
- Availability: This element is vital to keeping everyone on the same page about who is and isn’t available at a given time. Availability issues can be resolved easily by keeping calendars that every team member updates when necessary and using statuses in messenger systems (Slack, Microsoft Teams, Skype, etc) to let everyone else know when someone’s going to lunch, at a doctor’s appointment, etc.
- Estimate: Talking in terms of estimates will help everyone on a team stay on the same page. Whether your team uses T-shirt sizing, fibonacci poker planning, story points, or something else, every task should have an estimated completion time. Every team member should also be familiar with reference tasks so they can make complexity-based estimates.
- Assignments: Everyone should know what they’re working on. This is important for creating good team dynamics so the team can reach certain milestones at the right time. It’s also a way to prevent managers from feeling the need to micromanage teams.
- Blocking and tackling: Some dynamics, like 15-minute daily huddles, backlog grooming sessions, planning sessions and retrospectives, help improve the team’s day-to-day tasks and identify recurring problems that can be solved.
- Balance: Higher quantity doesn’t always equate to higher quality when it comes to video calls or synchronous communication. All the synchronous time that’s taken from the team is time that could be used to address the tasks at hand. Maintaining a good balance of synchronous and asynchronous time is key to give every team more time to focus on completing their tasks.
Collaboration helps solve three problems at once by:
- Achieving engagement
- Producing higher quality deliverables
- Decreasing the risk of silos and distributing information so everyone knows a bit of everything
Finding a solution for all of these problems isn’t necessary, but it’s important that your solution covers a bit of all three. Pair programming is an example of collaboration, but doing it remotely can be quite stressful and counterproductive.
However, having a mandatory Pull Request process for every change with required approval can lead to fruitful discussions. These Pull Requests exist in all current versioning systems. Sometimes they have different names (Merge Request, for example), but they all mean the same thing. The person making the change discusses it with others in order to agree on changes in order to ensure high-quality codes and solve the problems that it has to solve.
While this solves the day-to-day collaboration issue, it’s important to incorporate other events in the SDLC (Software Development Lifecycle) that present other opportunities. Revising architecture, holding sessions to design a solution before starting to program it, discussing clients’ real problems, etc. are great ways to achieve engagement, create a stronger sense of prioritization, and reduce silos.
It’s also important to consider and correctly analyze the team structure and seniority diversity. Seniority diversity has to guarantee that the teams’ skills grow sustainably, that everyone has a challenge to take on, and there’s always someone able to correct or improve the source code written by others. A correct seniority distribution doesn’t abuse Junior or Lead roles. Having ten leads doesn’t make things go faster. Having ten junior developers doesn’t keep costs down.
This makes for a rather long list of things to take into account, but a lot of them can be solved with practices that become daily occurrences, and consequently, the time and financial cost of carrying them out drops dramatically.
When starting out, every team member should have the appropriate setup: computers with the right specifications for the work to be done, an adequate Internet connection, a designated home office space, etc.
It’s always a good motivator for developers when the company helps with these aspects. Doing so ensures that the professionals’ concerns are solely focused on the priorities at hand.
**Article written by Ezequiel Fariña, CTO of Workana
You may also be interested in:
- The Benefits of Hiring Remote Talent for Your Company or Project
- What Are OKRs? How Can I Use Them to Increase Remote Work Efficiency?
- How Leveraging Independent Talent Can Help You Scale Your Startup
- Success Story: 3 Reasons Why Remote Experts are Better than Local Companies when Going Digital
- Was Your First Experience With a Freelancer Not What You Were Hoping For? Learn How Freelancers Have Been Going Pro Lately