It Takes a Village to Develop Kickass Software
Let’s face it — software development teams are not just developers — they are tight-knit groups of various skills and experiences put together to work on a software development project. But, if this team is not strong and cohesive, even the best-planned project may fail to meet its objectives.
It sounds like a no-brainer, but assembling a software development team is no easy task. There are many pitfalls you can fall into while trying to build your village. We’ll talk about these challenges and how to overcome them, but first let’s quickly cover several key roles on a software development team:
The Five Most Important Roles in a Software Development Team
1. Product Owner
A product owner is responsible for forming the product backlog and deciding the features that the software application needs to have so that it is in alignment with the business strategy and objectives of the company or organization. The product owner conveys this vision to the software development team.
UI/UX turns the project vision into a visual thing. While the User Interface (UI) design is focused on how the software is laid out, User Experience (UX) is dedicated to the end user’s interaction with the software throughout the customer journey.
3. Software Architect
A software architect is a highly-skilled software developer responsible for making high-level technical design choices and choosing the best technical standards and technologies for the software application. The architect’s design choices will impact the applications extensibility, security, and scalability.
4. Software Developer
The software developer is the heart and soul of the process. The developer writes the code and is responsible for the actual build of the software solution. Within the team there are several sub-roles such as a technical leader responsible for code review and a scrum master — if working in an agile environment. Neither may have direct software development responsibility for writing code but both, along with the product owner, play key roles in ensuring quality code is released on time.
A QA or tester is responsible for Quality Assurance and together with UAT (user acceptance testing) makes sure that the product meets the business requirements, is ready to use, and is guarded against bugs, defects, and errors.
Together this team coordinates and works productively to build the application. But there are plenty of obstacles that can come your way and throw a wrench in your plans on building a highly efficient software development team. As frustrating as these challenges can be, there are ways to overcome them. So, let’s go through some of the most common challenges and the solutions to overcome them. And no matter what you do please consider building out a CI/CD pipeline to accelerate development and deployment.
Top Four Challenges Faced by Startups When Building Their Software Development Team
The market is flooded with developers; according to IDC there were just over 23 million software developers globally in 2018. But finding the right software developer with the right skills is the trickiest part of assembling a software development team. Why? Because there is a serious dearth of professionals with availability and the right skills your specific project needs, such as experience in the language or deep understanding of the application or appreciation for modern software development best practices. And even if you find the right person, you may not be able to afford them. This has become such an acute problem that even the largest technology companies globally, Google, Facebook, Apple, and others use software contractors to build and maintain many of their web and mobile applications.
Building the team from scratch means putting in a place processes to source, engage, hire, train, and retain talent. Investing in building processes like the recruitment process, development process, and also assigning roles and responsibilities requires a significant amount of your time. And for a startup, time is often the most critical metric. You just cannot afford to lose time when you have to focus on other significant aspects of your business, such as business development, product design, and raising capital.
Typically, when an entrepreneur seeks advice on what to do, the general advice will be to hire your own developers so you can “control” the process. Unfortunately, it’s very easy to find and hire a cowboy developer willing to thrust aside good planning for a “just get it done” mentality, which could ruin your life’s dream. And you still have the challenge of knowing whether the person you hired has the right experience set, a collaborative mentality, and best professional practices to build a high quality, scalable application and development team. As a business manager it may be more critical for you to consider the trade-offs that hiring an in-house team may pose for the appearance of control. There are many good reasons for considering nearshore software development as a viable option.
2. Huge Amount of Investment
Keeping a strong hand on cash flow is always important, especially for a startup. Hiring a software development team — either in-house or outsourced — can call for a major investment. But the in-house team, depending on your location, will almost invariably be 2–3x more expensive than an outsourced team.
The costs themselves run beyond just the salary and benefits as you need to have a proper infrastructure in place to execute on managing an internal team. For instance, beyond the recruiting infrastructure, you will invariably want to focus on improving your team over time. This involves training and mentorship. While this is great for the long-term success of the business, these are not the things an early-stage business should be most focused on, especially when trying to achieve commercial success.
3. Non-Optimal Resource Utilization
If developing software is not a regular task for you, you may find your development team sitting idle when there isn’t a constant stream of work for them to complete. So, regardless of the quantum of work, you still have to pay fixed salaries to an in-house team. Beyond the fixed costs, you have to constantly feed tasks to the team, review committed code for quality, test the application and determine whether features pass QAT (Quality Acceptance Tests). That can be a mountain of tasks for a small team stretched to deliver on many different fronts.
4. High Turnover
Turnover is the bitter truth. According to LinkedIn, there are two main reasons for turnover in software: high-demand for talent and rising compensation for talent at all levels. The market is competitive, and every company is on the lookout for good developers. That means your experienced team members who possess highly sought after skills are easy targets. And the competition for talent is fierce, particularly in a world where working remotely, globally, is very easy to do. One secret that we have learned over the years is that when an engineer is unhappy, they will rarely voice their displeasure as you may see in other industries. Instead, they will simply walk out the door with their knowledge of your platform with them. For your sake you can only hope that they documented everything they did before they left.
Four Solutions to Override The Challenges of Software Development
1. Have a recruitment strategy in place to find the right talent
Firstly, you need to have a clear idea of what you are looking for in a developer — this clarity will make your job easier when you are out in the market looking to hire.
Be in places where you think the developers (the kind you are looking for) are present, for example, hackathons, meet-ups, dev-conferences, social media channels, job sites, etc. Finding a developer with Python, React or Node skills may be easy once you know where to search.
Once you get applications for your open roles, screen the resumes carefully to examine if it’s the type of talent you need. Hiring experts with the relevant hands-on experience in the field should be your priority. Shortlist the resumes of candidates who have relevant experience of building similar products and a good understanding of the market too.
But be wary. Oftentimes, some engineers will push for the technology they know best rather than the approach that works well for your application. For instance, we recently got a call from a developer building a bespoke e-commerce solution (because in his words Shopify and the other off-the-shelf systems were not good enough for him!). He had run into a problem and had spent several weeks trying to make a database — ill-suited for the problem — scale to meet his needs. He chose the poorly suited database since it was the one database he knew well and had used in previous projects. This was a costly mistake and one that may get repeated as new challenges arrive for that developer.
Before hiring your first developer, try to find a great architect with good knowledge of modern technologies and applications, who can help you design the application for extensibility, security and scalability. And even more importantly, make sure you understand the choices the architect has provided.
2. Don’t hesitate to weed out bad hires
Quick to fire, slow to hire, is a mantra at many of the most successful Silicon Valley companies. If you made a recruitment error and hired the wrong person, you have to correct your mistake as fast as you can. Reason? Because when you are a small team, even a single bad hire can ruin your best efforts and slow down the rest of the team. If you make the wrong hire, you may not know for some time, since it may not be obvious to the rest of the team as everyone is pushing across several strategic and tactical fronts trying to complete assignments, hit release dates, and fulfill financial goals.
3. Encourage a culture of learning to reduce dependency and create backups
You cannot stop turnover, but you can mitigate its ill-effects to some extent. Happy devs can make for great culture and even better code. Create perks for the team, so they feel energized and ready to contribute. Encourage a culture of learning within the team. Arrange for cross-training sessions, build in rewards for new certifications, or add incentives for showing off their work to the broader team and community. The key is to encourage a culture of collaboration, thereby enhancing software developer engagement. Remember, that cross collaboration and strong documentation reduce the dependency on any one person. So, if you ever have a situation where an employee leaves a project without warning, your team can work together to alleviate the shortfall.
4. Consider outsourcing as an alternative to an in-house software development team
If building your own ‘village’ feels like taking on too much risk and spending too much money for the return on investment, hiring a well-equipped ‘village’ to get your software development work done may be the best way to go. Vendors such as ourselves — you can find us at azumo.co — spend a tremendous amount of time thinking through issues our customers have faced previously.
When you outsource your software development to a nearshore software developer like Azumo, it can save you time, so that you can pay more attention to other important aspects of your business. Moreover, outsourcing software development to a software service provider can be a more cost-effective option as you’ll only be billed for the resources you use and/or the hours your work takes to complete. You can hire them for as long as it takes to get the job done and after that, discontinue their services. The better firms will also regularly report to you on the pace of development and provide benchmarking, so you know what you are paying for at all times. By outsourcing, you can keep your development costs within budget, and you will also get a well-designed, scalable, and tested software application.