Close

Ujemna prędkość: jak podnieść granicę złożoności


Jednym z najczęstszych celów organizacji inżynieryjnych jest szybkie dostarczanie wysokiej jakości oprogramowania.

Przyjrzyj się wizji dyrektora ds. informatycznych i dyrektora ds. technicznych w swojej firmie i posłuchaj, co mówią te osoby. Prawdopodobnie dążą do osiągnięcia jakiejś permutacji tego celu. Choć jest to często stawiany cel, spektrum jego realizacji jest szerokie — od zespołów, które osiągają znakomite rezultaty, po zespoły które utknęły w odmętach dostarczania oprogramowania. Niektóre zespoły konsekwentnie wprowadzają do produkcji nowy kod, napotykając nieliczne incydenty i wywierając niewielki negatywny wpływ na klientów, podczas gdy inne mają problemy z wydaniami kwartalnymi.

Co powoduje tę rozbieżność w wydajności?


W przypadku dostarczania oprogramowania złożoność to różnica między szybkim dostarczaniem wysokiej jakości oprogramowania a… brakiem dostarczania. Jest to różnica między biciem co tydzień w dzwon zwycięstwa po udanym wydaniu a frustracją niezaangażowanego zespołu, który po miesiącach pracy nad najnowszą wersją uzyskuje efekt w postaci sześciu nowych błędów i przywracania.

Porównajmy prędkość i jakość dostarczania nowych produktów i funkcji przez startupy z tymi samymi parametrami w dużej organizacji o ugruntowanej pozycji. Przykładowo w ciągu ostatniej dekady w branży finansowej startupy fintech spowodowały zmniejszenie udziału rynkowego dużych banków o ugruntowanej pozycji. Duże banki często powołują się na nieuczciwą przewagę startupów fintech, które funkcjonują pod mniejszym nadzorem regulacyjnym i nie muszą utrzymywać starszych, monolitycznych zestawów aplikacji. Mniejsze zespoły oznaczają większą zwinność i możliwość dostosowywania się w zależności od potrzeb klienta. Zasadniczo fintechy nie są tak złożone jak uznane banki, co pozwala im działać szybciej przy mniejszym ryzyku. Chociaż złożoność może spowalniać zespoły programistyczne, nie zawsze jest zła.

The benefits of SOA

SOA's modularity and standardized protocols enable services to communicate effectively, promoting reusability, interoperability, and scalability. These key benefits translate into tangible advantages for companies:

  • Reusability: Reusing existing services reduces development time and costs and promotes consistency and quality. Companies can accelerate development cycles and improve overall efficiency.
  • Interoperability: Services can communicate and exchange data regardless of their underlying technology or programming language. This facilitates enterprise-wide data integration and collaboration. Interoperability streamlines business processes and helps companies adapt to evolving technologies.
  • Scalability: SOA's modular design enables independent scaling of services to meet fluctuating demands. It ensures applications can handle spikes in traffic or expanding user bases without compromising performance or stability. Companies can adapt their infrastructure to changing needs without costly rewrites or redesigns.

Globalna sieć
materiały pokrewne

Ograniczenie nadmiernej rozbudowy oprogramowania

ikona trzech pierścieni
POZNAJ ROZWIĄZANIE

Zarządzanie komponentami za pomocą rozwiązania Compass

Złożoność dostarczania oprogramowania


Złożoność może być dobra: rozwiązywanie zawiłych problemów jest niezwykle satysfakcjonujące. Motywuje zespoły, aby sprostać wyzwaniom, rozwiązywać trudne problemy i dokonywać przełomów. I odwrotnie — od pewnego momentu złożoność nie polega już na rozwiązywaniu trudnych problemów i wywiera negatywny wpływ na zespoły programistyczne.

Złożoność organizacyjna odgrywa zasadniczą rolę w ograniczaniu efektywności zespołów programistycznych. Słownikowo złożoność jest definiowana jako stan posiadania wielu różnych części połączonych lub powiązanych ze sobą w skomplikowany sposób. W praktyce złożoność organizacyjna to agregat informacji, zależności, zmian, innych zespołów, narzędzi i wniosków, po których zespoły oprogramowania muszą poruszać się podczas wchodzenia w interakcje z pozostałą częścią organizacji.

