1. Understand the bash pitfalls
2. Use shellcheck
3. Emphasise on functional code
4. Discover the simplest concepts
5. Explore their optimal composition
6. Use containers for integration testing
7. Stop when the fun stops
https://github.com/gerhard/bash is meant to capture the mechanics and reasoning behind test-driven bash code. It also conveys the process behind evolving a good bash codebase.