Programowanie i WWW

Problemy z wydajnością to nie żart, nie?

Trudno dyskutować z tym, jak istotna jest kwestia wydajności w programowaniu. To często poruszany temat, mający wpływ na podejmowanie decyzji przy rozwoju oprogramowania oraz…

Trudno dyskutować z tym, jak istotna jest kwestia wydajności w programowaniu. To często poruszany temat, mający wpływ na podejmowanie decyzji przy rozwoju oprogramowania oraz samym pisaniu kodu. Jest z tym jednak jeden problem – myślenie o wydajności obniża wydajność.

Kontekst

Zanim zaczniemy chciałbym tylko zwrócić uwagę na fakt, że to co za chwilę napiszę opiera się o doświadczenie oparte o budowanie aplikacji webowych w branży startupowej. Miej to proszę na uwadze, ponieważ nie wszystkie zasady obowiązują wszędzie i mam tego świadomość.

Gdy problem wydajności to nie problem

Praktycznie nie mam wątpliwości że z tematem wydajności spotkałeś się już niejednokrotnie. Jestem też prawie pewien że tylko w pojedynczych przypadkach były to spotkania z realnym problemem, który JUŻ ISTNIAŁ. *Znacznie częściej wydajność wydaje się być problemem zanim .. rzeczywiście jest problemem. *

Mam na myśli to, że wielu programistów zastanawia się nad wykorzystaniem jednej lub drugiej technologii i poświęca mnóstwo czasu na analizę różnych benchmarków. Tak jakby kwestią życia i śmierci była oszczędność czasu na poziomie nanosekund przy obsłudze żądań.

I wiesz co? Czasem jest. Ale odpowiedz sobie na pytanie czy w Twoim przypadku również. Ja sam przez 10 lat pracy nie spotkałem się z taką sytuacją. Przy czym do oceny warto tutaj odsunąć swoje ego, które często sugeruje nam zupełnie coś innego.

Podobnie wygląda to przy znacznie mniejszych decyzjach, podejmowanych w codziennej pracy. Czy lepiej wykorzystać pętlę for czy metodę map? Czy warto sięgać po redisa już teraz, czy lepiej poczekać?

I wiesz co? Takie pytania zwykle tylko obniżają wydajność. Twoją. Stajesz się mniej skutecznym programistą, ponieważ odrywasz się od rzeczywistych problemów które są przed Tobą, tworząc takie których jeszcze nie masz.

Nie zgadzasz się? OK! Wróć proszę do tego myślami za kilka godzin i w oderwaniu od emocji zastanów się raz jeszcze. Tak jak podkreśliłem na początku – takie pytania mają mnóstwo sensu ale sytuacji w których tak faktycznie jest, jest wyjątkowo mało, szczególnie jeżeli pracujesz jako web developer.

*Podsumowując: *

  • zwykle wydajność nie jest Twoim problemem
  • gdy wydajność JEST Twoim problemem z pewnością będziesz o tym wiedział
  • gdy staje się Twoim problemem masz szereg opcji aby go zaadresować
  • myślenie o wydajności obniża Twoją wydajność

Wydajność to nie problem ale…

Nie myśl sobie, że jestem ignorantem. Podchodzę do rozwiązywania problemów z uwzględnieniem tego, co jest rzeczywiste a nie tego co wydaje mi się że jest. Z tego powodu to, co napisałem wyżej to nie wymówka do tego aby kwestię wydajnego kodu całkowicie pomijać.

Posiadanie świadomości o dobrych praktykach oraz o działaniach które mogą mieć krytyczny wpływ na obniżenie szybkości Twojej aplikacji jest kluczowe. Mowa tutaj o rzeczach prostych, takich jak optymalizacja wyświetlanych obrazków, przez optymalizację rozmiaru bundle'a aplikacji po kwestię wykorzystania indeksów w relacyjnych bazach danych i tworzenia efektywnych zapytań SQL.