Wyższy poziom złożoności organizacyjnej naturalnie utrudnia szybkie dostarczanie wysokiej jakości oprogramowania, ponieważ zespoły spędzają więcej czasu na poruszaniu się po organizacji niż na rozwiązywaniu zawiłych problemów. Rosnące organizacje szybko przekonują się, że zespoły programistyczne osiągają granicę złożoności — stopień złożoności, którego przekroczenie negatywnie wpływa na działanie zespołu, zadowolenie z pracy oraz na jakość oprogramowania i prędkość jego dostarczania. Może się zatem wydawać logiczne, że zmniejszenie złożoności organizacyjnej pozwala zespołom skupić się na rozwiązywaniu zawiłych problemów, dostarczaniu oprogramowania szybciej i w wyższej jakości. Zastanówmy się, dlaczego niekoniecznie tak jest.

Benefits of microservices

Korzyści związane z architekturą mikrousług spowodowały, że w organizacji zaczęto szerzej wdrażać to podejście, co naturalnie zwiększyło złożoność organizacyjną. Bardziej autonomiczne zespoły wymagały większej współpracy, a więcej mikrousług oznaczało więcej zależności. Tempo zmian gwałtownie wzrosło i pojawiły się wszystkie oznaki niekontrolowanego rozwoju oprogramowania. Zwiększona złożoność spowodowała ograniczenie efektywności zespołów programistycznych, na co wskazywał spadek prędkość zmian, a jednocześnie problemem stało się obciążenie poznawcze.

Jak sprawdzić, czy granica złożoności jest blisko


Osiągnięcie granicy złożoności wydaje się nieuniknione, ale istnieją oznaki pozwalające stwierdzić, że zespół zbliża się do niej. Najpierw jednak muszę zaznaczyć, że nie ma bezwzględnego wskaźnika, który pokazuje, ile dzieli Cię od granicy złożoności, jednak opisane poniżej oznaki mogą pomóc Ci w ustaleniu, ile zostało Ci do tej.

Najbardziej oczywistą oznaką, że zespół osiągnął granicę złożoności, jest to, że spędza więcej czasu na poruszaniu się po złożoności organizacyjnej niż na rozwiązywaniu zawiłych problemów, na których powinien się skupić. Przyjrzenie się tendencjom czasu wdrażania zmian (prędkość) i wskaźników błędnych zmian (jakość) wg DORA pozwala zorientować się, czy zespoły zwalniają, czy przyspieszają. Chociaż na te wskaźniki wpływają też inne elementy, są dobrą oznaką efektywności zespołu.

Zadowolenie programistów jest kolejną oznaką tego, po jak dużej złożoności organizacyjnej muszą poruszać się zespoły programistyczne. W porównaniu z innymi rolami w firmie programiści bardziej lubią spędzać czas na rozwiązywaniu zawiłych problemów, a jednocześnie czują większą niechęć do wykonywania niepotrzebnych zadań, które w tym przeszkadzają. Niski poziom zadowolenia programistów jest dobrą oznaką, że złożoność organizacyjna jest problemem w zespole programistycznym.

Feature

SOA

Microservices

Architectural style

  • Coarse-grained, centralized

Service granularity

  • Larger, more comprehensive services

  • Smaller, focused services

Independence

  • Services are interdependent
  • May share a database for data storage

  • Services are highly independent
  • Decoupled and autonomous

Communication

  • Synchronous, often message-oriented
  • Uses shared data

  • Asynchronous, often RESTful
  • Avoids data sharing

Data storage

  • Centralized data management
  • Services share database

  • Distributed (decentralized) data management
  • Each service is responsible for its own data management

Scalability

  • Horizontal scaling
  • Scaling specific services can be intricate due to shared resources and centralized communication

  • Horizontal and vertical scaling
  • More granular and focused scaling as services operate independently

Deployment

  • Typically involves deploying the entire application as a single unit

Coupling

  • Services exhibit a degree of coupling due to shared resources and centralized communication

  • Loose coupling with minimal dependencies between services

Jak sprawdzić, czy granica złożoności jest blisko


Osiągnięcie granicy złożoności wydaje się nieuniknione, ale istnieją oznaki pozwalające stwierdzić, że zespół zbliża się do niej. Najpierw jednak muszę zaznaczyć, że nie ma bezwzględnego wskaźnika, który pokazuje, ile dzieli Cię od granicy złożoności, jednak opisane poniżej oznaki mogą pomóc Ci w ustaleniu, ile zostało Ci do tej.

Najbardziej oczywistą oznaką, że zespół osiągnął granicę złożoności, jest to, że spędza więcej czasu na poruszaniu się po złożoności organizacyjnej niż na rozwiązywaniu zawiłych problemów, na których powinien się skupić. Przyjrzenie się tendencjom czasu wdrażania zmian (prędkość) i wskaźników błędnych zmian (jakość) wg DORA pozwala zorientować się, czy zespoły zwalniają, czy przyspieszają. Chociaż na te wskaźniki wpływają też inne elementy, są dobrą oznaką efektywności zespołu.

