182 karma · joined July 8, 2015
1. Bit of banter. 2. Talk about aging cards/blockers 3. Talk about the cards on the board, from right to left. Since further right is most important. 3. Share things with each other that came up since last standup that you think is worth sharing. 4. Ask for help. Offer help. How can I help you get that card over the line? 5. Final bants.
Caveat - because you bake the QA in. The code itself is already quality assured. Then QA resources can do exploratory testing which does carry a separate value.
So you don’t get a say in the test or the code? It just messes itself up?
If you are picking up some code to work on, the nicest to work with is the one that was done with TDD.
If you can’t do that yet, you spike, mess around with it, get your bearings and some insight into where you want to go, try a few things out. Then, trash that and then write the first test as above.
It almost always works, and excels somewhat in legacy code vs just changing things.
It isn’t about ‘might work’. The TDD paradigm isn’t about finding shiny places where you can use. It is just a nice way of writing clean maintainable software in almost all areas.
Places where TDD won’t work are usually by exception rather than the norm.
Often those exceptions are where something already exists and wasn’t put in by TDD because by the definition of TDD you wouldn’t have been able to write that in the first place.
And if not, perhaps there was a preconceived idea of the code block and what it was going to do, rather than specifying the behaviour wanted via the RGR cycle. With a preconceived idea, with or without the tests, if that idea is wrong, you’ll hit the dead end and have to back track. Fortunately I find that even though I do sometimes find myself in this situation, quite often those tests can be repurposed fairly quickly rather than being chucked away, after all the tests are still software, and not hardware.
Since typing speed was never the bottleneck in software development. Throwing away the little bit of code you wrote, it not expensive. And writing it back in with TDD is incredibly efficient.
The reason is, the tests and the code are symbiotic, your tests prove the code works and your code proves the tests are correct. TDD guarantees you always have both of those parts. But granted it is not the only way to get those 2 parts.
You can still throw into the mix times when a bug is present, and it is this symbiotic relationship that helps you find the bug fast, change the test to exercise the newly discovered desired behaviour, see the test go red for the correct reason and then make the code tweak to pass the test (and see all the other tests still pass).
The times I have believed this myself, often turned out to be wrong when the full cost of development was taken into account. And I came back to the code later wishing I had tests around it. So you end up TDDing only the bug fix and exercising that part of the code with the failing test and then the code correction.
However it doesn’t have to be one or the other.
Sometimes a single commit (or PR if you prefer multiple commits) can update the api and all clients at the same time.
Sometimes client callers are external to the repo/company. In which case backward compatibility strategy is needed.
There is no need to abandon a concept of a single repo just because you might not use one of the main benefits all the time.