Principles for building a successful platform
Building a software platform can be a challenging task. Even with the best technical features and capabilities, a platform won’t be successful if people don’t want to use it. That’s why it’s important to consider not only the technical aspects of a platform but also the principles that make it appealing and useful to potential users.
Here are seven key principles for building a platform that people will want to adopt:
1. User-Centered Design
The first principle is to design the platform with the user in mind. This means understanding the target users’ needs, preferences, and pain points, and incorporating feedback from them throughout the development process. By putting the user at the center of the design process, the platform is more likely to be intuitive, useful, and appealing to users.
Focus on Developer Experience Design
User experience (UX) design is critical to building easy-to-use software. UX design involves creating a user interface that is intuitive, visually appealing, and easy to navigate.
In the age of the platform, a new term called “Developer experience” (DX) is often used. DX refers to the overall experience that a developer has when working with a particular platform, tool, or technology. It encompasses everything from the ease of use and quality of documentation to the availability of resources and support.
In essence, DX is about making the process of developing software as efficient, enjoyable, and productive as possible for developers. This means providing them with the tools and resources they need to get their job done quickly and effectively, while also minimising frustration and confusion.
A good DX can have a significant impact on the success of a software platform or tool. When developers enjoy using a particular platform or tool, they are more likely to recommend it to others and continue to use it themselves. This can help to drive adoption and usage, while also improving the overall quality of the software that is being developed.
To improve developer experience, platform teams may focus on factors such as documentation quality, ease of getting started and configuration, accessibility of support and resources, availability of third-party integrations, and performance of the platform or tool. By investing in DX, platform teams can create a more positive and productive environment for developers, which can lead to better outcomes for everyone involved.
Conduct User Research
Conduct user research to gain deeper insights into users’ needs and preferences. This can involve interviews, surveys, usability testing, and other methods to gather feedback from your target users. User research will help you identify areas where your platform can be improved to better meet the needs of your users.
Create working groups or communities to encourage users to provide feedback and share their experiences with the platform. These groups can be a valuable source of feedback and can help to build a sense of community around the platform.
Incorporate User Feedback
Throughout the development process, incorporate user feedback to improve the usability of your platform. User feedback can help you identify pain points, usability issues, and areas where your platform can be improved. Make sure to listen to your users and take their feedback seriously, and iterate on your design and functionality to address their concerns.
Test, Test, Test
Test your platform capabilities extensively before launching them. Usability testing, user acceptance testing, and other methods can help you identify any remaining usability issues or bugs. Make sure to fix these issues before launching platform features to ensure a smooth and enjoyable user experience.
Release to early adopters first
Find developers who would reap significant benefits from your new platform capability and offer them early access. Ask for their feedback and suggestions. Be open to their ideas and concerns, and use their feedback to improve your platform, fixing any issues before rolling them out to a wider audience.
Early adopters can also help spread the word about your platform through word-of-mouth. They may be influential within their network and can help generate buzz and excitement around your platform.
Eat your own dog food
As a platform team it is important to “eat your own dog food”. This means using your own platform as end-users would, in order to experience the product from the user’s perspective and identify any potential issues or areas of improvement. This principle has become a common practice to ensure that the products or tools being developed are usable, effective and meet the needs of target users.
Eating your own dog food can have several benefits. First, it allows platform engineers to identify any usability issues or bugs that may not have been apparent during the development process. By using their own products or tools, they can experience them as a user would and gain insights into how to improve the user experience.
Second, eating your own dog food can help to build trust with users. If a platform team uses its own products or tools, it demonstrates confidence in the quality and effectiveness of those products, and shows a commitment to improving them. This can help to build credibility and establish trust.
Eating your own dog food can also help to foster a culture of continuous improvement. By using their own products or tools, platform engineers can identify areas where improvements can be made, and work to address those issues. This can lead to more innovative and effective products, and can help to create a culture of continuous learning and improvement.
When building functionality for your platform, use the same packages, build and deploy using the same workflows, use the same hosting environments and monitor with the same tools as your developers are provided.
2. Ease of Use
The second principle is to make the platform easy to use. The platform should be intuitive, with simple and straightforward interfaces, and clear documentation. Users should be able to easily learn how to use the platform, and should be able to accomplish their tasks quickly and efficiently.
Automate as much as possible
Automation enables processes and tasks to be completed more quickly and with greater accuracy, reducing the need for manual intervention. This can help to improve the efficiency of the platform and reduce the time and cost of development.
Automation can help to scale processes and tasks as the platform grows, allowing for more efficient management and maintenance. This can help to support a larger user base or more complex workflows without requiring significant additional resources.
Automation can help to reduce the risk of errors and failures by providing a more predictable and reliable platform. This can help to increase user satisfaction and confidence in the platform.
Automation can help to enable faster iteration and testing of new features and functionality, allowing for more agile development. This can help to support a faster time-to-market and more responsive development process.
By automating processes and tasks, developers can focus on higher-level tasks and priorities, leading to a more efficient and effective development process.
Enable self-service
Designing for self-serve is very important for any platform. Enabling developers to self-serve means giving them the tools, resources, and access they need to manage and deploy their code independently. By enabling developers to self-serve, they can quickly and easily deploy their code without the need to wait for manual approval or assistance from other teams. This can significantly reduce the time and effort required to deploy and manage applications, increasing overall efficiency and productivity.
Self-service capabilities can also improve the quality of code and applications. When developers are responsible for deploying and managing their code, they are more likely to take ownership of the quality and performance of their applications, and be more proactive in identifying and addressing issues.
Self-service capabilities can also help reduce costs associated with managing and deploying applications. By automating manual processes and reducing the need for manual intervention, less resources are needed to manage applications, resulting in cost savings.
A great example of platform self-service tooling is an ‘account vending machine’ for a multi-account AWS organisation. An AWS account vending machine is a self-service portal that enables users to create and manage their own AWS accounts without requiring manual intervention from platform teams.
Provide a “single pane of glass”
A “single pane of glass” is a term used to describe a unified, integrated view of data and information from multiple sources or systems. This improves visibility into operations, performance, and issues. This allows teams to quickly identify and address problems and make more informed decisions. A single pane of glass simplifies and streamlines workflows by providing a centralised location for data and information. This reduces the need to switch between different applications or systems, which saves time and increases productivity.
For example, when choosing tools for viewing logs, metrics and alarms, a single tool that incorporates all of these concepts can provide users with a unified view of all the data they need to monitor their applications at runtime.
This may not always be possible due to reasons of cost or the lack of a tool that provides all of the required functionality. But, a tool that can offer this should hold that in its favour.
Many organisations are now implementing Internal Developer Platforms (IDP) to bring together all of their platform capabilities into a single interface where developers can easily navigate and self-serve. See my post on Benefits of an Internal Developer Platform for an explanation.
3. Buy vs Build
The third principle is “buy vs build”, which refers to the decision to purchase an existing SaaS solution rather than building it in-house.
Taking the buy vs build principle into consideration is very important when selecting solutions for common tools that are used across multiple organisations, like logging, monitoring, alerting, continuous integration and continuous delivery (CI/CD) platforms. Here are some reasons why the self-build route is likely the harder path to follow:
Reduced cost
Building a new solution can be time-consuming and expensive, especially if it requires significant research, development, and testing. By purchasing an existing solution, platform teams can save time and money on development costs.
Reduced risk
Building a new solution carries a certain level of risk, as there is no guarantee that the final product will meet the users’ needs or perform as expected. By purchasing an existing solution, platform teams can reduce this risk by selecting a product that has already been tested and proven in the market.
Access to expertise
Purchasing an existing solution can provide platform teams with access to the expertise and support of the solution provider. This can be especially beneficial for teams that do not have the necessary resources or expertise to develop and maintain a solution in-house.
Focus on core competencies
By purchasing an existing solution, platform teams can focus on their core competencies and strategic priorities, rather than spending resources on developing and maintaining a solution that is not directly related to their business goals.
Faster time-to-market
By purchasing an existing solution, platform teams can deploy the solution more quickly and efficiently than if they were to build it in-house. This can help to support a faster time-to-market and more responsive development process.
4. Interoperability
The fourth principle is to ensure that platform capabilities can integrate with other tools and services that users already rely on. This reduces switching efforts and increases convenience for users.
Choose tools that are widely supported
It is good to choose tools and technologies that have a wide array of integration options available. This will make it easier to integrate them into your existing workflows and infrastructure.
Widely supported tools typically have a large user community, which can provide support, advice, and guidance if you encounter any issues or need help using the tool. They also tend to have extensive documentation and resources available online, making it easier to learn and use the tool effectively.
These tools are more likely to receive regular updates and improvements, ensuring that they remain relevant and effective over time. They are also less likely to become obsolete or unsupported, reducing the risk of having to switch to a new tool in the future.
Widely supported tools are often designed to scale with your business. They can handle large volumes of data, users, or transactions, and can be customised to meet your specific needs. This can help ensure that the tool remains effective and useful as your business grows and evolves.
Use Single Sign On (SSO)
Single Sign-On (SSO) is a mechanism that allows users to authenticate once with a single set of credentials and then access multiple systems and applications without the need to log in again.
SSO reduces the number of times users need to log in and the number of credentials that they need to manage, making it easier for them to access the platform and its various features and reduces the risk of weak or reused passwords.
With SSO, administrators can manage user accounts and access control policies from a centralised location, reducing the administrative burden and making it easier to enforce consistent policies across multiple systems and applications.
5. Trustworthiness
The fifth principle is to build trust and confidence in the platform. This can be achieved through relisiliency from failures, strong security practices, and responsive support. Users should feel confident that the platform is reliable and they will receive prompt and effective support when needed.
Build for resiliency
Building resiliency into a software platform is important to ensure that it can handle unexpected failures and remain operational during times of high demand.
Design for Fault Tolerance
When designing a software platform, it’s important to assume that failures will happen and plan accordingly. This means designing systems that can detect and recover from failures automatically, without human intervention. This can include using multiple datacentres, automated failover, redundant systems, and load balancing to ensure that the platform can continue operating even if one or more components fail.
Use Microservices Architecture
Use a microservices architecture to break down the platform into smaller, independent services that can be developed and deployed independently. This makes it easier to scale individual services as needed and reduces the impact of failures, as a failure in one service won’t necessarily affect the entire platform.
Test for Resiliency
It’s important to test the platform’s resiliency regularly to ensure that it can handle unexpected failures and remain operational during times of high demand. This can include running load tests, failure injection tests, and disaster recovery tests to simulate different failure scenarios.
Implement Disaster Recovery
Implement disaster recovery by having a plan in place to recover from major disasters. This can include backing up critical data and systems and having redundancy in different geographical locations.
Implement Monitoring and Alerting
Monitoring and alerting can help detect issues before they become critical, allowing for proactive remediation. This includes monitoring system health and performance metrics, as well as logging and alerting on system events and errors.
Providing support
Providing good platform support is essential for ensuring that your users have a positive experience and are able to get the most out of your platform.
Offer multiple channels of support to make it easy for users to get help when they need it. This can include issue tracking products (e.g. Jira), chat systems (e.g. Slack), documentation, and a knowledge base or FAQ section. Make sure that users know how to contact support and what to expect in terms of response times.
Communicate proactively with users about any known issues, upcoming changes or releases, or other relevant information. Provide clear and timely updates on the status of inquiries or support requests.
Implement an incident management procedure
Implementing a good incident management procedure is crucial for minimising the impact of unexpected incidents on customers, business operations, and reputation. Responsibility for incident management may, or may not, fall under a platform team’s remit. However, it is important that the right tools and procceses are available and incidents are managed effectively to inspire confidence in the platform itself.
Define the roles and responsibilities of the incident response team, including how incidents are reported, how they are categorised by severity, and how they are escalated. Establish a clear timeline for incident response, including when incident reports should be reviewed, when updates should be communicated to stakeholders, and when the incident has been resolved.
Develop a detailed incident response plan that outlines specific steps that need to be taken in the event of different types of incidents. This plan should include steps for identifying and diagnosing the incident, steps for resolving the incident, and steps for communicating with stakeholders throughout the process.
Communication is critical during an incident. Establish communication channels and protocols for communicating with stakeholders, including customers, partners, and employees. Keep stakeholders informed throughout the incident response process, including regular updates on the status of the incident and expected resolution time.
Conduct post-incident reviews to identify the root cause of the incident, assess the effectiveness of the incident response process, and identify areas for improvement. This feedback can be used to continually improve the incident management procedure.
Create runbooks
A runbook is a document or set of documents that describe the procedures and best practices for operating and maintaining the platform. Runbooks typically include detailed instructions, diagrams, and checklists that guide users through common tasks, such as setting up, configuring, monitoring, and troubleshooting the system.
Runbooks are designed to help ensure that a system is operated in a consistent and reliable manner, regardless of who is performing the task. They capture the knowledge and experience of the people who have built and maintained the system, and provide a standardized set of procedures that can be followed by anyone who needs to interact with the system.
6. Platform as a product
The sixth principle is to treat the platform as a product. The concept of platform as a product is about treating a software platform as a product that has its own unique value proposition, target audience, and set of features and capabilities. In other words, it’s about thinking of the platform as a standalone product that needs to be marketed and sold to potential users or customers.
Traditionally, platforms have been thought of as a tool or infrastructure that supports other products or services, and are often viewed as a cost center or a necessary part of doing business. However, the platform as a product approach changes this perspective by shifting the focus to the value that the platform provides to its users, rather than just its technical capabilities.
To implement the platform as a product approach, a platform team needs to have a clear understanding of the needs and requirements of its target audience. This involves conducting user research and understanding the pain points and challenges that users face in their work. Based on this understanding, the platform team can develop a set of features and capabilities that address those pain points and provide value to users.
The platform team also needs to be able to communicate the value proposition of the platform in a clear and compelling way, using marketing and sales techniques to attract and retain users. This involves creating a brand identity for the platform, developing marketing materials and sales collateral, and establishing a pricing model that aligns with the value that the platform provides.
Overall, the platform as a product approach can help to shift the mindset of the platform team from that of a cost center to that of a value-generating entity, with its own unique identity and value proposition. By taking this approach, platform teams can better understand the needs of their users and deliver a platform that truly meets those needs and provides value to its users.
Build a community
Build a community of users and advocates around your platform. This can help you increase adoption, improve user engagement, and drive innovation.
A champions network is a group of individuals within an organisation who are passionate about a specific technology, product, or platform and who are willing to advocate for it and help drive its adoption.
The purpose of a champions network is to build enthusiasm and momentum around a particular technology or platform, and to drive adoption and usage among the broader user base. Champions can help spread the word about the technology, provide training and support to other users, share best practices and success stories, and offer feedback to help improve the technology.
Champions are typically selected based on their expertise, enthusiasm, and willingness to take on the role of advocate and influencer. They may receive specialised training or support to help them be effective in their role, and may be recognised or rewarded for their contributions.
Marketing
Identify your target audience and tailor your marketing efforts to reach them. Use a mix of marketing tactics, such as presentations, internal blogging, chat system announcements and email newsletters.
When publishing marketing material to platform users, use a clear and concise headline that summarises key features or improvements. This will help grab the attention of users and make it easier for them to quickly understand what’s new. Provide a brief overview of the update, including what new features have been added, what bugs have been fixed, and what performance improvements have been made. Use screenshots or videos to showcase the new features and improvements. Provide details about the new features and improvements, including how they work, how to access them, and how they can be used to improve workflows or productivity. Be transparent about any known issues or limitations with the release. This will help to manage user expectations and avoid frustration. Personalise the release announcement to the target audience, highlighting the specific benefits and use cases that are most relevant to them. Include a call to action at the end of the release announcement, encouraging users to try out the new features and provide feedback.
Value Proposition
Platform teams must clearly articulate the value that the platform provides to its users. The platform must solve real problems and fulfill real needs for its users. A clear and compelling value proposition can help to attract adoption by communicating the benefits of the platform. It helps to answer the question “what’s in it for me?” and helps users to understand how the platform can meet their needs. Value propositions should be simple and straightforward, and it should be easy to understand how the platform will benefit its users.
Focus on the needs and pain points of users and highlight the benefits that the platform provides, to effectively communicate the value of the platform and entice potential users to adopt it.
Here’s an example of a value proposition for a Terraform module:
Our Terraform module provides a powerful and flexible way to automate your infrastructure deployment and management. With our module, you can quickly and easily deploy and manage cloud resources, with best practices baked-in.
Here’s what our Terraform module can do for you:
Speed up deployment: Our module provides a pre-built infrastructure template that can help you quickly configure and deploy your infrastructure, reducing development and deployment time and increasing efficiency.
Enhance consistency: With our module, you can easily manage and maintain consistent infrastructure across multiple services, reducing errors and increasing reliability.
Increase flexibility: Our module is designed to be flexible and adaptable, allowing you to easily customise and configure your infrastructure to meet the specific needs of your project.
Improve security: Our module includes a range of security features and best practices, ensuring that your infrastructure is secure and meets the highest standards of compliance.
Reduce costs: By using our module, you can save time and money by leveraging pre-built templates and reducing the need for custom development.
Overall, our Terraform module is the key to automating your infrastructure deployment and management, enabling you to quickly and easily scale your infrastructure to meet the needs of your team. With our module, you can increase efficiency, reduce errors, and improve security, all while saving time and money.
7. Innovation
The seventh principle is to continuously innovate and improve the platform. The platform should be designed to stay at the cutting edge and to meet changing user needs and preferences.
Encourage a culture of innovation by promoting an open mindset, encouraging experimentation and providing opportunities for platform engineers to learn and grow.
Stay informed about the latest trends in the industry, including emerging technologies and changing customer needs. This can help you identify opportunities to innovate and improve the platform.
Encourage collaboration between different teams and departments, as this can help generate new ideas and identify opportunities for improvement.
Solicit feedback from customers and incorporate it into your platform development process. This can help you identify areas where the platform can be improved and identify new features or functionality that customers may want.
Go open source
Platform teams often build functionality that is not unique to their business, but is also required by other platform teams in other organisations. This provides numerous opportunities for taking tools open source.
Open sourcing your technology can help you build a community of users and contributors who can help you improve your technology, provide feedback, and advocate for your platform. This can help you reduce costs by allowing you to leverage the work of others, rather than reinventing the wheel. This can also help you reduce maintenance and support costs over time.
Open sourcing your technology can also help you attract top talent who are passionate about great tech and want to work on leading projects that have a positive impact on the broader community.
Summary
By incorporating these principles into the development and promotion of a software platform, developers can increase the likelihood that users will adopt and use it. By putting the user at the center of the design process, creating a clear value proposition, making the platform easy to use and accessible, and building trust and confidence in the platform, developers can create a successful and sustainable platform that meets the needs of its users.