Most people take thousands of photos a year and never look at the majority of them. Popsa helps those people find the ones that matter and turns them into something tangible they’ll actually keep and look back on time and time again.
Our mobile apps run machine learning on customers’ devices to analyse photos (without uploading them to the cloud); pick out the people and moments that mean something; and design a layout that tells the story. From the outside it looks simple – and that’s the point.
Behind that simplicity is a lot of machinery: iOS, Android and web apps, backend services handling payments and order fulfilment, infrastructure managing image processing and delivery across 50 countries. These systems hold people’s most personal photos and process their payments. They need to stay reliable and secure, and the team’s understanding of how everything connects can’t be allowed to go stale.
That understanding lives in documentation that explains how the systems connect, what the conventions are and where the sensitive boundaries sit. It’s what lets a team maintain, secure and extend complex systems, without depending on one person who happened to build each piece. Keeping that documentation alive, though, is a problem every engineering team has struggled with at one time or another – including ours.
I’ve been on enough engineering teams to know the cycle. One of us decides that “this time, the docs are going to be properly maintained”. There’s a burst of effort. Pages get created, conventions recorded, architecture diagrams drawn. Sometimes, teams switch entire systems (GitHub, Confluence, Coda), creating fresh momentum. For a few weeks, maybe a couple of months, things look great.
Then it rots.
Not because anyone stopped caring but because software change isn’t linear. You can absorb tens of incremental changes without the docs drifting much, but then you refactor the authentication layer, or migrate to a new framework, or restructure an API. The documentation was right when it was written, but the codebase moved on. For example, we’ve just refactored our iOS app from a linear navigation flow into a tab-based flow. After a change that large, whole sections of documentation can describe a system that no longer exists. Documentation can easily drift.
Most engineers know this can be a problem, but recently our team thought about how we could solve it by thinking of documentation as a system, rather than a task.