This sprint, my colleague and I focused on improving the security of our user identification process by applying the bcrypt algorithm to hash user UUIDs. This enhancement ensures that sensitive user data is protected, even if our data storage were to be compromised. Gitlab activity included integrating bcrypt hashing into the backend to hash user UUIDs using a cost factor of 10, modifying bcrypt configuration to use a fixed salt, ensuring consistent hashes across runs, and submitting final changes to incorporate one-way hashing of UUIDs into the main codebase. Collaboration was a strong point during this sprint. My teammate and I divided the responsibilities clearly: while I explored and tested the technical implementation of bcrypt, they focused on integrating the updated code into the overall architecture and ensuring compatibility with existing endpoints. The decision to use a cost factor of 10 proved ideal, it gave us a reasonable level of security without compromising performance. Our communication also worked well. We checked in frequently and held short meetings to keep each other up to speed. As a result, we were able to rapidly troubleshoot issues and make decisions quickly, like choosing to use a fixed salt instead of a randomly generated one to produce consistent UUID hashes.
One issue we ran into was a lack of documentation around the UUID hashing logic. Initially, we assumed the random salt provided by bcrypt would be fine, but after seeing inconsistent hash outputs during tests, we realized the need for a predictable result. This led to a mid-sprint pivot toward using a fixed salt. We had to backtrack, re-implement, and update our test cases, which took us some time. This could have been avoided with better planning. Additionally, we ran into some confusion around git merge conflicts when integrating our changes into the main branch. While we resolved them, it highlighted the need for more careful branch management and communication before pushing large updates. As a team, we could benefit from implementing a more structured approach to testing and reviewing security features. If we had written our unit tests alongside the feature development instead of afterward, we could have caught edge cases and salt inconsistencies earlier. Pair programming or doing short walk-throughs of each other’s code before merging would also help with smoother integration. We also realized the importance of having centralized documentation. Creating a shared sprint wiki or README update plan could help future developers (and our future selves) understand our design decisions, especially when it comes to something nuanced like hashing algorithms.
Personally, I’d like to improve on anticipating the implications of the tools I use. Initially, I took for granted that bcrypt’s built-in salting behavior was the best option without considering how it would affect UUID. Doing more research ahead of implementation or even reaching out for guidance from more experienced developers, could have saved us time. I also want to get more comfortable with conflict resolution in Git. While I understand the basics, more practice and familiarity with rebase, stash, and other tools would make collaboration smoother. In Apprenticeship Patterns, the pattern “Dig Deeper” encourages developers to go beyond surface-level understanding and truly learn the underlying mechanics of a technology. It’s about investigating not just how something works, but whyit works that way. I chose this pattern because it reflects exactly what I failed to do at the start of this sprint. When I implemented bcrypt, I understood it hashed securely, but I didn’t dig into how it used salt or how to configure it for consistent output. Had I taken the time to explore bcrypt’s inner workings, I would have realized the random salt would cause each hash to differ and planned for a fixed salt approach from the start. If I had read and applied “Dig Deeper” earlier in the sprint, I believe our implementation would have been more efficient and less prone to last-minute changes. This pattern reinforces the importance of understanding the tools we depend on.
References.
From the blog CS@Worcester – Lynn'sBlogs by lynnnsubuga and used with permission of the author. All other rights reserved by the author.