Week 14: When Fixes Finally Start Making Sense

This week was a mix of debugging déjà vu, small victories, and quiet “aha” moments, the kind where you realize maybe, just maybe, you’re starting to understand how things actually work. I spent most of it cleaning up old code, fixing a few persistent bugs, and thinking about what I really want to learn next. The End of the “Hacky Rebuild” Era It started with some feedback from my supervisor about my little “force rebuild” workaround after a long-press. He Read more

Week 13: Still Figuring Things Out, One Line at a Time

Another busy week — Week 13 was all about addressing long-standing bugs, improving stability, and preparing for yet another live event. This time, I tackled issues ranging from JWT key retrieval to stubborn gesture conflicts that made certain UI elements unresponsive after long-presses, all while going through yet another live event and wondering why Flutter widgets seem to have a personal vendetta against me. Simple Fixes That Actually Worked The week started with a small task from my supervisor on Read more

Week 12: Polishing, Testing, and Experimenting

Time really flies, and I’m already at Week 12. This round, I focused on refining the QR scanner fixes implemented during the event, improving test coverage across modules, and experimenting with how the Gemini API responds to different error scenarios. Polishing the QR Scanner Fix Last week’s live event fix for the QR scanner worked perfectly, but before pushing it upstream, I spent some time cleaning up the code for better readability and maintainability. I reorganized the decoding logic in Read more

Week 11: Cracking the QR Code Mystery

This week was all about two things: expanding test coverage across different roles and finally figuring out what’s been going wrong with the QR scanner. Both turned out to be pretty eye-opening in their own ways. Expanding Test Coverage I kicked off the week by writing more tests, this time for several user roles in the system. I’ll be adding even a few more soon, but even this round already taught me a lot. Writing tests forces you to really Read more

Week 10: From Smooth UI Updates to Rough QR Scans

This week brought two major milestones: evolving our reactive UI system from basic polling to real-time change notifications, and tackling a tricky QR code authentication issue during a live event that taught me valuable lessons about debugging and secret key handling. Moving Beyond Polling When I first added reactive UI updates, I went with the simplest option: polling CouchDB every few seconds. The app would check its update_seq, and if something had changed, it would refetch the data. It worked, Read more

Week 9: Building Reactive UI with Smart Polling

This week I turned our app from a “refresh-to-see-updates” experience into something that feels truly live. After a few days of research and experimenting, I finally shipped a feature that makes the biggest difference for users during live events, especially for the emcee and judges: automatic UI updates. Smart Polling in Action Polling sounds simple, but real usage makes it tricky. Different roles may need different levels of responsiveness. For now, the most obvious cases are the Judge and Emcee, Read more

Week 8: Lessons from Deep Dive Testing

This week I finally experienced what it’s like to turn testing philosophy into practice and then watch it collide with real code. After a long stretch of trial and error with the QR-scanner tests, I was able to step back and see the bigger picture. Mocking Strategy Mocking started out feeling repetitive, so many when calls! But repetition revealed patterns. I created reusable helpers and fixtures, and learned to mock only what truly matters. For example, JWT tests don’t need Read more

Week 7: From Philosophy to Practice

Last week, I learned about building the right mindset for testing, focusing less on “proving success” and more on “finding boundaries.” This week, I finally moved from that philosophy into hands-on practice. My focus was on integration testing in Flutter, especially around the QR scanner journey. Understanding the Testing Layers More Clearly I deepened my understanding of the three main testing layers in Flutter: It became clear that each layer has its role. Unit and widget tests give speed and Read more

Week 6: Testing Mindset and Safer Conventions

After weeks of wrestling with the QR scanner, I’ve managed to get it to a point where I can finally start focusing on testing, which feels like reaching a checkpoint in a marathon I didn’t know I signed up for. It wasn’t easy (many “why isn’t this working” moments), but with Dr. Shawn’s guidance, I slowly pieced it together. With the scanner ready, my focus shifted from implementing features to implementing their tests. That’s where things got interesting. At first, Read more

Week 5: Best Practices in Action

If Week 4 was about understanding why clean code matters, Week 5 was about practicing the how. I noticed a pattern: the more I leaned on best practices, the less time I spent fighting my own code. This week wasn’t about big refactors, but about sharpening the small details that make code reliable, idiomatic, and easier to maintain. Fixing a Hidden Bug This week I ran into a null pointer exception when trying to access a performance’s event during a Read more