Zadowolenie programistów jest kolejną oznaką tego, po jak dużej złożoności organizacyjnej muszą poruszać się zespoły programistyczne. W porównaniu z innymi rolami w firmie programiści bardziej lubią spędzać czas na rozwiązywaniu zawiłych problemów, a jednocześnie czują większą niechęć do wykonywania niepotrzebnych zadań, które w tym przeszkadzają. Niski poziom zadowolenia programistów jest dobrą oznaką, że złożoność organizacyjna jest problemem w zespole programistycznym.

Upraszczanie to strategia przegrywania


Kiedy firmy zdają sobie sprawę, że ich zespoły toną w złożoności, często uruchamiają „projekt upraszczania” mający na celu przywrócenie prostoty w organizacji. Upraszczanie jest strategią przegrywania z dwóch powodów: złożoność rośnie szybciej w porównaniu z tempem upraszczania środowiska przez dowolną organizację, a „projekty upraszczania” funkcjonują w złożonym środowisku, które zgodnie z założeniem mają uprościć.

Częstym punktem wyjścia do upraszczania jest zmniejszenie liczby aplikacji poprzez wycofanie lub konsolidację tam, gdzie to możliwe. Wycofanie aplikacji wymaga od zespołu zrozumienia wszystkich zależności w procesach poprzedzających i następczych, określenia, kto korzysta z aplikacji, jak zastąpić funkcjonalność, gdzie i w jaki sposób zostanie przeprowadzona archiwizacja i migracja danych, a także radzenia sobie z wieloma innymi komplikacjami, które pojawiają się przy tego rodzaju pracy. Niestety znaczące nakłady wysiłku zainwestowanego w ten proces nie są nagradzane równie znaczącym zmniejszeniem złożoności. Istnieje granica liczby aplikacji, które firma może wycofać bez wpływu na podstawową działalność lub środowisko użytkownika, ale nie ma ograniczeń co do liczby nowych komponentów oprogramowania, które inżynierowie mogą stworzyć. W ciągu 12 miesięcy potrzebnych do wycofania jednej aplikacji prawdopodobnie powstały setki nowych mikrousług. Ponieważ prawidłowe środowisko technologiczne rozwija się z czasem, utrzymywanie w środowisku stałej liczby aplikacji lub komponentów oprogramowania w celu zmniejszenia złożoności jest niewykonalne.

Projekty upraszczania zazwyczaj obejmują przekształcenie struktury organizacyjnej w celu usunięcia złożoności przepływu komunikacji. Najmniej skomplikowane struktury organizacyjne obejmują duże zespoły hierarchiczne pracujące w jednym miejscu. Najbardziej skomplikowane struktury organizacyjne obejmują małe, rozproszone i autonomiczne zespoły. Prawo Conwaya pokazuje, że duże zespoły hierarchiczne prawdopodobnie będą tworzyć monolityczne aplikacje, natomiast małe zespoły rozproszone prawdopodobnie będą tworzyć aplikacje wykorzystujące architektury modułowe takie jak mikrousługi. Szybkie wytwarzanie wysokiej jakości oprogramowania jest możliwe dzięki modułowym wzorcom architektury, takim jak architektura mikrousług, co oznacza, że bardziej złożona struktura organizacyjna może prowadzić do sukcesu. Chociaż „uproszczenie” struktury organizacyjnej ułatwia jej zrozumienie, uzyskany efekt projektu uproszczenia jest przeciwny do zamierzonego.

Upraszczanie jest ważne i opłacalne, ale najlepiej sprawdza się jako integralna część ciągłego doskonalenia zespołów programistycznych (i współpracujących ze sobą zespołów), a nie jednorazowe działanie. Upraszczanie może opóźnić osiągnięcie granicy złożoności, ale nie przywróci w organizacji szybkości i swobody charakterystycznych dla startupów.

Podniesienie granicy złożoności


What are the challenges of adopting SOA and microservices?

Aby przywrócić efektywność zespołu programistycznego, organizacje muszą podnieść granicę złożoności. Podniesienie granicy złożoności zasadniczo oznacza zwiększenie złożoności organizacyjnej do poziomu, którego przekroczenie negatywnie wpływa na działanie zespołu, zadowolenie z pracy oraz na jakość oprogramowania i szybkość jego dostarczania.

