Introduce or enhance EngX in delivery

  1. Assign reliability or/ and DevOps engineers to the team in order to keep track of system and services status, and solve issues or mitigate risks prior to having any down time or system outage

  2. Introduce practice of TechDebt handling, i.e. once any gap or area for improvement found, then dev should create task in TechDebt backlog which will be planned for the following sprints dedicated to TechDebt (good example: 6 sprints of product development, and 1 sprint of tech debt coverage). And, each sprint there should time allocated to unit tests coverage which can potentially be utilized for not planned refactoring task in case of exception

  3. Increase number of unit & integration tests;

  4. Decrease quality debt by running TechDebt sprint devoted to issues resolution, refactoring and unit tests;

  5. Introduce XP practices, likeĀ pair programming, BDD, TDD, refactoring, code quality, peer review, etc

  6. Make sure to have monitoring and logging system in place, and reporting process with error logs visible for better and faster troubleshooting

  7. Organize EngX iteration cyclesĀ when team can choose tickets based on their own vision of product level from technical standpoint including task for burning out quality debt backlog

  8. Create dev tasks to implement tools for testing of some complex flows cannot be tested from user perspective

  9. Make sure to preserve staging environment as prod-like instance, and execute at least smoke tests in this environment before each release

  10. Make Spike or/and POC for complex features or uknown technologies to be able to identify depdencies ahead, workout precise solution and provide accurate estimates

  11. Ask EngX team for assessment to receive new ideas in the field of how to improve engineering practice in the project

EngX recommendations

  • Create separate KB page(s) to describe Coding Standards which usually describe: (Reference to EngX KB example):

    • Programming language usage (Exceptions, conditions, ternary operators, finalizers, etc. ) (Reference to Google Standards)

    • Architecture modules structure (Reference to example)

    • Recommended structures usages (Reference to example)

    • Third party components and libraries usage (Reference to example)

    • The common use design patterns and anti-patterns

    • Clean Code principles

    • Clean Design principles (KISS, DRY, SOLID, etc.)

    • Do's and Don'ts

    • Use the standards as a reference during code review process, and visa-versa all decisions made during conversation around source code is a subject to be added to Coding Standards.Ensure that Coding Standards are a part of a newcomer's guide

  • Ā IntroduceĀ  SonarQube quality gates for NEW code. Set up Static Code Analysis quality gates. Set up Sonar quality gates in accordance with the agreement. Break CI build in case of quality gates violation; Run static code analyzer as part of CIĀ  - fail build in case of new static code analysis rules violation to prevent new violations

  • Create code review checklist

  • Create a KB page with unit testing approach:

    • how much of code should be covered by tests;

    • who and when writes a unit test;

    • how many of unit tests should be run and when;

    • principles of mocking/stabbing;

  • Integrate unit tests runs in build&deploy pipelines (and set up notifications). collect a metric of unit-tests-code-coverage. Fail build&deploy pipeline if unit test coverage is not met or any of the tests are failed. Introduce pre-commit ā€œmanualā€ rule to check which lines of just written code is covered by unit tests and improve unit tests suite if some non-trivial code is not covered.

  • Revise security principles to be implemented in accordance to EPAM Security CC recommendations

  • Include smoke test as quality gate for every build in CI/CD pipeline. Configure notification from CI server development team in case of smoke test failing (Email, Slack, Teams Integration)

  • Introduce binary repositories like Artifactory or Nexus. Change the deployment process.


Useful materials

External

Internal: