Constructing a Minimal Viable Product for UpPush.me in 30 days
A couple of weeks again, I had the thought of constructing a service that sends day by day reminders to encourage individuals to work on their objectives. For starters, the service would ship an SMS message with an inspiring quote on a specific schedule, for instance proper earlier than a exercise session.
There are a lot of motivation apps out there that supply an identical service: present motivating quotes at random or scheduled instances, however I haven’t discovered any that doesn’t require putting in an app and makes use of SMS as a substitute. Thus I made a decision to present this a shot and construct one myself, as a facet undertaking with my present job.
The motivation for this undertaking is twofold: work on system design, and find out about advertising and marketing and development.
Ultimate end result: https://www.uppush.me/
Stack: Subsequent.js, Materials UI, AWS EventBridge Scheduler, AWS SNS, AWS Lambda, DynamoDB, Terraform.
There are 4 key elements for this to work:
- A kind for customers to enroll
- A database for storing person schedules, and different metadata
- A scheduler to set off sending an SMS on the person’s chosen time
- An SMS dealer: a service that gives an API to ship SMS messages to a given cellphone quantity in change of a small payment.
The standards I had for designing the structure have been:
- Simplicity: Preserve the design so simple as doable and keep away from pointless complexity. This may assist with upkeep and minimising points.
- Low value: Select choices which have a free tier or are low-cost, however nonetheless don’t compromise on high quality.
- Velocity: Use platforms and instruments I’m aware of to scale back friction and go as quick as doable.
The Touchdown Web page and Signal Up Kind
The touchdown web page ought to be capable to showcase the worth of the service to guests, in a easy and concise manner. Then as soon as familiarised with the service, customers ought to be capable to resolve whether or not to enroll or skip.
To construct the person interface, I used Subsequent.js and the Materials UI library. Subsequent.js permits to rapidly develop the client-side and backend APIs, and comes with many optimisations out-of-the-box — on high of offering a wonderful documentation.
Internet hosting is completed on Vercel, the corporate that created Subsequent.js, and which offers a beneficiant free tier with sufficient quota for a undertaking of this scale. It additionally integrates with GitHub and affords CI/CD proper off the bat.
The applying by design doesn’t depend on heavy database reads or writes, and doesn’t retailer any relational information. I picked AWS DynamoDB because it matches completely: It’s serverless (no provisioning and upkeep overhead), has a low and predictable provisioned value, and is no-SQL.
A really fascinating and enjoyable half to design and implement.
As soon as signed up, customers count on to obtain an SMS at particular instances of the day, and particular days of the week — for instance each different day at 6:00.
There are a lot of choices for a job scheduler (e.g. Airflow, Celery), however coming again to the design necessities, the best and quickest answer is Amazon EventBridge Scheduler: it’s serverless, simple to arrange, and has a beneficiant free tier.
An EventBridge schedule (equal to a cron job) is created for each quadrant of the hour (at minute 00, at minute 15, at minute 30, and at minute 45), for each hour of the day, and for on daily basis of the week. This leads to 4 quadrants x 24 hours x 7 days = 672 schedules.
Every person is then assigned to the schedules that correspond to their chosen instances throughout enroll (transformed to UTC).
Caring for person timezones throughout enroll was thrilling to work on. Typically, we are able to safely assume the timezone configured within the person’s locale configuration (system settings) is the place the person lives, however that’s not all the time correct, as a result of customers might be touring, or as a result of the locale configuration merely can’t be accessed or learn from the browser. Thus the signup kind has a dropdown listing of all generally identified timezones customers can choose. The shape defaults to the timezone learn (or guessed) from the locale configuration.
As soon as a timezone is chosen, the person’s schedule is transformed from locale timezone to UTC by utilizing the listing of UTC offsets within the IANA database.
The SMS Dealer
To programatically ship an SMS to a given cellphone quantity, AWS SNS is an possibility that matches nicely with our design necessities. It’s reasonably priced (though not all the time the most cost effective), and integrates nicely with different AWS companies.
For UpPush.me, each schedule triggers a name to a Lambda operate that fetches a quotes and codecs the SMS message that’s then despatched to subscribers by way of SNS.
Nonetheless, I bumped into a couple of hurdles that required some back-and-forth with the AWS assist workforce (which was very responsive and eager on serving to, even on my “primary tier” private account):
- Elevating the default spending quota of 1 $/month.
- Transferring out of the SMS sandbox to have the ability to ship messages to cellphone quantity that aren’t restricted to a pre-established listing of allowed locations.
- Making an attempt to get a Sender ID, which is a requirement by a couple of nations like India which represents an incredible marketplace for UpPush.me given the massive inhabitants. I haven’t obtained the Sender ID but however fortunately nearly all nations don’t have it as a requirement.
To learn extra, observe this hyperlink to the AWS documentation.
As soon as I had an MVP, I began sharing UpPush.me on boards for builders like indiehackers.com and subreddits like r/smallbusiness and r/EntrepreneurRideAlong. The end result was that I obtained suggestions from different builders and had my first few subscribers 🎉!
What different builders discovered nice was the readability of the message from the touchdown web page, and the way it conveys the thought and a easy and clear manner.
One other widespread suggestions concerning the service was that the UI (touchdown web page) wanted enhancing, and I obtained quite a lot of suggestions to make use of a no-code device to construct the touchdown web page as a substitute of utilizing a React library. Though you will need to have a visually interesting UI, it isn’t probably the most essential a part of UpPush.me. Thus at this stage, I choose to curate and enhance the current UI, and deal with constructing the service additional, as a substitute of investing on rebuilding it with a no-code device.
Customers additionally shared that they’d like so as to add options comparable to submitting quotes, and ranking the quotes despatched to them by message or writer.
- Perfection is the enemy of fine: As engineers and builders, we are able to simply get distracted from the objective of constructing a product that’s helpful and fascinating to customers and as a substitute deal with the trivialities of constructing the right product. Perfection is the enemy of fine, and you will need to outline what’s the desired end result of any undertaking (what is nice), and place safeguards that stop us from spending an excessive amount of time and vitality on simply constructing.
- Outline deadlines: I discover probably the most highly effective safeguard towards perfectionism to be deadlines, as a result of with deadlines probably the most valuable useful resource is time, and it permits switching perspective from “it will be good to have this” to “how can I construct and ship this function and transfer on to subsequent one”.
- Constantly search and combine suggestions: Constructing a service with out understanding what customers truly need has the double detrimental impact of loosing assets (time, vitality), and constructing momentum that leads us additional astray from delivering a product. It is very important search suggestions periodically and combine it into the product growth, whether or not for constructing new options, modifying present ones, or fixing bugs.
- Doing is one of the simplest ways to be taught: Whether or not you need to develop into a greater system designer, architect, developer, or marketer, working by yourself full scale initiatives is one of the simplest ways as a result of you will have the liberty to do your personal analysis for the most effective implementation, and the most effective instruments and applied sciences to make use of. Moreover, the assets you will have at your disposal are finite (time, vitality, price range) and that results in being diligent in how you utilize every.
After 4 weeks from its launch, UpPush.me is now fortunately serving 32 subscribers (and counting!).
The present ecosystem for tech entrepreneurs is booming with options to construct and ship software program — from no-code instruments to low-cost internet hosting options — and I’m thrilled to see how massive the “small enterprise” builder communities are, and what number of fascinating services are being developed 🚀 🎉.