Inżynieria platform jest ważną koncepcją w dążeniu do podniesienia granicy złożoności organizacyjnej. Silne zespoły inżynierów platform koncentrują się na zmniejszaniu obciążenia poznawczego zespołów programistycznych poprzez oddzielenie złożoności organizacyjnej od ich codziennej pracy. Prawidłowo wdrożona inżynieria platform umożliwia zespołom zrównoważenie wielu wysiłków związanych z rozwiązywaniem zawiłych problemów dzięki mniejszej ilości czasu poświęcanego na poruszanie się po złożoności organizacyjnej.

Can SOA and microservices coexist?

Właśnie po to w Atlassian powstała platforma środowiska programistycznego Compass. Compass pomaga w podniesieniu granicy złożoności, ułatwiając zespołom programistycznym poruszanie się po złożoności organizacyjnej poprzez katalog komponentów, wskaźniki i karty wyników oraz skupienie się na tworzeniu zdrowej kultury inżynieryjnej. W tym miejscu należy wyjaśnić, że w Atlassian złożoność organizacyjna nie zmniejszyła się, a wręcz nadal rosła, gdy organizacja stopniowo przenosiła się do architektury mikrousług. Ograniczyliśmy czas spędzany przez zespoły programistyczne na poruszaniu się po tej złożoności, bo na tym właśnie polega różnica między projektem upraszczania a podniesieniem granicy złożoności.

Atlassian zatrudnia ponad 10 000 pracowników i dysponuje ponad 17 000 komponentami oprogramowania, ale nasze zespoły programistyczne działają w dużej mierze ze swobodą startupów, szybko dostarczając wysokiej jakości oprogramowanie. Nasz klucz do sukcesu? Podniesienie granicy złożoności w celu poprawy efektywności zespołów programistycznych.

Podnoszenie granicy złożoności można rozpocząć od dwóch punktów:

  • Śledzenie i ocenianie wskaźników DORA. Co wskaźniki DORA mówią o Twoim zespole? Jeśli jeszcze nie śledzisz wskaźników DORA, znajdziesz je w gotowej postaci w narzędziu Compass.
  • Zrozumienie i ocenianie zadowolenia programistów. Jak się czują programiści w Twoich zespołach? Większość organizacji przeprowadza badania zadowolenia pracowników. Zapytaj o wyniki z podziałem na obszary funkcjonalne, aby uzyskać wgląd w zadowolenie programistów. Kluczowe pytania obejmują ocenę następujących stwierdzeń:
    • W momencie dostarczania odczuwam dumę
    • Ilość stresu w mojej pracy jest akceptowalna
    • Rozumiem, w jaki sposób moja praca przyczynia się do realizacji celów firmy

Innym sposób polega na uzyskaniu tych informacji za pośrednictwem portalu Compass podczas rytuału CheckOps, w ramach którego zespoły dzielą się swoimi opiniami z ostatniego tygodnia i wskazują, co mogło pójść lepiej.

Podniesienie granicy złożoności wymaga połączenia narzędzi, procesów i rytuałów. Platforma środowiska programistycznego, taka jak Compass, może pomóc w zrozumieniu kondycji systemu, mapowaniu zależności i tworzeniu rytuałów, pomagając podnieść granicę złożoności i uwolnić potencjał zespołów dostarczających oprogramowanie w Twojej organizacji.

Wypróbuj Compass bezpłatnie już dziś.

How does each architecture impact deployment and DevOps practices?

Both SOA and microservices deployments benefit from Open DevOps practices. However, the specifics will differ depending on the architecture. 

SOA typically involves monolithic deployments, where teams deploy an entire application as a single unit. This approach requires careful coordination between teams. It can be time-consuming and complex, especially for large applications.

DevOps emphasizes collaboration and automation between development and operations teams to address these challenges. This enables more frequent and reliable deployments. By automating testing, configuration management, and infrastructure provisioning, DevOps can help streamline SOA deployments and minimize errors.

Microservices architecture enables more granular deployments. Teams deploy each microservice independently. 

DevOps principles are also essential for microservices deployments. DevOps practices such as continuous integration and continuous delivery allow teams to automate the process of testing, deploying, and building microservices. This facilitates rapid and frequent releases.


Udostępnij ten artykuł

Zalecane lektury

Dodaj te zasoby do zakładek, aby dowiedzieć się więcej na temat rodzajów zespołów DevOps lub otrzymywać aktualności na temat metodyki DevOps w Atlassian.

Ilustracja DevOps

Społeczność rozwiązania Compass

ilustracja przedstawiająca pokonywanie przeszkód

Samouczek: Tworzenie komponentu

Ilustracja przedstawiająca mapę

Zacznij korzystać z Compass za darmo

Zapisz się do newslettera DevOps

Thank you for signing up