Natomiast takie aktywności należy podejmować bez zastanawiania się czy mają sens, *czy warto i czy mają zastosowanie w naszym przypadku. Bo mają. *

Może warto tutaj tylko wykluczyć sytuacje związane z optymalizacją zapytania SQL, które wykonywane jest rzadko a na jego optymalizacji zaoszczędzimy kolejne bezcenne nanosekundy. No .. sam widzisz jak to wygląda.

Podsumowując:

  • poszerzaj swoją wiedzę na temat dobrych praktyk
  • dowiedz się o krytycznych czynnikach wpływających na wydajność
  • cały czas zachowuj dystans i szybko podejmuj decyzję czy optymalizacja ma sens
  • nie pozwól by myślenie o wydajności obniżało Twoją wydajność

Perspektywa biznesowa

Podczas rozwoju aplikacji pamiętaj o szerokim kontekście biznesowym bo to pomoże Ci szybciej i dokładniej oceniać to, co jest istotne a co nie jest.

Przykładowo rozwój aplikacji działającej na rynku konsumenckim (tzw. B2C – Business to Customer) charakteryzuje się większym ruchem i aktywnością użytkowników niż w przypadku rynku biznesowego (tzw. B2B – Business to Business).

Np. aplikacja dla B2C może wymagać optymalizacji czasu wczytywania w celu zwiększenia konwersji (% wykonanych akcji docelowych). Tam utrata nawet jednej sekundy może wiązać się z realnym obniżeniem przychodów firmy. Ale znowu warto uwzględnić tutaj skalę działania biznesu. Wielokrotnie widziałem projekty, które realizowały wybitny wynik finansowy a optymalizacji szybkości wczytywania strony nikt nie słyszał.

W innych przypadkach kwestia optymalizacji strony ma wpływ na biznes w perspektywie długoterminowej. Obecnie Google zaprezentował wskaźniki Core Web Vitals i uwzględnia je w kontekście pozycjonowania naszej strony w wyszukiwarce. Zatem wyobraź sobie teraz biznes który opiera swoje funkcjonowanie o ruch organiczny i zaniedba kwestię wydajności, które negatywnie wpłyną na pozycje.

Jednocześnie wyobraź sobie sytuację w której jako programista wskazujesz istotę optymalizacji w kontekście SEO i sugerujesz tę zmianę do biznesu. Trudno mi sobie wyobrazić sytuację w której taka inicjatywa nie zostanie doceniona.

No i przechodząc dalej mamy aplikacje działające na rynku B2B. Może to być chociażby platforma wykorzystywana przez pracowników biurowych do obsługi wewnętrznych procesów. W takiej sytuacji konieczność obsłużenia dużej skali użytkowników ma zupełnie inny wymiar. Chodzi o to że tam pojęcie "dużej skali" jest odpowiednio mniejsze w porównaniu do "dużej skali" na rynku B2B. W przypadku takich aplikacji ciężar Twojej uwagi powinien spoczywać gdzieś indziej, np. w obszarze odpowiedniego zabezpieczenia danych.

Podsumowując:

  • patrz przez wydajność przez pryzmat biznesowy
  • perspektywa biznesowa pomoże Ci ocenić sytuację w której jesteś
  • pamiętaj że rozwijasz aplikację działającą w szerokim kontekście a nie oderwaniu od rzeczywistości

To jak jest w końcu z tą wydajnością?

Można powiedzieć że "wydajność nie jest Twoim problemem dopóki nie staje się Twoim problemem". Natomiast jest to zbyt duże uproszczenie, ponieważ nie może być to wymówka do ignorowania optymalizacji. Jednocześnie w pojedynczych przypadkach lub określonych kontekstach, wydajność po prostu jest krytyczna.

Ten wpis powstał przede wszystkim po to aby podkreślić to, jak ważny jest BALANS. To dzięki niemu jesteśmy w stanie efektywnie pracować i jednocześnie mieć na uwadze ewentualne problemy wydajności naszego kodu czy całej aplikacji. Często jednak widzę problem zarówno u początkujących jak i doświadczonych programistów, którzy zwyczajnie poświęcają więcej energii i uwagi na rozważanie sytuacji które nigdy nie będą mieć miejsca lub szansa ich wystąpienia jest minimalna.

