<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Mahmoud Bouchefa — Engineering notes</title><description>Cloud infrastructure, software engineering, and the decisions behind the code.</description><link>https://mahmoud.bouchefa.com/</link><language>en-gb</language><item><title>Building a Private Family Photo Vault Without Overengineering It</title><link>https://mahmoud.bouchefa.com/blog/building-a-private-family-photo-vault/</link><guid isPermaLink="true">https://mahmoud.bouchefa.com/blog/building-a-private-family-photo-vault/</guid><description>How I designed a private photo synchronization system by adding complexity only when a requirement justified it.</description><pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate><category>architecture</category><category>aws</category><category>distributed-systems</category><category>mobile</category></item><item><title>Keeping a Family Archive Small Enough to Operate</title><link>https://mahmoud.bouchefa.com/blog/cost-and-operational-boundaries/</link><guid isPermaLink="true">https://mahmoud.bouchefa.com/blog/cost-and-operational-boundaries/</guid><description>How storage cost, deletion semantics, mobile limits, and observability shape a private archive without requiring a larger platform.</description><pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate><category>architecture</category><category>aws</category><category>cost</category><category>operations</category></item><item><title>A Gallery Should Not Download Your Archive</title><link>https://mahmoud.bouchefa.com/blog/previews-and-event-processing/</link><guid isPermaLink="true">https://mahmoud.bouchefa.com/blog/previews-and-event-processing/</guid><description>Why photo previews became a separate asynchronous workflow, and why a correct cloud object is only one part of a working mobile gallery.</description><pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate><category>architecture</category><category>aws</category><category>flutter</category><category>asynchronous-processing</category></item><item><title>Resuming Uploads Without Starting Over</title><link>https://mahmoud.bouchefa.com/blog/resuming-uploads/</link><guid isPermaLink="true">https://mahmoud.bouchefa.com/blog/resuming-uploads/</guid><description>How the mobile client and S3 reconcile multipart sessions, refresh upload permissions, and recover when completion or cleanup changes remote state.</description><pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate><category>aws</category><category>mobile</category><category>distributed-systems</category><category>multipart</category></item><item><title>Synchronization Is a Reconciliation Problem</title><link>https://mahmoud.bouchefa.com/blog/synchronization-is-reconciliation/</link><guid isPermaLink="true">https://mahmoud.bouchefa.com/blog/synchronization-is-reconciliation/</guid><description>Persistent local state, account-scoped idempotency, and an Android failure that showed why bounded workers must make durable progress.</description><pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate><category>architecture</category><category>distributed-systems</category><category>flutter</category><category>synchronization</category></item></channel></rss>