Rozwijasz czy produkujesz oprogramowanie?

Opracowywanie przepisów to proces uczenia się metodą prób i błędów. Nie oczekujesz, że pierwsza próba nowego dania wykonana przez szefa kuchni będzie ostatnią. W rzeczywistości cała idea opracowywania przepisu polega na wypróbowaniu wielu wariacji na dany temat i odkryciu najlepszej wersji. 

Rozwój jest czymś zupełnie innym niż produkcja. Pomyśl o rozwoju jako o tworzeniu przepisu, a o produkcji jako o przestrzeganiu przepisu.

Co ta metafora ma do wytwarzania oprogramowania?

Dwie szkoły myślenia

Istnieją dwie szkoły myślenia o tworzeniu softu. Pierwsza z nich zachęca programistów do upewnienia się, że każdy projekt i każdy segment kodu jest prawie doskonały (bezbłędny, podatny na przyszłe zmiany) za pierwszym razem.

W koncepcji drugiej szkoły lepiej jest mieć małe, szybkie cykle try-it, test-it, fix-it, niż upewniać się, że projekt i kod są doskonałe za pierwszym razem. To bardziej zwinne podejście zakłada, że pętla zwrotna służy, a nie szkodzi.

Natomiast tradycyjne podejście do zarządzania projektami często mówi o tym, że pętle sprzężenia zwrotnego stanowią zagrożenie, ponieważ istnieje obawa, że uczenie się związane ze sprzężeniem zwrotnym może zmodyfikować wcześniej ustalony plan. 

Konwencjonalna mądrość w zarządzaniu projektami ceni sobie dyrygowanie zakresem, kosztami i harmonogramem zgodnie z pierwotnym planem. Nic dziwnego, przecież szczegółowy scenariusz daje (złudne) poczucie kontroli i bezpieczeństwa, przynajmniej na jakiś czas.

To podejście można nazwać modelem deterministycznym, ponieważ zakłada, że detale projektu są ustalone na początku.

Sekwencyjna produkcja

Często konsekwencją deterministycznego modelu (skierowanego na produkowanie zamiast na odkrywanie) jest sekwencyjne wytwarzanie usług. Czyli najpierw stwórzmy moduł (jeszcze gorzej: pełnoprawną mikrousługę) rejestracji i zarządzania użytkownikami, a następnie moduł sprzedaży.

Problem z rozwojem sekwencyjnym polega na tym, że zmusza projektantów czy programistów do przyjęcia podejścia dept-first zamiast breadth-first.

Depth-first wymusza podejmowanie niskopoziomowych, zależnych decyzji przed doświadczeniem konsekwencji decyzji wysokopoziomowych. Konsekwencje natomiast doświadczysz dopiero po implementacji.

Najbardziej kosztowne błędy popełniane są przez to, że zapomina się o rozważeniu czegoś ważnego na początku. Najłatwiejszym sposobem popełnienia takiego błędu jest właśnie zbyt szybkie wwiercanie się w szczegóły. 

Efektywne rozwijanie 

Kiedy doświadczonym projektantom przedstawia się źle zdefiniowane problemy, ich działania projektowe wcale nie są odgórne. Wielokrotnie przechodzą oni pomiędzy badaniem scenariusza, wyjaśnianiem wymagań, segmentacją rozwiązania na wysokim poziomie i projektowaniem trudnych szczegółów implementacyjnych. 

Alternatywą dla modelu deterministycznego – zresztą w zgodzie z metodyką lean i prawidłami matki natury, która wszystko tworzy przez ewolucję, a nie na podstawie z góry określonego planu – jest rozwijanie, czyli odkrywanie nieznanego. Kluczem do efektywnej nauki i rozwoju jest często wiele krótkich cykli uczenia się. 

Jeśli zamiast tego zapytasz: “Jak mogę zminimalizować liczbę cykli uczenia się?”, prawdopodobnie otrzymasz długie cykle, długie pętle sprzężenia zwrotnego, a w rezultacie nie efektywne uczenie się. 

Podsumowanie 

Różnica pomiędzy świadczeniem usługi a wytwarzaniem fizycznych produktów polega na tym, że w usłudze dynamicznie zmieniają się oczekiwania klienta, natomiast w produkcji zmienność jest wrogiem. Produkcja zakłada jednorodny, niezmienny zestaw oczekiwań, stawia na powtarzalność.  

Idąc tym tropem, rozwoju oprogramowania nie należy nazywać produkcją. Tworzenie oprogramowania to ciągły proces uczenia się, eksperymentowania i wzajemnej oceny.

Oczywiście można polegać na szczegółowym planie opracowanym z wyprzedzeniem, jednak sterowanie deterministycznie nie pasuje do środowiska, w którym ciągle zmienia się teren.

Źródła 

  1. Lean Software Development: An Agile Toolkit

Udostępnij ten wpis


Dobrnąłeś do końca. Jeśli ten artykuł był dla Ciebie wartościowy i chcesz otrzymywać informacje o kolejnych, to zapraszam Cię do zapisania się do listy mailingowej. Gwarantuję zero spamu.

Radek.

Inne artykuły

ML w AWS – Sagemaker Autopilot

Automatyczne tworzenie modeli uczenia maszynowego z pełną widocznością w usłudze AWS Sagemaker – korzyści z wygenerowanego Jupyter Notebooka.

ML w AWS – Sagemaker Studio – IDE w przeglądarce

Sagemaker Studio – interaktywne środowisko dla Data Scientist. Z Jupyter Notebooks na pokładzie, oferuje współpracę, śledzenie eksperymentów i integrację z systemem kontroli wersji. Przegląd quasi …

ML w AWS – wstęp do usługi Sagemaker

Sagemaker: Wytwarzanie usług ML w chmurze AWS na nowym poziomie Odkryj potężną usługę Sagemaker, która gromadzi wszystkie niezbędne funkcjonalności związane z wytwarzaniem usług uczenia maszynowego w …

Lean software development – eliminacja strat

Dowiedz się, jak wyeliminować marnotrawstwo i przyjąć zasady szczupłego rozwoju oprogramowania, aby dostarczyć więcej wartości swoim klientom przy mniejszym nakładzie pracy.

CD4ML: Continuous delivery for machine learning

Zacznijmy od początku: czym jest ciągłe dostarczanie (continuous delivery)? To podejście w wytwarzaniu oprogramowania, w którym wdrożenie nowej wersji jest decyzją biznesową. Ale jak to …