Metodyka
Wypracowana przez nas metodyka pozwoliła nam z sukcesem zakończyć dziesiątki projektów — zarówno tych mniejszych (mikroserwisy, nowe funkcje), jak i dużych systemów dla branży telekomunikacyjnej.
Kluczem do sukcesu są dla nas standardy. Precyzyjnie definiujemy każdy etap: analizę, projektowanie, kodowanie i utrzymanie. Dzięki temu, oraz wykorzystaniu gotowych rozwiązań (jak framework Partonic), eliminujemy chaos i zyskujemy pewność co do jakości dostarczonego oprogramowania oraz precyzji w planowaniu harmonogramu i budżetu.
Ciągły rozwój i prototypowanie
Łączymy ciągły rozwój oprogramowania z wczesnym prototypowaniem. Zamiast opierać się wyłącznie na teoretycznej dokumentacji, na każdym etapie projektu weryfikujemy założenia na działających fragmentach funkcjonalności (formularz, zakładka, raport itp).
Prototypy pozwalają na błyskawiczne testowanie pomysłów i zebranie informacji zwrotnej od użytkowników końcowych. Dzięki temu drastycznie skracamy czas wdrożenia i eliminujemy ryzyko błędów projektowych w fazie, gdy ich naprawa jest jeszcze tania i szybka.
Zarządzanie złożonością
Większość aplikacji biznesowych jest oprogramowaniem złożonym, obsługującym wiele elementów procesu biznesowego, dotyczącego wielu zależnych od siebie artefaktów (np. klient, umowa, faktura, usługa, produkt, adres i setki innych).
Zachowanie logicznej spójności oraz jasnych zależności pomiędzy elementami oprogramowania są czynnikami mającymi bezpośredni wpływ na jego łatwe utrzymanie, unikanie błędów oraz łatwy, długoterminowy rozwój. Eliminujemy dług technologiczny i efekt starzenia się produktu, prowadzący do sytuacji, gdy jego dostosowywanie do zmiennych warunków biznesowych zaczyna generować niewspółmiernie wysokie koszty oraz ryzyko.
- Enkapsulacja logiki biznesowej – pojęcie to odnosi się do podziału całości implementowanej logiki biznesowej na niewielkie, spójne i łatwo opisywalne moduły, zawierające różnego rodzaju niezbędne elementy oprogramowania (tabele, operacje, formatki itp.). Moduły takie, jako zespół, mogą implementować wysoką złożoność, zachowując jednak swoją jednostkową prostotę i zrozumiałość.
- Przestrzenie nazw – ten istotny element metodyki organizuje wspomniane wyżej moduły i ich zawartość w drzewiasto zorganizowaną strukturę (moduły → podmoduły) z jasno określonymi zasadami jednoznacznego nazewnictwa wszystkich elementów oprogramowania.
Model danych
Dane to najcenniejszy zasób aplikacji – one opisują rzeczywistość biznesu. Dlatego jakość modelu danych jest dla nas absolutnym priorytetem.
W projektowaniu wykorzystujemy standard UML, rozbudowany o nasze autorskie, szczegółowe metodyki opisu. Pozwala to na stworzenie struktury, która jest nie tylko poprawna technicznie, ale też idealnie spójna z logiką biznesową i architekturą systemu.
Architektura systemu aplikacji
Różnego rodzaju zagadnienia mogą wymagać zastosowania specyficznej architektury aplikacji, jednak w większości typowych wymagań, stosujemy dobrze sprawdzone i efektywne podejście, na które składają się poniższe elementy pojedynczego systemu aplikacji:
- Interfejs użytkownika (front-end) – czyli część wizualna z której bezpośrednio korzysta użytkownik końcowy. Jest to najczęściej aplikacja sieci web dostępna w wszystkich popularnych przeglądarkach z możliwością przygotowania wersji dostępnej w postaci aplikacji mobilnej. System aplikacji może zawierać dowolną ilość interfejsów użytkownika dedykowanych dla poszczególnych ich grup i ról. Dodatkowo dbamy o bezpieczną autentykacje (np. dwuetapową) oraz szczegółowy system autoryzacji dostępu do poszczególnych funkcjonalności aplikacji.
- Warstwa pośrednia (middleware) – warstwa zawierająca serwery odpowiedzialne za udostępnianie aplikacji, dostarczanie danych oraz ich modyfikację na podstawie żądań użytkownika, po uprzedniej weryfikacji jego uprawnień. W tej warstwie opcjonalnie implementowana jest również logika biznesowa, zgodnie z którą przetwarzane są dane. W środowisku produkcyjnym często występuje wiele serwerów aplikacji działających w ramach tzw. klastra, który zapewnia ciągłość działania aplikacji w przypadku awarii jednego z serwerów, zwiększa wydajność środowiska lub pełni obie te funkcje jednocześnie.
- Baza danych – serwer bazy danych stanowi kluczowy element tzw. back-endu, czyli najgłębszej warstwy aplikacji. Przechowuje on wszystkie zgromadzone informacje, zgodnie z zdefiniowanym modelem danych. Dodawanie, udostępnianie i modyfikacja danych, odbywa się poprzez wywoływanie, realizujących logikę biznesową, procedur i funkcji zaimplementowanych w warstwie pośredniej lub bezpośrednio po stronie samej bazy danych. Druga opcja umożliwia zastosowanie zaawansowanych metod optymalizacji oraz zapewnia łatwą kontrolę wydajności systemu.
- Procesy tła – doskonała większość zachodzących w systemie aplikacji procesów, jest inicjowana za pośrednictwem interfejsu użytkownika lub interakcją z innymi systemami. Istnieje jednak grupa zadań, które muszą być wykonywane automatycznie, czyli w określonym interwale czasu a nie na skutek bezpośredniej zewnętrznej aktywności. Przykładem może być konieczność automatycznego anulowania nieopłaconych zamówień po określonym czasie braku aktywności klienta czy generowanie i dystrybucja dziennych raportów. Aktywności takie nazywamy procesami tła, które muszą być jasno zdefiniowane oraz uruchamiane w sposób niezawodny i transparentny, co uzyskujemy poprzez stosowanie odpowiednich narzędzi monitoringu i automatycznych powiadomień.
- Integracja – w rzeczywistych środowiskach biznesowych, konieczność integracji z innymi systemami jest jednym ze standardowych wymagań. Stosowana przez nas metodyka a szczególnie jej część odnosząca się do enkapsulacji logiki biznesowej, sprawia, że ów proces jest naturalny i nieobarczony wysokimi kosztami. Przyczynia się do tego również sama architektura aplikacji, umożliwiająca stosowanie szerokiego spektrum technologii integracyjnych zarówno w warstwie pośredniej jak i po stronie bazy danych.
Wzorce projektowe
Wielokrotna implementacja złożonych wymagań pozwoliła nam zdefiniować bibliotekę sprawdzonych wzorców projektowych. Zamiast każdorazowo rozwiązywać te same problemy, stosujemy predefiniowane standardy implementacji.
Podejście to minimalizuje ryzyko błędów oraz znacząco optymalizuje proces wytwórczy. W rezultacie, tworzenie nowych systemów oraz rozbudowa istniejących odbywa się szybciej i taniej, gwarantując jednocześnie spójność i stabilność kodu.
Testy
Istnieje wiele strategii testowania, ale ich cel jest jeden — niezawodność produktu końcowego. Wbrew rynkowym trendom, nie przesuwamy odpowiedzialności za jakość wyłącznie na fazę testów końcowych. Poleganie tylko na predefiniowanych scenariuszach często prowadzi do błędów, gdy użytkownik wykona akcję nieprzewidzianą w dokumentacji.
W naszej metodyce jakość budujemy u podstaw. Kładziemy ogromny nacisk na czystość kodu i zarządzanie złożonością już na etapie programowania. Łączymy to z ciągłym prototypowaniem (natychmiastowa weryfikacja) oraz zautomatyzowanymi testami jednostkowymi.
Efekt? Dostarczamy produkt o wysokiej stabilności jeszcze zanim trafi on do formalnych testów akceptacyjnych.
Głęboki monitoring
Traktujemy monitoring nie jako zewnętrzną usługę, ale jako integralną część architektury oprogramowania. Stosujemy autorską metodę „Głębokiego Monitoringu”, która pozwala na skuteczną diagnostykę błędów (nawet tych trudnych do reprodukcji) oraz ciągłą optymalizację wydajności.
Nasz framework pozwala na precyzyjne śledzenie wywołań konkretnych funkcji i procedur realizujących logikę biznesową. Dzieje się to w tle, podczas normalnej pracy aplikacji, w sposób całkowicie nieodczuwalny dla użytkowników.
Efekt? Zautomatyzowana analiza danych pozwala nam wykryć anomalie i zareagować na nie, zanim zostaną one zaraportowane jako problem przez użytkowników.
Dokumentacja projektowa
Jednym z istotnych elementów zarządzania procesem developmentu jest czytelna dokumentacja projektowa, która — mimo czasem różnej formy (w zależności od zaangażowanych stron i specyfiki zagadnienia) — powinna zawierać istotną wiedzę, niezbędną do prowadzenia skutecznych działań. Wykorzystujemy standardy rynkowe, m.in. Enterprise Architect oraz Confluence co znacznie ułatwia ustrukturyzowane i scentralizowane zarządzanie dużą ilością różnego typu informacji.
Agile/Scrum
To zwinne podejście do zarządzania projektami, które stawia na elastyczność, szybką adaptację do zmian i bliską współpracę z klientem. Zamiast planować cały projekt z góry, dzielimy pracę na krótkie etapy (sprinty), po których dostarczamy działający fragment produktu.
Bazujemy na metodyce Scrum, która zapewnia regularność i przejrzystość postępów. Nasza praktyka zakłada jednak dużą elastyczność – zawsze jesteśmy otwarci na optymalizację procesu zarządzania, w zależności od skali projektu i preferencji Klienta.