Minimalna wartość pierwszej aplikacji została dowieziona. W dalszej części wpisu zamierzam poruszyć kwestie, na które natknąłem się podczas pisania tej aplikacji. Sporą walkę toczyłem tak naprawdę z samym sobą i chociaż w pełni jej nie wygrałem to i tak jestem z siebie dumny.

Pomiar czasu pracy

Na początek przedstawie statystyki z aplikacji WakaTime, która pozwala sprawdzić ile czasu spędziłem przy konkretnym projekcie i ile czasu pisałem w konkretnym języku. W fajny sposób można śledzić swoją produktywność po czym stwierdzić czy jest na odpowiednim poziomie. U mnie produktywność nie była najgorsza ale zawsze mogło być lepiej 🙂

32 godziny aby dowieźć MVP

Poniższe zdjęcie przedstawia ilość godzin, jaką spędziłem przy projekcie. Zielony na niebieski to była migracja projektu co traktuje jako jeden projekt. Przy obecnej wiedzy (+-2 tygodnie po starcie) jestem zdania, że spędziłem przy projekcie za dużo czasu. Dlaczego tak myślę, opiszę niżej. Na razie zerknijmy na statystyki.

Czas spędzony przy projekcie od 06.03 do 17.03
Średnia ilość czasu dziennie, spędzonego przy projekcie

W czym pisałem?

MVP aplikacji pisałem w React Native używając TypeScripta, stąd te prawie 93% czasu spędzonego przy tym języku. JavaScript, a dokładniej pliki z rozszerzeniem .js były używane na początku, gdy przepinałem JS na TS.

C# miałem zamiar użyć do wystawienia API, który pomógłby z zapisywaniem danych użytkowników na serwerze. Doszedłem do wniosku, że jednak tworząc MVP skorzystam z pamięci telefonu.

Użyte języki programowania przy pisaniu aplikacji

Czas na problemy

Nadszedł czas aby opisać problemy, które napotkałem w trakcie pisania aplikacji. Zaczynając od czysto biznesowych tematów, w których nie mogłem stwierdzić na jakim etapie kończy się MVP a kończąc na kwestiach technicznych. Chciałem jak najbardziej zadbać o użytkownika, więc zamiast tworzyć kluczowe funkcjonalności, zająłem się tworzeniem “wodotrysków”.

Projektowanie aplikacji

Sporo też czasu spędziłem zastanawiając się w jaki sposób powinienem podejść do architektury aplikacji tworząc MVP. Czy powinienem tworzyć architekturę, która na wypadek sukcesu aplikacji pozwoli mi ją w łatwy sposób rozwijać? Czy może powinienem nie zwracać uwagi na jakość kodu a skupić się na dowiezieniu działającej aplikacji?

Zastanawiałem się czy w ogóle powinienem korzystać z API aby umożliwić użytkownikom tworzenie kont, zapisywanie danych i synchronizacje pomiędzy aplikacją mobilną a webową w przyszłości. Jeżeli nie będę korzystał z API to czy powinienem podpinać Redux’a do zarządzania stanem aplikacji? Czy w ogóle będzie czym zarządzać jeżeli aplikacja będzie “zamknięta”?

Nie ukrywam, że nie mam dużego doświadczenia w projektowaniu dużych aplikacji. Nie bardzo też zdaje sobie sprawę do jakich rozmiarów aplikacja może urosnąć, lecz wcale nie musi. Jak już wspomniałem, pozwolę sobie popełnić błędy i postaram się nie zrobić tego najlepiej jak się da.

Gdzie zapisywać dane?

Może nie był to początkowy i największy problem ale zajęło mi chwile oby przekonać samego siebie, że dla potrzeb MVP lepiej będzie skorzystać z pamięci telefonu niż z API.

Argumentami popierającymi utworzenie serwera do przechowywania danych była między innymi synchronizacja danych a także autoryzacja użytkowników. Wtedy sobie pomyślałem czy na samym początku jest to niezbędne aby taka aplikacja mogła działać? Co jeżeli aplikacja nie wypali a ja poświęcę 1/3 czasu na utworzenie i podpięcie API?

