There is a bit of symmetry to this episode that may interest only me. It is the 600th post to be published on the blog, and it is the 60th post in the ChessTDD series. I wouldn’t have thought the series accounted for 10% of my posts, but, there it is. Believe it or not, this post is about wrapping initial development on the project. In other words, I have no more functionality cards to implement. From here on in, it’s going to be constructing test scenarios and addressing any shortcomings that they reveal. (Not ideal, but it’s hard to get user feedback in a one person show with no prod environment)
I also, after some time away have a bit more clarity on what I want to do with this going forward, so you’ll hear some mention of this as I narrate the videos. I’m looking to wrap the youtube series itself and then to use that as the centerpiece and starting point of a video-product that I have in mind. Stay tuned for updates down the line.
What I accomplish in this clip:
- Get re-situated after a hiatus and clean up/reorganize old cards.
- A few odds and ends, and laying the groundwork for the broader acceptance testing.
Here are some lessons to take away:
- An interesting definition of done when it comes to software work goes beyond completeness and even shipping. You can say that something is done when it has demonstrably added value somehow (it has sold or helped product revenue or something)
- Writing unit tests is a great way to turn hypotheses that you have about the code base into productive regression test suite. It’s also a great way to confirm or refut your understanding of the code.
- It bears repeating over and over, but avoid programming by coincidence. If you don’t understand why a change to your code had the effect that it had, stop what you’re doing and develop that understanding. You cannot afford to have magic and mystery in your code.
- There shouldn’t be any line of code in your code base that you can delete without a test turning red. This isn’t about TDD or about code coverage — it’s about the more general idea that you should be able to justify and express the necessity of every line of code in the code base. If removing code doesn’t break anything, then remove the code!