The solution is to combine all 3 actions into a single interface:
- Sharing is still done via the convenient 'messaging' interface - Each 'chat' is actually a collection of 'events', each event is tagged with the members of the chat - Searching is done via people, which is faster and more accurate than face detection/NLP, and is how our brains index memories anyway.
For example, you went on a trip with your family in 2006. You want to find those photos, you can either open the 'chat' with your family or any member of the family, as chats also inherit events they are a subset of (this can be toggled). As long as you remember at least one person who was part of this event, you can find it virtually instantly.
Unlike an actual messaging platform, the tagging/chat system here doesn't require the other people in the event to actually be on the platform, or real people. For example, you can tag a baby, or a pet as a placeholder to still gain the benefit of searching via that parameter. You can also choose to assign the placeholder in the future to a real person, and they will replace the placeholder. For convenience, placeholders can also be assigned from phone contacts, and if/when they register, they immediately inherit the placeholder's events.
Finally, the effort of finding the photos to contribute to a 'shared album', or in this case an event, shouldn't be duplicated. If you are added to an event, the 'Smart Suggestions' feature simply shows you photos in your gallery in the same time range as the event.
This was about a year's worth of work, and business logic was and remains the most challenging part of this, considering Pockets are designed to be shared between multiple people, so it had to be designed more like a chat app than a photo storage solution. For example, when you upload a photo to a Pocket with real users, you have 3 hours to permanently delete the photo, otherwise it becomes 'grandfathered'. Users can also dump the 100 nearly identical selfies they took in an event, pHash duplicate detection organizes these, so each user can choose which one they like the most and delete the rest, only for themselves. This way each user curates their own version of the photo album however they like without affecting the others.
Currently working on making it simpler to automate importing photos as events using the metadata in your camera roll. I've made some progress by grouping photos based on time/location, but it needs some extra work to be useful, like inferring a home city, people who live in multiple places, etc., but I feel that you could probably get pretty far inferring groupings based on metadata. It might be a UX nightmare, but we'll see...