Jednak pamięć telefonu

Ostatecznie wybrałem zapisywanie danych w pamięć telefonu, bez możliwości zapisu ich w chmurze a także bez konieczności rejestracji. Była to tak naprawdę połowa sukcesu, gdyż musiałem stwierdzić w jaki sposób będę przechowywał te dane. Do wyboru miałem kilka opcji, lecz ostatecznie zdecydowałem się na SQLite.

SQLite wybrałem na wypadek gdybym w przyszłości musiał zmigrować strukturę danych do bazy w chmurze. Dzięki temu migracja tabel jak i danych nie powinna sprawić większego problemu.

Znów ten perfekcjoznim…

Czy ten kolor tutaj pasuje, czy te kółko nie jest za duże, czy to jest we właściwym miejscu, czy będzie to ładnie wyglądać na każdym urządzeniu, czy będzie to działać bez najmniejszego problemu i czy użytkownika nie będzie odpychać biedny interfejs?

W głównym wpisie wspominałem już o cytacie dotyczącym wypuszczania pierwszej wersji swojej aplikacji. Przypomnę to jeszcze raz dla samego siebie bo nie mogę tego zapamiętać.

Reid Hoffman – współzałożyciel LinkedIn napisał na twitterze: ,,If you’re not embarrassed by the first version of your product, you’ve launched too late’’

Na chwile obecną wstydzę się swojej aplikacji, nie podoba mi się jak wygląda ale najważniejsze jest to, że rozwiązuje problem, który na początku postanowiłem rozwiązać. Mam nadzieje, że w kolejnych aplikacjach będę o tym pamiętał.

Co jeżeli zmarnujemy potencjał?

Zastanawia mnie co w momencie gdy rozwiążemy dany problem aplikacją ale nie dorzucimy funkcjonalności, których nie ma inna aplikacja i mogą okazać się kluczowe w walce z konkurencją?

Po wypuszczeniu MVP, gdy ruch organiczny nie ruszy będzie to oznaczało, że problemu nie było, źle obraliśmy grupę docelową, rozwiązanie było za słabe lub nie wyróżniliśmy się niczym ciekawym rozwiązując dany problem.

W momencie pisania aplikacji zastanawiam się co jeśli MVP nie przejdzie testów i nie będę mógł sprawdzić funkcjonalności, które miałem w zanadrzu. Co jeśli funkcjonalności, które miałbym zamiar wprowadzić byłyby unikatowe na rynku podobnych aplikacji, i które mogłyby okazać się wartościowe?

Moja aplikacja jest słaba, są lepsze aplikacje

Na początku założyłem sobie dowiezienie aplikacji, która nie będzie najpiękniejsza i nie będzie miała najlepszych funkcjonalności. Aplikacja ma rozwiązywać podstawowy problem, a będzie rozwijana z feedbackiem użytkowników z niej korzystających.

Dodam, że na początku robiłem research podobnych aplikacji i miałem na uwadze co zawierają i jak są zbudowane. Miałem też kompletnie nie zwracać na to uwagi, robić swoje i czekać na feedback. W momencie ukończenia 3/4 projektu zacząłem ponownie przeglądać podobne aplikacje myśląc o jakie funkcjonalności mógłbym uzupełnić swoją aplikacje (znów złamałem zasadę MVP).

Poskutkowało to obniżeniem mojej motywacji do ukończenia projektu. Stwierdziłem, że funkcjonalności, które ma konkurencja zajmą mi więcej czasu niż sobie założyłem na skończenie tej aplikacji.

W końcu czas na aplikacje

Aplikacje, którą postanowiłem napisać w pierwszym miesiącu trwania projektu nazwałem Habit Tracker. Sama nazwa nie jest nazwą własną, z polskiego znaczy “narzędzie do śledzenia nawyków”.

Na pomysł wpadłem korzystając z podobnej aplikacji, dużo bardziej rozbudowanej, do której dostęp sporo kosztuje. Nie jest to skomplikowana aplikacja a pod względem funkcjonalności, podobnych aplikacji nie da się znaleźć na rynku. Postanowiłem, że utworzę coś takiego sobie jak i innym ludziom, którym czegoś takiego brakuje.

