Rakensin MVP:n 30 päivässä – tämän opin
Kirjoittaja loi UpPush.me:n MVP:n vain 30 päivässä ja kertoo, kuinka hän teki sen ja mitä hän oppi.
Muutama viikko sitten minulla oli idea luoda palvelu, joka lähettäisi päivittäin muistutuksia motivoimaan ihmisiä työskentelemään tavoitteidensa eteen. Palvelu lähettäisi aluksi tekstiviestin, jossa on inspiroiva tarjous valittuna ajankohtana, esimerkiksi juuri ennen treeniä.
Markkinoilla on monia motivaatiosovelluksia, jotka tarjoavat samankaltaisen palvelun – näyttävät motivoivia tarjouksia satunnaisina tai ajoitettuina aikoina – mutta en ole löytänyt sellaisia, joissa ei tarvitsisi asentaa sovellusta ja käyttää tekstiviestejä. Joten päätin kokeilla sitä ja rakentaa sellaisen itse, sivuprojektina nykyiselle työlleni.
Motivaatio tälle projektille on kaksiosainen: työskennellä järjestelmäsuunnittelun parissa ja oppia markkinoinnista ja kasvusta.
Lopputulos: https://www.uppush.me/
Stack: Next.js, materiaalin käyttöliittymä, AWS EventBridge Scheduler, AWS SNS, AWS Lambda, DynamoDB, Terraform.
On 4 avainkomponenttia, joiden avulla tämä toimii:
- Lomake käyttäjille rekisteröitymistä varten
- Tietokanta käyttäjien aikataulujen ja muiden metatietojen tallentamiseen.
- Ajastin aktivoimaan tekstiviestin lähettämisen käyttäjän valitsemana aikana.
- SMS-välittäjä: palvelu, joka tarjoaa API:n tekstiviestien lähettämiseen tiettyyn puhelinnumeroon pientä maksua vastaan.
Arkkitehtuurin suunnittelussa huomioimani kriteerit olivat:
Yksinkertaisuus: Pidä suunnittelu mahdollisimman yksinkertaisena ja vältä tarpeettomia monimutkaisia. Tämä helpottaa huoltoa ja minimoi ongelmat.
Alhaiset kustannukset: Valitse ilmaisia tai edullisia vaihtoehtoja, mutta laadusta tinkimättä.
Nopeus: Käytä tuttuja alustoja ja työkaluja vähentääksesi kitkaa ja siirtyäksesi eteenpäin mahdollisimman nopeasti.
Aloitussivu ja ilmoittautumislomake
Aloitussivun tulee pystyä osoittamaan palvelun arvo vierailijoille yksinkertaisesti ja ytimekkäästi. Palveluun tutustuttuaan käyttäjien pitäisi voida päättää rekisteröityvätkö vai eivät.
Käyttöliittymän rakentamiseen käytin Next.js:ää ja Material UI -kirjastoa. Next.js:n avulla voit nopeasti kehittää asiakaspuolen ja taustan sovellusliittymiä, ja mukana tulee monia optimointeja ja erinomaista dokumentaatiota.
Isännöinti tapahtuu Vercelissä, Next.js:n luomassa yrityksessä, joka tarjoaa runsaan ilmaisen tason, jolla on tarpeeksi kiintiötä tämän kokoiselle projektille. Se integroituu myös GitHubin kanssa ja tarjoaa CI/CD:n valmiiksi.
Suunnittelun mukaan sovellus ei ole riippuvainen suurista lukumääristä tai kirjoituksista tietokantaan, eikä se tallenna relaatiodataa. Valitsin AWS DynamoDB:n, koska se sopii täydellisesti: Se on palvelimeton (ei provisiointi- ja ylläpitokustannuksia), sillä on alhaiset ja ennustettavat provisiointikustannukset ja se ei ole SQL.
Erittäin mielenkiintoinen ja hauska osa suunnitella ja toteuttaa.
Ilmoittautuessaan käyttäjät odottavat saavansa tekstiviestin tiettyinä vuorokaudenaikoina ja tiettyinä viikonpäivinä, esimerkiksi joka toinen päivä klo 6.00. Tehtävän ajoittamiseen on monia vaihtoehtoja.
Tehtävien ajoittimelle on monia vaihtoehtoja (esim. Airflow, Selleri), mutta palatakseni suunnitteluvaatimuksiin, yksinkertaisin ja nopein ratkaisu on Amazon EventBridge Scheduler: se on palvelimeton, helppo konfiguroida ja siinä on runsas ilmainen taso.
EventBridge-aikataulu (vastaa cron-tehtävää) luodaan jokaiselle tunnin neljännekselle (minuutti 00, minuutti 15, minuutti 30 ja minuutti 45), jokaiselle vuorokauden tunnille ja jokaiselle viikonpäivälle. Tuloksena on 4 kvadranttia x 24 tuntia x 7 päivää = 672 tuntia.
Jokaiselle käyttäjälle määrätään ajat, jotka vastaavat rekisteröinnin aikana valittuja aikoja (muunnettu UTC:ksi).
On ollut erittäin mielenkiintoista ottaa huomioon käyttäjien aikavyöhykkeet rekisteröinnin yhteydessä. Useimmissa tapauksissa voimme turvallisesti olettaa, että käyttäjän asuinpaikalla (järjestelmäasetuksissa) määritetty aikavyöhyke on käyttäjän asuinpaikka, mutta se ei aina ole tarkka, koska käyttäjät saattavat olla matkoilla tai koska kieliasetusta ei yksinkertaisesti voida käyttää tai lukea selaimesta. Siksi rekisteröintilomakkeessa on pudotusluettelo kaikista yleisesti tunnetuista aikavyöhykkeistä, jotka käyttäjät voivat valita. Lomakkeen oletusarvo on kielialueella luettu (tai arvattu) aikavyöhyke.
Kun aikavyöhyke on valittu, käyttäjän aika muunnetaan paikallisesta aikavyöhykkeestä UTC:ksi käyttämällä IANA-tietokannan UTC offset -luetteloa.
Tekstiviestin ohjelmoitu lähettäminen tiettyyn puhelinnumeroon on AWS SNS -vaihtoehto, joka sopii hyvin suunnitteluvaatimuksiimme. Se on edullinen (tosin ei aina halvin) ja integroituu hyvin muihin AWS-palveluihin.
UpPush.me:ssä jokainen aikataulu laukaisee puhelun Lambda-toimintoon, joka saa tarjouksen ja muotoilee tekstiviestin, joka lähetetään sitten tilaajille SNS:n kautta.
Törmäsin kuitenkin muutamiin tiesulkuihin, jotka vaativat edestakaisin yhteydenottoa AWS-tukitiimin kanssa (jotka olivat erittäin reagoivia ja avuliaita jopa henkilökohtaisella ”aloitustason” tililläni):
- Kasvata oletuskulutuskiintiötä 1 $/kk.
- Poistu tekstiviestien hiekkalaatikosta, jotta voit lähettää viestejä puhelinnumeroihin, joita ei ole rajoitettu ennalta määritettyyn sallittujen kohteiden luetteloon.
- Yritetään saada lähettäjätunnus, joka on vaatimus joissakin maissa, kuten Intiassa, joka edustaa UpPush.me:lle uskomatonta markkinaa suuren väestön vuoksi. En ole vielä saanut lähettäjätunnusta, mutta onneksi lähes kaikissa maissa sitä ei vaadita.
Kun minulla oli MVP, aloin jakaa UpPush.me-sivustoa rakentajafoorumeilla, kuten indiehackers.com, ja subredditeillä, kuten r/smallbusiness ja r/EntrepreneurRideAlong. Tuloksena oli, että sain palautetta muilta rakentajilta ja sain ensimmäiset tilaajani 🎉!
Muut rakentajat pitivät hienona aloitussivun viestin selkeyttä ja ajatusta yksinkertaisella ja selkeällä tavalla.
Toinen yleinen palaute palvelusta oli, että käyttöliittymä (aloitussivu) kaipasi parannusta, ja sain monia suosituksia käyttää kooditonta työkalua aloitussivun rakentamiseen React-kirjaston sijaan. Vaikka visuaalisesti houkutteleva käyttöliittymä on tärkeää, se ei ole UpPush.me:n kriittisin osa. Siksi tässä vaiheessa pidän parempana säilyttää ja parantaa nykyistä käyttöliittymää ja keskittyä palvelun rakentamiseen sen sijaan, että investoisin uudelleenrakentamiseen koodittomalla työkalulla.
Käyttäjät kommentoivat myös haluavansa lisätä ominaisuuksia, kuten viestien tai kirjoittajan kautta lähetettyjen lainausten ja luokittelutarjousten lähettäminen.
Täydellisyys on hyvän vihollinen
Insinööreinä ja kehittäjinä voimme helposti saada huomion pois tavoitteesta rakentaa käyttäjille hyödyllinen ja toivottava tuote ja keskittyä täydellisen tuotteen rakentamisen yksityiskohtiin. Täydellisyys on hyvän vihollinen, ja on tärkeää määritellä minkä tahansa projektin toivottu lopputulos (mikä on hyvä) ja luoda suojatoimenpiteet, jotka estävät meitä käyttämästä liikaa aikaa ja energiaa pelkkään rakentamiseen.
Määritä määräajat
Mielestäni tehokkain suoja perfektionismia vastaan ovat määräajat, koska niiden kanssa arvokkain resurssi on aika ja niiden avulla voit muuttaa näkökulmaa ”Olisi kiva saada tämä” to ”Kuinka voin rakentaa ja lähettää tämän toiminnon ja siirtyä seuraavaan.”
Hae ja integroi palautetta jatkuvasti
Palvelun rakentamisella tietämättä, mitä käyttäjät todella haluavat, on kaksinkertainen negatiivinen vaikutus: tuhlaa resursseja (aikaa, energiaa) ja luo vauhtia, joka vie meidät pois tuotteen toimittamisesta. On tärkeää hakea säännöllisesti palautetta ja integroida se tuotekehitykseen, olipa kyseessä uusien ominaisuuksien luominen, nykyisten muokkaaminen tai virheiden korjaaminen.
Tekeminen on paras tapa oppia
Jos haluat kehittyä paremmaksi järjestelmäsuunnittelijaksi, arkkitehdiksi, kehittäjäksi tai markkinoijaksi, omien suurten projektien parissa työskenteleminen on paras tapa, koska sinulla on vapaus tehdä omaa tutkimusta parhaan toteutuksen ja parhaiden työkalujen ja tekniikoiden saavuttamiseksi. Lisäksi käytössäsi olevat resurssit ovat rajalliset (aika, energia, budjetti) ja tämä saa sinut käyttämään niitä ahkerasti.
Neljän viikon kuluttua julkaisusta UpPush.me palvelee jo onnellisesti 32 tilaajaa (ja määrä kasvaa!)
Tämän päivän teknologiayrittäjien ekosysteemi kukoistaa ratkaisuilla ohjelmistojen rakentamiseen ja toimittamiseen – koodittomista työkaluista edullisiin isännöintiratkaisuihin – ja olen innoissani nähdessäni kuinka suuria ”pienyritysten” rakentajayhteisöt ovat ja kuinka monia mielenkiintoisia tuotteita ja palveluita kehitetään
