Choosing Between Building and Buying Software Solutions
Written on
Chapter 1: Understanding the Build vs. Buy Dilemma
When you ask a developer whether they'd prefer to code, it's akin to asking a surgeon if they want to perform an operation. In the context of software development, the choice between building a solution in-house or purchasing an existing one has grown increasingly complex. To avoid a convoluted decision-making process, it's crucial to leverage developers for their technical insights without allowing them to dominate the final decision.
Before tackling a build or buy choice, it's essential for the team to reach a consensus on the necessary functionalities. Instead of merely drafting a checklist of features, a more effective strategy is to implement User Story Mapping. This method dissects a system into its components, creating a visual representation akin to a detailed roadmap of user stories. As Jeff Patton, the creator of User Story Mapping, describes, this technique differs significantly from the traditional approach of flat user stories and backlogs:
"We invest considerable time collaborating with our customers to grasp their objectives, users, and crucial system components. This culminates in a comprehensive understanding of the functionalities we aim to develop."
This thorough groundwork often feels like meticulously gathering leaves from a tree, only to dispose of them without utilizing the overall structure. A flat backlog can be likened to a context-free collection of mulch.
Chapter 2: Evaluating Development Options
After identifying the required functionalities, the next step is to evaluate how to achieve them. Utilizing Jim Collins’ Hedgehog Concept can be helpful. This framework encourages teams to find the overlap between their core competencies, cost-effectiveness, and alignment with the company's strategic goals. The intersection in this Venn diagram highlights potential areas for in-house development, while anything outside warrants careful consideration before proceeding with development.
For instance, if developers are focused on one solution, what other projects are being neglected? If this solution is paramount, it should take precedence. Otherwise, the decision may not be straightforward.
In some scenarios, the User Story Mapping could indicate a unique set of functionalities that might be more cost-effective to develop from scratch rather than adapting an off-the-shelf product.
One advantage of purchasing software is the potential for standardization. If your company’s specific needs prevent you from using common solutions like payment systems, it may be time to rethink your approach. Often, aligning your practices with established processes can enhance user experience.
When considering purchasing software, forming a small discovery team that represents both business and technical interests is advisable. This team will utilize User Story Mapping to explore various third-party solutions.
The first video titled "Should you Build a House or is it Better to Buy an Existing House" discusses the complexities of making informed decisions in various scenarios, akin to the build vs. buy dilemma in software.
Chapter 3: Exploring Purchase Options
Historically, the decision to build or buy software has always been nuanced, but the plethora of options available today adds layers of complexity. Rather than simply opting for a third-party tool, consider the following purchasing alternatives:
- API Integration: The most prevalent scenario for acquiring software involves integrating third-party solutions through an API. This entails the in-house team developing the necessary code and user interface while evaluating the API’s usability, functionality, and support.
- Outsourced API Integration: Similar to the first option, this involves hiring external contractors to handle integration and user interface development.
- Acquisition: When a required functionality falls outside a company's expertise but remains strategically significant, acquiring the necessary talent and products can expedite market entry.
- White Label Integration: This approach involves linking to a third-party product while maintaining the appearance of a unified software solution.
- Co-branded Solutions: Directly integrating a vendor’s functionality can be the quickest path to market, albeit potentially less visually appealing.
Having reached a decision, the next challenge lies in selecting the right vendor. It's vital to assess potential vendors to identify those whose offerings align closely with your needs.
Organize meetings with top candidates and ensure that your discovery team is present to address any technical inquiries.
Key considerations during vendor meetings include:
- Representation: A vendor's team should include technical experts, not just sales personnel.
- Customization: Determine whether the vendor can accommodate your unique requirements without compromising future support.
- Transparency: Vendors should be willing to share their product roadmap and discuss how your needs fit into their timeline.
- Trial Options: A refusal to offer an unsupervised trial account should raise red flags.
- Cultural Fit: Assess the respect displayed among the vendor's team during discussions; this can indicate a healthy working relationship.
The second video titled "Buying Vs Building | How To Buy A House in 2023" compares the benefits and drawbacks of different purchasing strategies, resonating with the themes of this discussion.
Chapter 4: Testing and Validation
Having identified a potentially suitable third-party product, it’s now up to the technical team to perform a thorough evaluation, primarily focusing on API integration. This assessment can be conducted in-house or outsourced to an experienced consultant.
Here are several tips for effective API evaluation:
- Completeness: Ensure that the API encompasses all necessary functionalities.
- Documentation: Comprehensive documentation is essential for facilitating interactions with the product.
- Integration Ease: The API should ideally come with code snippets and support for your programming language.
- Testing Environment: A dedicated test environment is crucial to avoid disrupting production during development.
- Support Availability: Quick responses from knowledgeable support staff can be invaluable during the evaluation process.
Maintaining focus on strategic objectives is essential, especially when developers are eager to dive into coding. It’s vital to keep the bigger picture in mind.