This week has been a lesson in the importance of having a CI
This week has been a lesson in the importance of having a CI, I've found myself rushing these last two weeks to finish some features to make the application easier to use for new comers. The change set reached over a thousand lines of mixed bug fixes, refactors, tests, and the feature work.
The tangle of dependencies between the tests, bug fixes and feature work led me again and again postpone splitting off work into atomic MRs and instead further grow the patch set, without a CI testing entirely blocks all of my development progress and was postponed over and over again.
I've taken this entire week to do a mini reset on the testing pipeline for the project and attacked it in several different ways.
I've used the new --gauntlet feature I've added to my maestro wrapper to massively reduce test flakiness across the board, looking for failure patterns and applying work arounds universally.
I worked around multiple issues with Maestro flakiness during tests especially those involving Webview.
And, most importantly, I've introduced a second machine to my testing workflow. By using rsync rather than my repositories I'm able to do early testing on actual development work allowing me to see the results of the full end to end suite far earlier on in development.
The second machine also has the advantage of running with entirely different timing as it's running on a simulator rather than a real device unlike most of my day to day testing.
I'm hoping all this hardening work will allow me to push out these final few onboarding features and get the app released to the initial test group. And later on allow for some far more aggressive code refactorings without the fear of user touching regression.