When you're working on a new service, the initial excitement of seeing your Proof of Concept (PoC) come to life can be exhilarating. However, as thrilling as it may be, it’s crucial to remember that a PoC is not production-ready.
Understanding the Difference: PoC vs. Production-Ready
When you’re developing a new service, transitioning from a Proof of Concept (PoC) to a production-ready system is a critical phase that requires careful planning and execution. While a PoC is valuable for validating ideas, it is not designed for the demands of a production environment. One of the key aspects in determining whether a service is truly ready for production is the Definition of Done (DoD). This blog post will explore what it means to be "done" and outline the necessary steps to ensure a service is production-ready.
Definition of Done (DoD): A Key Metric
The Definition of Done (DoD) is a crucial metric that helps determine whether a task or project has met all the necessary criteria to be considered complete. In the context of transitioning from a PoC to a production-ready service, the DoD serves as a checklist to ensure that all essential aspects, such as documentation, security, scalability, and knowledge transfer, have been addressed.
What Does It Mean When a Task Is Considered “Done”?
In different contexts, declaring something as "done" can mean:
Completed: The task or activity has been finished.
Finalized: The work has gone through all necessary stages and is now concluded.
Achieved: The desired goal or objective has been reached.
Closed: In project management, a task is marked as "closed" when it is resolved or completed.
Accomplished: A task requiring significant effort has been successfully completed.
Resolved: In problem-solving contexts, the issue has been addressed to everyone's satisfaction.
Not Done: Tasks that were intentionally not completed.
Each term reflects a different nuance of "done," and it’s important to clearly define what "done" means for each task.
General Policy for Determining "Done"
A task is not considered done until it has been deployed to production, except for specific phases such as PoC, testing, and research. The following criteria should be met:
Documented: Every task, change, or implementation must be thoroughly documented. This ensures a reference point for the current state of the system, compliance with audit requirements, and aids in troubleshooting.
Completed Using Infrastructure as Code (IaC) or Config as Code: Where possible, tasks should be automated and managed through code. This ensures scalable, reproducible setups and minimizes human error.
Knowledge Transfer: Essential insights and operational knowledge gained during the task must be shared with at least one other team member. This can be done through a one-on-one session or a recorded presentation.
Additional Criteria Depending on Work Type
Feature Work
Description: Involves adding new enhancements or value to infrastructure or services.
Requirements: Complete documentation, knowledge transfer, comprehensive monitoring and alert systems, and detailed run-books for potential failure scenarios.
Deprecation / End-of-Life (EOL) / Sunsetting
Description: Phasing out outdated features, code, modules, or services.
Steps: Determine if the item is deprecated or EOL'd, mark the repository with a deprecation notice, gradually reduce functionality, and remove associated access and connections.
Proof of Concept (PoC)
Description: Develop the smallest viable product to validate feasibility and correctness.
Requirements: Prototyping and minimal implementation.
Research / Innovation
Description: Exploration and determination of potential options and solutions.
Requirements: Document research and development (R&D) findings.
Business As Usual (BAU) Support
Description: Ongoing support and engineering maintenance.
Tasks: Address technical debt, conduct necessary upgrades, and perform updates.
Additional Considerations
Resilience Testing: Include stress tests, smoke tests, and other resilience measures to ensure the system can handle real-world conditions.
PRR Documents: Create and formalize Production Readiness Review ( template: https://github.com/pgaijin66/production-readiness-review-document ) and make it mandatory before making any service production ready.
Ensuring a service is production-ready goes beyond just having a functional PoC. It involves meeting the criteria outlined in the Definition of Done (DoD), ensuring robust documentation, implementing security measures, achieving scalability, and conducting thorough knowledge transfer. By following these guidelines, you can confidently transition from a PoC to a fully production-ready service that meets the demands of real-world usage.
References
https://blog.jonsdocs.org.uk/2018/07/21/poc-vs-production-code/
https://medium.com/@allingeek/the-delta-between-poc-and-production-556ceb03af99
https://www.readysetcloud.io/blog/allen.helton/4-reasons-you-should-never-use-proof-of-concepts-in-prod/