The concept of Technical Debt is a Software Development analogy comparable to monetary debt. There are several published information regarding technical debts, its causes, and its impact. I would like to use same analogy and coin Technical Investments those “tasks” that do not add direct value or increment but will make creation of value easier in succeeding sprints and prevent/reduce impact of Technical Debts in the long run. Here are some areas your team can INVEST resources on to ENABLE faster value creation and prevention of technical debts:
1. Invest on Automation Infrastructure
Establish your Continuous Integration and Continuous Delivery mechanisms, these removes the risks of integration and testing issues during product development and delivery. At the first few days of your project, create a HELLO WORLD implementation that runs on your C.I.
Continuous Integration is a process of merging and testing all development works at least once a day (via time-based triggers, or several times a day via event-based triggers such as check-ins). Build a HELLO WORLD code on your intended integration environment and setup each C.I. step. Jenkins is one of the most popular free C.I./C.D. platform. Jenkins works best when combined with repositories that will allow pre-processing of code prior to check-in (such as Git Hooks). You may integrate/include the following C.I. steps (jobs) in your HELLO WORLD code.
- GitHooks: pre-commit hooks that do not allow check-in of code that violate coding standards (these hooks can execute code checks)
- Code Metrics gathering: this may include LOC, Code Complexity etc.
- Static Code testing: perform static code checks to detect any static code violations introduced by the newly added code
- Build Test: To check whether the source builds properly, there are no compile/link errors
- Unit Testing: Execute xUnit test environment and enable Test-Driven Development
- Integration/System Level testing: Executed Behavior-Driven tests that can be performed daily/regularly
- Memory Leak: while executing Unit/System Level tests, include tools that measure memory leak
Continuous Delivery facilitates deployment of Software into production. These include methods such as Blue-Green Deployment; Dynamic Provisioning virtualized environment (such as AWS, Docker, Vagrant, vSphere) and managing them through Chef.
2. Invest in Architectural Runways
In Agile, we always avoid to do Big Up Front Design(BUFD). There is a need to strike a good balance between emergent design and intended design. Emergent Design is the process of discovering and extending the architecture as more is known in the product so as to implement and validate the next increment. It reduces excessive attempts to future-proof the system. On the other hand, there is a need to invest on Intended Design to consider non-functional requirements and compatibility of each increment in the overall scheme of things in the enterprise.
Architectural Runways are built, used, and extended to have just enough design with balanced BFUD and emergent designs. According to Scaled Agile Framework (SAFe), a system that has architectural runway contains existing or planned infrastructure sufficient to allow incorporation of current and near term anticipated requirements without excessive refactoring.
3. Invest on Architectural Spikes/Exploration and Experimentation
Spikes are time-boxed risk-reduction technique popularized by Extreme Programming (XP) where just enough code is written to explore the use of a technology or technique that the team is unfamiliar with. Software development is an empirical process. With spikes, we can have more reliable decisions (and estimates) based on more information uncovered/known. Prototypes enable understanding of customer needs and help evaluate feasibility of possible solutions. Very little maybe known from the start, spikes help identify details of requirements and design.
4. Invest on Compliance/Quality Enablers
Business and deployment environments may impose rules and regulations on the Software Development process and of the actual Software product/device. These may include compliance to Information Protection Laws such as GDPR in Europe, heavily regulated domains such as Medical/Healthcare, Automotive/Transportation, and Finance. Establish infrastructure and processes to ensure required quality checks are performed seamlessly in the development. Employing tools to test compliance such as compliance to OWASP, safety and security analysis tools such as Coverity, Testing Suites such as those offered Parasoft, and other applicable benchmarking/compliance tools as recommended in the industry where the Software will be used.
5. Invest on Team and Relationship-Building Enablers
The CORE of Agile Development is the Agile Team. Establish Team Ground Rules to facilitate sustainable and flowing processes. Ground Rules accelerates the team to go through team development stages of forming, storming, norming and performing. Ground rules set behavioral models on how individuals interact and coordinate in joint activities. Ground rules facilitate faster onboarding and getting consensus. Ground rules to be effective should be clear (not ambiguous), agreed and followed. There should be fun ways to ensure compliance such as, fines or petty consequences for violators. Ground Rules can be set for Meetings, Reporting, Getting consensus, election methods, conflict management methods, Coding Standards, Code Check-in/Check-out rules, CLAYGO, Minutes-taking rotation to name a few.
Your Project Sponsor can also “sponsor” (or from the fines collected from violators of ground rules) team-building activities that will facilitate teamwork such as meetings over food, having mini-celebrations every milestones achieved.
6. Invest on Development/Member Skills
Continuous attention to technical excellence and good design enhances agility. This is one of the 12 Agile Principles. Solidify cross-functional teams by cross-training or shadowing whenever time permits. Encouraging members to take professional skill certifications and learn by their own. Increase awareness of members on the latest advancements related to the industry. Have them join seminars or local meet-ups (in the PH for Agile Practitioners, there is a monthly meetup hosted by agilephilippines).
Tasks that do not directly create value are not necessarily wastes. The team should identify and implement Technical Investments that can help them create value easier and prevent Technical debts. While most of the above recommendations can be immediately applied at Sprint 1, teams should identify improvement opportunities (technical investments) every retrospect and as much as possible apply at least 1 on the next sprint.
Please do share Technical Investments that has been effective in your team in the comment section below.
– Agile Pinoy