Hacker News new | ask | show | jobs
by insin 2199 days ago
Clone an existing app.

You'll very quickly bump into real-world problems you've never solved before, both in implementing the requirements of the app and in organising your code as the implementation grows.

Plus the design is already done for you (which honestly feels like cheating, as it removes an entire aspect of the app you normally have to worry about in parallel with the rest of the implementation), so you'll also get experience working to a design spec.

I've been scratching some of my own itches while learning Flutter, which has resulted in a bunch of apps with a small number of screens, without user auth or any complex API usage. A workout timer (2 screens), a simple trivia game (3 screens), a remote control (~5 screens), a sound/video/image board for SEN kids (7 screens in a single ~3000 line .dart file)…

Then I tried cloning the app my gym was using to post workouts and log results before it closed down due to COVID-19 - boom! [1] Just from this one app I've gained experience with Firebase Auth, Cloud Firestore, Cloud Storage, co-ordinating and navigating between 24 screens and counting, CRUD screens, screens with multiple user permissions in play, sharing editable data between multiple screens, some fairly complex dynamic display logic in the workout editor, creating bar charts with user statistics, implementing specific little interactions the original app has (like smoothly sliding a comment input into view as you scroll down and sliding it out as you scroll up) and umpteen other things I can't think of right now.

[1] https://www.youtube.com/watch?v=DvWJgZKj7cw

1 comments

This only works if you're extremely honest with yourself about the constraints and you earnestly work through all of the edge cases and UX. If you don't have the experience to know what those constraints are, you will likely miss many things that go into what it takes to build a solid product.

It's so easy to ignore the real-world concerns of a product by just cloning the visuals, sticking a ribbon on it, and calling it a day.

I find this to be a valuable exercise in moderation, but at some point you'll need to build some products from scratch (and I'm not even really talking about the code itself) to gain the requisite experience.

I really don't have this problem at all when working on personal projects--my problem is very much the opposite. Deep down, what I want to do at my job but never have time to do, is create something absolutely perfect. So when I'm working on a personal project, which has no time constraints, I work through the edge cases and UX far more than is necessary or reasonable. That level of perfectionism is why all my personal projects always feel almost-done.
Unless you try.. using it?