Yak Shaving continues this week with development of a basement inventory system. Admittedly, I could probably look for an off the shelf solution (there are plenty of pantry management apps in the Android and Apple stores), but this is about the experience and about learning something.
In truth, I'm trying to dogfood my company's own product for my product manager day job at Tulip.co. My role is focused on a different end of the product than no-code app building that I'm playing with now, but it's still good for me to get hands on with it.
So let's start with step one. Tulip provides an out of the box inventory app, so I downloaded it and to my virtual factory and was able to get started with it in a couple minutes, which was cool, but the app had a couple features I didn't need (like storing items with individual serial numbers), and I'm the Awkward Engineer and wanted the UI to look and feel a particular way.
The good news, is that the Tulip product makes it so I can edit the app for my own purposes.
Lets get to Yak Shaving
There are two things that I really want to do with my app. First, I want to be able to scan in / scan out with just the barcode reader, no other field entry or button clicks. This is a prerequisite for me for usability.
Second, I want to update the underlying data model with something immutable. Immutability is a fancy word for saying that we never make edits to data. Rather than a spreadsheet showing the current quantity of goods, I want a ledger that shows movement in and out of the pantry.
Calculating the current inventory levels then becomes a matter of running a summation over the movements in and out to get the current balance. Getting history reports for individual items, or tracking inventory levels over time is as simple as driving calculations from the original ledger. And again, once data is entered into the ledger, it is never changed.
The next step after setting the movement records up will be to set up another table with product details. If a new item is entered into the movement ledger, and there aren't any product details (like Product Name, Product Cost, or Product Image), then I want a new screen to pop up to prompt me to enter it.
I originally wrote this blog post on a Saturday, and by Sunday, I was up and running with my app. I have my scan in/scan out feature, and when I scan an unrecognized item, I'm prompted to enter the details. And my immutable ledger and movement histories feature is there, too.
My wife is now making feature requests, like multiple entry for items from scan, restock notification levels, and automatics shopping list building.
They say software never ends.
aka THE Awkward Engineer