Na rynku istnieje darmowa aplikacja, która rozwiązuje ten sam problem ale nie jest tak bardzo rozbudowana. Ilość jej pobrań wynosi ponad 1 milion.

Problem

Brak motywacji do śledzenia swoich postanowień. Brak narzędzi, które w fajny sposób wspomagałyby śledzenie stawianych sobie postanowień. W momencie gdy chcemy zmienić coś w swoim życiu, spróbować utworzyć nowy nawyk lub po prostu o czymś pamiętać. W takim przypadku przydałoby się narzędzie, który w łatwy i szybki sposób pozwoliłoby kontrolować śledzenie swoich zmian.

Rozwiązanie

  • Dodawanie postanowienia, które chcemy monitorować.
  • Oznaczanie stopnia wykonania postanowienia każdego dnia.
  • Tworzenie notatek dla każdego postanowienia, na każdy dzień.

Opis działania aplikacji

Aplikacja umożliwia dodawanie postanowień, oznaczanie stopnia wykonania postanowienia każdego dnia. Możemy wybrać 4 stopnie wykonania postanowienia – “Zrobione”, “Zrobione w połowie”, “Nie zrobione”, “Nie dziś”.

Dodatkowo w przypadku gdy nie możemy wykonać postanowienia, powód możemy wpisać w notatce do danego dnia. Pozwoli to w przyszłości stwierdzić dlaczego nie wykonaliśmy w 100% danego postanowienia, co nam przeszkadzało i na co powinniśmy zwrócić uwagę w przyszłości.

Gdzie znajdę aplikację?

Z powodu sytuacji na świecie obawiam się, że będę musiał trochę dłużej poczekać na sprawdzenie aplikacji. Gdy tylko uda mi się ją wrzucić na sklep, zaktualizuje ten post

Android i iOS?

Docelowo aplikacja będzie dostępna w sklepie play (Google Play) i w sklepie Apple (App Store). MVP będzie dostępne tylko na telefony z systemem Android. Wersja na iOS’y pojawi się jak tylko MVP przejdzie walidacje.

Aplikacja jest napisana w technologii React Native, która umożliwia pisanie równolegle na dwa systemy. Głównym problemem jest to, że do zbudowania wersji na iOS’a potrzebuje komputera z systemem MacOS, którego na chwile obecną nie posiadam.

A może jakieś testy?

Jeżeli już teraz jesteś zainteresowany przetestowaniem aplikacji i podesłaniem mi feedback’u to byłbym Ci bardzo wdzięczny! Dostęp do wersji testowej poprzez bezpośrednie pobranie pliku .APK na swój telefon będzie dużo szybszy niż przez Google Play. Pomoże mi także szybciej zareagować na ewentualne błędy. Gdy tylko będę gotów do udostępnienia aplikacji, edytuje ten post wstawiając bezpośredni link do aplikacji.

Co dalej, to nie koniec miesiąca

Z racji tego, że zostało mi jeszcze trochę czasu do końca miesiąca, postaram się poświęcić cały ten czas na promocję aplikacji. Kompletnie nie potrafię tego robić także bardzo jestem ciekaw co z tego wyjdzie.

Pomyślę też nad utworzeniem wersji na systemy iOS aby zwiększyć grupę docelową.

Podsumowanie

Dziękuje Ci, że dotrwałeś do tego momentu. W chwili obecnej MVP jest dowiezione i wszystko zmierza w dobrym kierunku. Zastanawiam się tylko w jaki sposób będę promował aplikacje, której nie da się pobrać ale to już raczej opiszę w podsumowaniu na koniec miesiąca.

Zachęcam również do komentowania, dzielenia się swoimi uwagami. To mi bardzo pomoże uniknąć błędów, zmienić spojrzenie i nauczyć się czegoś nowego. Tak naprawdę o to chodzi w tym projekcie 🙂

Jeszcze raz wielkie dzięki!

Pozdrawiam 🙂