Klasycznym przykładem jest zastanawianie się nad tym jak obsłużymy ogromny ruch użytkowników w naszej nowej aplikacji, podczas gdy ta jeszcze nie istnieje. Tutaj mam złą i dobrą wiadomość. Zła jest taka że tylko pojedyncze biznesy dochodzą do takiego problemu (i Tobie również tego życzę) a dobra taka, że gdy już będziesz mieć taki problem, z dużym prawdopodobieństwem będziesz też mieć narzędzia i zasoby do tego aby go zaadresować.

Mam nadzieję, że ten wpis pomógł Ci zauważyć pewną pułapkę w którą bardzo łatwo wpaść. Ja również nadal przyłapuję się na tym, że próbuję rozwiązać problemy których jeszcze nie mam. Przewidywanie i przygotowanie jest okey, tak długo jak nie powstrzymuje nas przed działaniem.

Lista linków z Newslettera:

Rysowanie na iPadzie to magia!



ProCrate to wybitna aplikacja do tworzenia ilustracji na iPadzie (jedna z najlepszych z jakich korzystałem). Pomimo faktu, że rysowaniem zajmuję się amatorsko, dla mnie ProCreate to wystarczający powód aby kupić iPada. Możliwość rysowania wszędzie w tak komfortowych warunkach jest po prostu bezcenna.

Narzędzia … umysłu – czyli szeroki rozwój umiejętności



Mindtools to genialne źródło wiedzy na którym przez lata spędzałem mnóstwo czasu i nadal zdarza mi się tam zaglądać. Znajdziecie tam wiele jakościowych artykułów np. z obszaru rozwiązywania problemów, który jest bardzo istotny w pracy programisty. Bardzo polecam!

Dostarczaj szybko i często .. to dużo zmienia



To artykuł o tym, jaką rolę odgrywa dostarczanie produktu w szybkich iteracjach, które pozwalają zbierać feedback z rynku i lepiej dopasować nasze rozwiązania do realnych problemów naszych klientów. Btw. polecam też pozostałe wpisy autora.

Optymalizacja front-endu w 2021



Optymalizacja front-endu w tym roku zyskuje na znaczeniu bardziej niż kiedykolwiek. Powodem są wskaźniki Web Vitals oraz fakt, że Google będzie brało pod uwagę Core Web Vitals przy zwracaniu wyników a to z kolei ma ogromne przełożenie na wiele biznesów działających w Interencie.

UDOSTĘPNIJ ARTYKUŁ:

Powiązane artykuły

Programowanie i WWW

Tailwind to rewolucja, jeśli…

Tailwind CSS na przełomie ostatniego roku zdobywa coraz większą popularność. W dużym stopniu jest to w pełni zasłużone. Projektowanie interfejsów z jego pomocą jest wygodne. W dodatku…

Programowanie i WWW

Proces rekrutacji w IT z różnych perspektyw

Podczas ostatnich konsultacji Full-Stack Dev Q&A padło kilka pytań o proces rekrutacyjny. Ze względu na pozytywny feedback oraz zwrócenie uwagi na istotę tego tematu, pomyślałem że zbiorę…

Programowanie i WWW

„Coś poszło nie tak”, czyli obsługa błędów na kolanie

Błędy się zdarzają. Każdemu. I podczas gdy te dotyczące logiki biznesowej lub stabilności aplikacji możemy eliminować, tak tych związanych z interakcją użytkownika nie powinniśmy ignorować. Z jakiegoś…

Pozostań na bieżąco!

Już nigdy nie przegapisz ważnych informacji, promocji oraz nowych kursów. Zapisz się na newsletter już teraz!

Zapisując się do newslettera akceptujesz naszą politykę prywatności