Three years ago I joined Flipdish as their first Product Manager. Back then it was a startup that had found product market fit and just needed to execute quickly and grow. I had product experience, but I think the kicker that got me the job was that I built my own app to track things like tips and delivery addresses when I worked as a fast food delivery driver, so I could hold my own technically too.
I don’t code in Flipdish (officially) but I can’t keep my hands out of VSCode, so over Christmas I decided to build a co-working app with my fiance. She did most of the backend (node/Express/Firestore) and I worked on the marketing site and web app (Nuxt/Vue3).
Without realising it, I found myself building all the features that I saw make a huge difference to Flipdish’s success. I’ve never seen anyone write about these in a clear, easy list, so here we go. I wanted this list to be tactical, that anyone can take and build out a solid product with, so below are 5 things that I’ll be building from the start in all my future projects.
1. Audit logs
Being able to see an “activity log” of actions taken in a given account is immensely powerful. In Flipdish it’s used daily by clients and support staff to debug any queries that may arise, or just to understand general activity on a given account. For Reservadesk, it’s proven hugely helpful early on to not only understand account activity, but simply for quick development. I can see when I make changes and the before/after of what they were. I’ve written a separate post about best practices for audit logging if you’d like to learn more about what makes a useful audit log.
2. Granular user permissions
When trying to figure out what way to configure your user permissions, it’s easy to do something simple, like giving yourself and your staff an “admin” permission (god mode, basically), and your users something general like “guest” or “teammate”. This will bite you later on, and is a tricky thing to unwind.
From now on, all of my projects will have granular user permissions from the outset. It has minimal up-front cost, and gives you flexibility down the road. You can always “bundle” your granular permissions together so that it appears in UI as a general thing, but you’ll have that flexibility down the road should you need to sell to enterprise or grow into different markets/regions.
In Flipdish, since we’ve exploded across the UK, Europe and North America, we have country managers, support staff, success staff, contractors etc, and they all need specific permissions to different things. Had we not had granular user permissions from the outset, this would have inevitably slowed us down and hindered growth.
3. Image manipulation API
It’s pretty rare that the projects you build won’t have images in some form. Before joining Flipdish, I think I was simply serving huge images in my sites/apps with minimal optimisation. Rookie error. I’ve since discovered a whole new world of intelligent image optimisation via services Imgix or imagekit.io. They both offer what is effectively an API layer on top of your images, meaning you can build your UI and simply pass in query parameters to “transform” the image based on what the UI needs at that particular time.
For instance, let’s say your user uploads an huge 1000px x 1000px image, which will only be used as a small icon. You don’t want to load that massive image on a mobile device.
With the image manipulation API you can request that image, but at a smaller size, like 40px x 40px. The service will transform it on the fly for you. It’s very impressive. Once you start using this, you’ll never go back in my opinion.
I can see you rolling your eyes at this one, but hear me out. You don’t need to localise your app into multiple languages from the outset, but building in i18n from the start is something I’ll do religiously from now on, for two reasons.
- The cost is low. I still dev in English, but then quickly create the strings in localise.biz (or similar service) before finally building a release for production. If sometime down the line I see that the app is popular in a given region that has other languages, it’s fairly trivial to get your app translated and you’re away.
- You can let your customer define their own locale customisations. This gives your app a layer of customisation that’s relatively simple to achieve, but can be a real differentiator. Users can sometimes just want a certain word to say something else. In reservadesk, we built a system where our users can define certain words themselves, like the main call to action to reserve a desk can say “book now” or “reserve” - whatever the customer wants. In Flipdish, we have customisation requests every single day from clients and our ability to accommodate their requests has been central to keeping them as clients.
5. Referral scheme
This one doesn’t necessarily need much dev work initially, but it’s something I’ll be keeping in mind for all future projects. Letting your customers who love your app be rewarded for sending others your way is an absolute win-win. In Flipdish we’ve had partners and affiliates as a key strategic element of our growth plans across the globe. Having a robust system for rewarding your best referrers in a systematic way will absolutely help you down the line.
Bonus - your API is an asset
One huge thing I’ve learned in Flipdish is that your API isn’t just something you need for your UI to work. If you go about it right, building an open, public, well-documented API can make magic happen. You’ll find that companies start building things on top of your APIs for clients who need it, making them extremely sticky to your platform.
Extra bonus - we’re hiring - remotely
My Fiance and I are looking for a house, which I'm sure you know is not cheap so we need some sweet sweet referral bonuses. If you like the sound of working somewhere like Flipdish, we're hiring. Our stack is primarily C# on backend, React/React Native frontend, as well as native iOS and Android development in Swift & Kotlin.
I’m Chris Dermody on Linkedin, or cderm on Twitter. I'm more than happy to answer any questions about any roles, or get you in touch with the person who can answer them if I can’t 🙂
Top comments (2)
Hey nice points to note, and what do you think is better, using an installable image manipulation package or library or use an external api?
For me, the API approach is better but I guess it always depends doesn't it!