In this section of the blog, we continue to explore the dependencies of the software development process.
Development Environment / Cloud Resources
Development activities have become quite smooth and streamlined since the advent of the Cloud. What used to take several weeks to setup for a customer software development project takes only hours now with Cloud resources being instanced and made “live” in minutes. Every software project needs to plan at a minimum of 4-5 environments that provide different but siloed capabilities:
- Development Sandbox – used as a scratch environment by individual developers as they create new features
- Dev environment – used as the first environment to contain integrated code from various developers
- QA environment – used by the QA team to test features and changes considered being readied to go to Production
- Stage environment – a test environment that is close in nature and capabilities to Production
- Production environment – the live environment running the latest stable release of the software accessible by end users of the system
In containerizing the development process, this part is the easiest! Containerized development is already the standard and it is easy to estimate the cost of each of these environments and how much is needed and for how long from start to finish of the entire project.
Architecture & UX Design
While building a detailed project plan for every single feature and nuance of a contemporary software system is no longer supported in agile methodologies, a long-term, extensible architecture is required so that the founders’ vision of the product can be built over several months if not years. Towards this goal a detailed initial architecture document needs to be built at the start of any project. However, the architecture is not set in stone and the document is always a work-in-progress. Associated closely with the system architecture is the UX design. Modern development projects are leaning toward a “mobile first” approach where end users are not just enterprise clients. Containerizing the development process requires that we estimate the time and cost required to create both artifacts.
What used to be tracked using Gantt charts and project planning tools is now done through Application Lifecycle Monitoring systems like Jira and Azure DevOps / Team Foundation. Since these applications are SaaS offerings, it is easy to compute the cost based on the team size and number of seats required.
In the next part of the blog, we will explore the final few dependencies of the software development process which are required to successfully execute a project.