DEV Community

Cover image for How Hard Can It Be? „Building a Photo Sharing App is easy!“ (*regrets 😓)

How Hard Can It Be? „Building a Photo Sharing App is easy!“ (*regrets 😓)

Lukas Mauser on June 07, 2025

Recently, I was looking for a simple way to share photos amongst friends and family. But no way I would pay $14.99 a month for a turnkey solution! ...
Collapse
 
emil profile image
Emil

I like the honesty. I got often lost in toy projects with my kids (let’s build a chat app). But yeah, experience makes estimations better, but if you have never done a similar project, well then you have to earn that experience first. But learning is fun and estimations are still wrong, so long live the optimism that it works next time

Collapse
 
wimadev profile image
Lukas Mauser • Edited

If estimations were always right, a lot of projects would have never been build 😃

“Let’s add a chat to this” is a classic though. 😅

Collapse
 
nathan_tarbert profile image
Nathan Tarbert

tbh stories like this are gold i always think i can just 'hack it together' quick and then boom two days gone, makes me wonder if actually learning by pain is the whole point sometimes you think it's just ego or something else at play?

Collapse
 
wimadev profile image
Lukas Mauser

there is no other way than learning by pain - If it does not hurt, you learn nothing :-D

Collapse
 
xwero profile image
david duymelinck

I estimated to be a 5 hour project.

Even with a prototype, 5 hours is unrealistic. If you haven't done something to completion before, a week is the most optimistic estimation for a small application. And at least 2 of those days just thinking about how it should work and were it will go wrong. A prototype is only an indication it can work.

Estimations should be as methodical as analyzing an application. If an estimation is based on a gut feeling external factors come into play, and then things go wrong.

Nuxt Image only works with in memory cache

What, why? This is a ridiculous way to work with files.
My go to for images is after the upload creating a thumbnail and a preview image.

write code without bugs, so I don't have to deploy

You are going to need to deploy at one time or another for some reason.

It's a rabbit hole and it's deeper than it looks from the outside.

I think it is a mix of setting not enough boundaries and a lack of knowledge. I'm fine saying I don't know even if people think I'm the expert. By people I mean myself :)

Collapse
 
wimadev profile image
Lukas Mauser • Edited

You can spend 6 Weeks with planning and estimations and still be off, no matter how methodical. „Predictions are hard, especially if they are about the future.“ The return on time spend by adding planning goes down fast. I think people do it mostly for psychological reasons to calm themselves down :)

Creating thumbnail and preview images myself (with a script) is something that I want to avoid and the main reason I chose Nuxt image. If you want to serve best quality to all device sizes and screen resolutions, and not overshoot too far, you need at least multiple thumbnail and preview image versions, which adds complexity.

Ps - That cache only in memory statement might have been wrong - I am not sure and did not find docs. I removed it. I just saw memory spiking and missed that the default ttl of Nuxt image is only 60s 😓

Collapse
 
xwero profile image
david duymelinck

You don't need weeks for estimations. First break down the parts of the application. Then see if the parts are something you did before or not. For the tasks you did before you can have estimations. For the things you haven't done before, set a time to figure it out to come to an estimation.
If you are in a situation you have to give estimations to someone else, that last part is the hardest to communicate because it can blow up the timeframe. A way to come to an acceptable timeframe is to separate the essential features from the nice to haves. Because the application is broken down in parts, this is easier than depending on a gut feeling.

If you want to serve best quality to all device sizes and screen resolutions

I understand browsers have that capability now, but it doesn't come for free. I'm always concerned about storage, because I confine myself to a world where storage is expensive.

That is why my default is a few formats that solve 80 procent of the cases.

Like I mentioned before set boundaries, they help you to come to solutions faster.

Thread Thread
 
wimadev profile image
Lukas Mauser

It’s good to have a framework like this if you need to do estimates on a frequent basis and it might help every now and then - I used to work with something similar for freelance clients. But retrospectively I made the experience that I either exactly knew how to pull it off because it was a template project or estimations would be a round of roulette. You just can’t account for what can go wrong and what you don’t know and even with consulting an „expert“ you shift the uncertainty to choosing the right person. At some point I decided to drastically simplify the process - start with a quick estimate and add a huge uncertainty factor and communicate that it could be off in advance to the client so he is prepared

Thread Thread
 
xwero profile image
david duymelinck

You just can’t account for what can go wrong

Not everything of it but you can mitigate the problems by setting boundaries and getting as much knowledge as needed for the estimation. I sound like a broken record, but it is how everything works.
I want to build a big house. Do you have enough space? Is is allowed to have a house in that spot? Is there a maximum restriction for that spot? Can you afford it?

start with a quick estimate and add a huge uncertainty factor

I have a problem with adding x amount of time when it are bigger features or a project. It is just gambling with time.
I rather add a little extra time to smaller parts than to big parts. From my experience the estimations are more correct that way.

Collapse
 
cookiemonsterdev profile image
Mykhailo Toporkov 🇺🇦

Beginning was intriguing, but as read father it became overcomplicated. Honestly siple ftp server would be enough. I would recommend to build server yourself and deploy it on raspberry 5 or sth, also buy domen and you have home made server and not only for files)))

Collapse
 
wimadev profile image
Lukas Mauser

don't know how an ftp server fixes anyhting here...

Collapse
 
cookiemonsterdev profile image
Mykhailo Toporkov 🇺🇦

I have few points:

  1. Your solution isn't very cost-effective considering: Cloudflare R2 + transforms ($3.15/month), VPS Hosting ($5–10/month) + your time;

  2. For me, file sharing (not just photos) is mainly about upload/download speed and having reliable storage. If you’re set on using HTTP, setting up your own FTP or HTTP file server can give you full control — otherwise, just use something like Google Drive; the free tier gives you 15GB, which is more than enough in many cases;

Thread Thread
 
wimadev profile image
Lukas Mauser • Edited

Cloudflare R2 is still on free tier and as mentioned, I’m not using their image service so there is no cost for transformations (if I paid for it the transformed files are cached in Cloudflare so it would be much less) + VPS is shared with other apps bringing cost down to effectively ~$2 total per month.

The whole point of the app is allowing every day users (NOT programmers or Computer enthusiasts) to share and view their stuff without requiring a Google account.

Collapse
 
dotallio profile image
Dotallio

Man, I've 100% fallen into this trap thinking 'it's just upload and display, how hard can it be?' The caching headaches alone are enough to make anyone cave - how did you finally handle user upload limits in production?

Collapse
 
wimadev profile image
Lukas Mauser

I didn't - if people want to upload less, it works, if not i get a text message and i upload it myself

Collapse
 
meenakshi052003 profile image
Meenakshi Agarwal

This was fun to read! It’s crazy how 'just a photo app' turns into days of debugging and learning. One thing I learned too—what seems simple often hides a lot of invisible work like caching, memory issues, and user behavior. Trying first is great, but knowing when to build vs. buy saves time and sanity.

Collapse
 
nevodavid profile image
Nevo David

Been there, man - always feels simple at first and then turns into an all-weekend grind. Love this kind of build-it-anyway energy!

Collapse
 
wimadev profile image
Lukas Mauser

Keep up the grind ✊