W następnym kroku skupiłem się na współpracy z bazą danych. Do przechowywania danych aplikacji wybrałem zewnętrzny serwis ElephantSQL, gdzie można stworzyć własną bazę PostgreSQL. Komunikacja aplikacji z bazą odbywa się protokołem JDBC przy wykorzystaniu tzw. connection stringa, zawierającego m. in. nazwę bazy, użytkownika i hasło. Aby tych informacji nie umieszczać na stałe w kodzie, użyłem zmiennych systemowych platformy Heroku. Gdy połączenie zadziałało, moim następnym celem stało się opanowanie techniki pełnej obsługi typu CRUD (Create Read Update Delete), a więc podstawowych działań, jakie podczas normalnej pracy aplikacja wykonuje na bazie. Tak więc niezbędne było opanowanie zapisu do bazy odbieranych od użytkownika danych oraz wyświetlanie danych pobieranych z bazy.
Gdy obsługę bazy miałem opanowaną, stworzyłem szkielet aplikacji oparty na MVC (Model View Controller), w którym kontrola działania, pobieranie i zapis danych oraz prezentacja interfejsu użytkownika są od siebie odseparowane. W naturalny sposób zastosowałem tu architekturę serwletów, w której funkcję kontrolera pełnią właśnie serwlety. Tak mi się ona spodobała, że już przy niej pozostałem. Jest ona na tyle przejrzysta i zrozumiała, że pozwala łatwo zrozumieć przepływ sterowania w aplikacji - od początku do końca, od odebrania requesta, poprzez logikę biznesową, jaką zaprojektowaliśmy, aż po sposób przygotowania odpowiedzi i zwrócenie response'a. Odpowiedź z kolei, czyli warstwa interfejsu użytkownika, oparta została na technologii JSP (Java Server Pages) wraz z JSTL (Java Standard Tag Library).