8 Wastes in Software Development
D – Defects
Poor-quality code with unresolved compiler warnings (e.g., -Wall, -Wextra) or undefined behavior increases technical debt and debugging time.
O – Overproduction
Creating extra utility functions, abstractions, or features “just in case” leads to bloated binaries and maintenance overhead.
W – Waiting
Idle time due to bottlenecks in CI/CD pipelines, dependency on peer reviews, or environment provisioning.
N – Non-utilized Talent
Sticking with outdated standards (e.g., C++11) despite the availability of modern features in C++20 or C++23, like ranges, concepts, or coroutines.
T – Transportation
Waiting for another developer’s module or API to be complete before integration, affecting delivery cadence.
I – Inventory
Retaining third-party libraries, headers, or internal modules that are no longer used or relevant, increasing compile time and complexity.
M – Motion
Excessive stakeholder approvals, unclear ownership, or frequent context-switching across tasks and repositories.
E – Extra Processing
Overengineering a solution, performing redundant data conversions, or excessive logging/checks beyond what is functionally necessary.
5S Tools for C++ Developers
Sort (Seiri)
Eliminate unnecessary code, files, and dependencies. Remove unused header files, obsolete functions, dead code blocks, and deprecated libraries. Regularly clean your repository to reduce clutter and confusion.
Example:
- Delete legacy .cpp/.h files that are no longer part of the build.
- Remove unused includes (#include <vector> when std::vector is not used).
Set in Order (Seiton)
Organize code, folder structure, and build configurations logically.Follow a consistent directory structure (e.g., src/, include/, tests/). Use clear naming conventions and group related files and classes logically.
Example:
- Keep header and source files in separate folders.
- Maintain a standard naming format like class_name.hpp, class_name.cpp.
Shine (Seiso)
Keep the codebase clean, readable, and maintainable.Use formatting tools (like clang-format), linters (clang-tidy), and regular code reviews to maintain code quality.
Example:
- Apply consistent indentation and bracket styles.
- Remove commented-out code blocks from version-controlled files.
Standardize (Seiketsu)
Establish and enforce development standards and best practices.Define and follow coding standards (e.g., Google C++ Style Guide), enforce CI checks, and adopt modern C++ best practices (RAII, smart pointers, etc.).
Example:
- Create a .clang-format or .editorconfig file.
- Enforce usage of std::unique_ptr or std::shared_ptr instead of raw pointers.
Sustain (Shitsuke)
Maintain discipline to follow and continuously improve the standards.Ensure the team regularly follows coding guidelines, performs refactoring, and updates practices with evolving C++ standards (like moving from C++14 to C++20 features).
Example:
- Encourage regular refactoring sprints.
- Hold knowledge-sharing sessions on new C++ features like constexpr, modules, or coroutines.