Development effectiveness dimension
1 - Reactive
Description
- The tribe has an ad-hoc approach to development practices.
- There is little or no adherence to coding standards, and code review is either non-existent or infrequent, with minimal alignment with Tribe practices.
- The focus is mostly reactive, with quality issues addressed post-release/development.
- Lower level (Unit) testing is sporadic or non-existent, leading to frequent defects.
- Code is often written without consistent style, and there is minimal documentation.
- Testing is an afterthought, often performed right before release without integration into earlier phases of SDLC.
Improvement focus
- Initiate regular code reviews.
- Introduce unit tests for critical components and scenarios.
- Start aligning with the Tribe's standard practices.
- Start measuring test coverage.
- Enforce mandatory checks both at the commit (linters) and the PR level.
- Introduce the concept of a shift-left approach to the team and emphasize its importance.
2 - Managed
Description
- The tribe enforces a policy that prohibits the submission of code that hasn't been tested → mandatory checks are in place at the PR level.
- Basic coding standards have been introduced, and all tribe members are expected to follow them, but they might not be consistently documented- or agreed upon.
- There's some levels of automated code quality checks, but the focus is mainly on syntax rather than deep structural quality.
- Automated unit (and lower level) tests are written and maintained for new code but without any specific coverage goals or systematic- integration testing.
- All test failures are investigated and fixed.
Improvement focus
- Improve depth and rigor of code reviews.
- Expand automated unit & integration test coverage.
- Consistently use shift-left techniques in the development cycle.
- Code reviews focus also on the test coverage of the newly added code.
3 - Defined
Description
- Software development practices are well-defined and documented, aligned at the Tribe level, in a consistent format (the Quality Strategy), and are consistently followed by all squads.
- Continuous Integration (CI) is set up to ensure code quality isn't compromised with new changes.
- The new code is backed by Unit and Integration tests, which are consistently updated and maintained.
- A shift-left approach is regularly employed, leading to early defect identification and remediation.
- Test Coverage is measured and optimized per test level (unit, integration, system).
- Every time a change is made, an automated build and test process (unit, property, integration, system) is executed. Failures are investigated and fixed proactively.
- Builds are not left broken.
- The main/master branches are consistently stable, free from performance or security issues, and are always in a state that is ready for release.
- New automated tests are created or tracked for each bug fix.
- Automated tools like linters and static code analyzers are integrated into the development process.
- Code reviews are systematic and are used both for ensuring quality and knowledge sharing, including the reviewing of the test coverage (new & total).
- The unit and integration test frameworks provide detailed documentation for execution, interpretation, and debugging, as well as guidelines for external contributions.
- All tests at all levels are peer-reviewed by the team, including test engineers, and adhere to IOG’s test automation best practices and conventions.
- Root cause analysis is performed on major defects, leading to proactive defect prevention. The results of the analysis are tracked in a consistent format over time.
Improvement focus
- Implement static code analysis tools.
- Ensure negative paths and exceptions are covered in unit & integration automated tests.
- Introduce metrics to monitor the effectiveness of development practices.
- Focus on improving test coverage for both new and existing code.
- Enhance the focus on non-functional aspects, ensuring regular assessments of security and performance metrics.
4 - Measured
Description
- Quality (Assurance = QA) is not just seen as a phase but as an integrated part of the development process.
- Developers actively own the quality assurance process. Shift-left becomes a common practice.
- Automated tests cover both new and existing code comprehensively.
- Build metrics gathered, made visible, and acted on.
- Core metrics** are consistently monitored and tracked throughout the entire SDLC.
- Advanced tools provide insights into code maintainability, technical debt, and potential vulnerabilities.
- Technical debt is systematically tracked and addressed.
- Non-functional aspects like security and performance are consistently considered and measured, ensuring no degradation occurs.
- The team members are consistently dogfooding the developed apps, especially before and after the main releases.
Improvement focus
- Encourage root cause analysis for defects to prevent recurrence.
- Focus on improving test coverage further, aiming for near-complete coverage.
- Expand the breadth and depth of automated testing to cover more edge cases.
- Ensure that team-level development practices contribute significantly to the Quality Strategy at the tribe level.
5 - Optimized
Description
- Best practices and lessons learned are systematically shared across the tribe/organization.
- Teams proactively address code quality in both new and existing code.
- Code quality improvements are driven by data and insights from past projects, and there's a commitment to innovation in development, automation, and other quality-related processes.
- Found defects are fixed immediately as part of the development process.
- Advanced static and dynamic analysis tools are seamlessly integrated into the CI/CD process, ensuring issues are caught and fixed early.
- The tribe's outcomes and practices play a pivotal role in shaping the tribe’s Quality Strategy.
- Tribe members dogfood what they build on a regular basis, making it an integral part of their culture and workflow.
Improvement focus
- Share learnings and best practices across the Tribe and organization.
- Mentor other teams to elevate the overall quality maturity within the tribe.
- Continually innovate and refine practices to ensure they are as efficient and effective as possible.
- Ensure that the non-functional aspects are integrated as core elements of the tribes's optimization processes.
** some potential core metrics: Cycle Time, Build Failure Rate, Defect Leakage, CI/CD Failure Rate, Master Pipeline Stability, Deploy Frequency, Code Coverage, etc.
Guiding questions
- How would you describe the overall effectiveness of your development processes in meeting project objectives and timelines?
- What methods do you use to ensure and measure the quality and reliability of your software products throughout the development lifecycle?
- How do you facilitate and measure effective teamwork and collaboration within your development team and across different functional areas?
- How do you identify, manage, and prioritize technical debt in your development process?
- How do you identify areas for process improvement, and what mechanisms are in place for adapting to new challenges and technologies?
- How effectively are we utilizing our resources, including tools and engineering talent, in our development processes, and what strategies are we implementing to optimize their use for maximum efficiency and impact?