- Gandal Foglia
- Posts
- How Overengineering My Secret Santa App Taught Me to Prioritize User Experience
How Overengineering My Secret Santa App Taught Me to Prioritize User Experience
A look back at how requiring user accounts in a seasonal app became a barrier to adoption, and what it taught me about prioritizing user experience over technical ideals.
The Birth of Elfgorithm
As developers, we often start personal projects to explore new technologies. That's how Elfgorithm, my Secret Santa web application, came to be. I wanted to experiment with modern web technologies while solving a real problem: organizing our family's annual Secret Santa gift exchange.
For my family's use case, it worked perfectly. A small group of tech-savvy people who didn't mind creating accounts, and who would reuse them year after year. This initial success in a controlled environment gave me confidence, but it also blinded me to a crucial flaw in my design.
The Technical Decisions
I built Elfgorithm with a robust, modern stack:
const stack = {
frontend: {
framework: 'React + Vite',
ui: 'tailwindCSS + shadcn/ui',
i18n: 'react-i18next',
dataManagement: 'React Query'
},
backend: {
auth: 'Supabase Auth',
database: 'Supabase PostgreSQL',
email: 'Mailgun'
}
};
While these technologies worked beautifully together, they led me to an over-engineered solution: requiring every participant to create an account. The reasoning seemed sound at the time:
Ensure explicit consent for sending Secret Santa match results (revealing who each person needs to buy a gift for)
Avoid abuse (prevent spam and fake participants)
Support wishlist feature (allowing users to create and share their gift preferences)
When Reality Hit
The problems emerged when people outside my family tried to use Elfgorithm for their own Secret Santa events. The mandatory account system became a significant barrier in three key ways:
Organizational Friction
Event organizers needed to first convince everyone to create an account
What should have been a simple "input emails and start" became a multi-step coordination challenge
Many groups abandoned the process before even starting the actual Secret Santa
The Group Size Paradox
The larger the group, the more exciting a Secret Santa should be
Yet larger groups meant higher chances of someone refusing to create an account
A single holdout would prevent the entire event from proceeding
Momentum Killer
Secret Santa planning often happens in moments of spontaneous holiday spirit
The account creation process killed this momentum
By the time everyone had accounts (if they ever did), the excitement had faded
Understanding the Mismatch
The fundamental problem wasn't technical - the code worked flawlessly. The problem was that I had built a year-round application for a seasonal, one-time-use case. It's like building a permanent ice rink for a winter holiday party.
Looking back, the ideal solution would have been radically simpler:
No Accounts, Just Events
Organizer enters participant emails
System generates and sends match emails
Each email contains a unique, single-use link to view/update wishlist
Trust and Simplicity
Accept that some people might abuse the system
Understand that perfect security isn't needed for a holiday gift exchange
Focus on making the experience fun and immediate
Where Elfgorithm Stands Today
The application continues to run successfully for my family's annual Secret Santa, serving its original purpose perfectly. However, I've stopped trying to expand it to a wider audience. The current architecture is so tightly coupled with the account system that making it optional would require a complete rewrite.
While I could rebuild it with the lessons learned, the seasonal nature of Secret Santa means the investment wouldn't be justified. Sometimes, the best outcome of a project isn't the product itself, but the insights gained along the way.
The Lasting Lesson
As developers, we instinctively approach problems through a technical lens. We think about security, scalability, and feature extensibility. But for many applications, especially seasonal or occasional-use ones, the most important feature is getting out of the user's way.
The perfect Secret Santa app isn't one with the most features or the best security - it's one that lets people quickly organize their gift exchange while the holiday spirit is high. The technical implementation should serve the user experience, not dictate it.
In the end, this project taught me that the best technical solution isn't always the most technically impressive one - it's the one that best serves its users' needs and context.