Posted on: July 3, 2022 Posted by: Hotel Transylvania Comments: 0

David is the Co-Founder of Aloa, a platform for outsourcing software development. Aloa has helped 200+ startups/companies build their tech.

Software outsourcing is an inherently complicated space, where even highly technical individuals face pain points. In this article, I’ll create a simplified guide by walking through three main concepts that will help you understand what you need to know to kick off your software outsourcing journey.

1. The Analogy

“Software development is like building a house.” Let’s look at some of the basic challenges of software development with this analogy in mind.

Third-Party Limits: Your house doesn’t control your Wi-Fi signal; your internet provider does. The contractor who built your house is not responsible when you have an issue with your connectivity. With software development, you will have to rely on numerous third parties. Your devs will help implement them, but they aren’t responsible for the service.

Bugs: WD-40 for a squeaky door, an electrical engineer for a short circuit, a roofing contractor to fix your roof shingles. There are always little things that require maintenance, and you pay for the individual service. The same thing holds true with software—it doesn’t come with an unlimited warranty.

Developer Vs. System Administrator: If someone breaks into your home or your kitchen catches fire, do you call your contractor or 911? With software, it is important to have a game plan to ensure up-time, which is why you need a system administrator.

Security And Backups: Just because you have a home security system doesn’t mean someone won’t break in, so you buy insurance. Security is the protection; the backups are the insurance. Backing up your system mitigates risk.

Scope Creep: You already have your blueprints, but now you want an electric stove instead of gas and a few more windows. It is important you are mindful of your requests and have a transparent conversation with your team to define scope creep for your project. You need to know your limit in terms of requesting modifications.

Patience And Communication: A contractor doesn’t know what you want just because they’re a contractor. You won’t always understand why it may take longer to build the family room as opposed to the living room. You’re paying your team because you don’t have the skills or time (or both) to do it yourself. If you don’t trust your team, then you may need to consider a different team. In short, build trust and have patience—clear and calm communication is key to a successful relationship.

2. Do’s & Don’ts

With the same analogy in mind, let’s look at several best practices and my recommendations for action.

Repository: A repository is your land. Just like a house is built on a plot of land, a code repository is where the code is stored. Here are a couple of recommendations for repositories:

• Services: GitHub, GitLab, Bitbucket.

• Process: One repository/application.

Environments: Just like building a house, your rough draft isn’t going to be published. With software development, your environments are your blueprints (dev), modeling (staging) and your actual home (production). Everything has its own place. For these, I recommend:

• Services: AWS, Google Firebase, Microsoft Azure.

• Necessary Environments: development, staging, production.

Branching: With a house, you build each room in its own area—the kitchen, living room, bedroom. For software development, you should use branching, and I recommend these necessary branches: feature, staging, master.

Code Commits: Just this once, I’m going to break from the analogy. Every once in a while, you need to commit the code, or click save. I recommend doing so at least twice every day with comments.

Pipelines: Instead of manually testing circuits or leveling the floors, you use tools to facilitate a more seamless process. With software, these pipelines are levelers and circuit tests. I recommend:

• Services: GitHub Actions, Bitbucket Pipelines, Jenkins GitLab.

• Process: Continuous integration/continuous deployment (CI/CD).

Backups: If your system crashes, it is important to have a backup of stored information and data. Think of backups as your home insurance. The best practice for creating backups is that the process should be automated with a seven-day retention period.

Security: There are different levels of home security available, from no security to extra-expensive alarm systems. With software, there is no one right answer, but you need two-factor authentication, encryption and SSH at a bare minimum.

Documentation: You need blueprints, manuals and explanations to build and maintain a house. With software, you should always document your work so that others can more easily jump in for any support or handoffs. This includes, at a minimum, a repository, servers, architecture, swagger API and third-party services.

Understanding Associated Costs: When you buy or rent a home, utilities tend to be extra costs. With software, you need to consider extra costs like hosting/servers, domains, developer accounts and third-party services.

3. The Client’s Responsibility

Software development isn’t a one-way street. Like being a good neighbor, clients also have responsibilities to uphold, such as:

Communication: It is important to maintain clarity and consistency in the way you communicate with your developers. Eliminate ambiguity. Never make assumptions. Be sure to always ask questions and verify your understanding. Use standard tools, such as Slack, and make sure you have scheduled stand-ups.

Develop A User Story: A user story is how you can most efficiently communicate your scope of work, in plain English, to developers.

Don’t Be The Hurdle: Be proactive, not reactive. Some delays are preventable and on the shoulders of your developers; others are on you. Have your scope ready. Have your accounts ready. Have your content and assets ready. Be responsive.

Know What You’re Asking: If you don’t understand software, you won’t always understand the magnitude of your request. It’s crucial, especially if you’re not technical, to build a strong relationship with your team in order to develop clarity.

There are other important factors to keep in mind, such as having a grasp of the concept of technical debt, but all of these concepts are geared toward the most important goal: Have a deep level of trust with your team.

Forbes Technology Council is an invitation-only community for world-class CIOs, CTOs and technology executives. Do I qualify?