Czy perfekcjonizm to zaleta?

Jako programista często „na siłę” szukam błędów, które mogą wystąpić w skrypcie. Ot tak, zakładam sobie: a co by było gdyby i tutaj wymieniam kilka mało prawdopodobnych zdarzeń, które razem mogą spowodować jakiś straszny błąd. Jeden z moich zleceniodawców zwrócił mi uwagę, że zbyt się czepiam szczegółów. Z kolei inny zleceniodawca jest zadowolony, że tak dokładnie studiuję zagadnienie nad którym pracuję. Czekam na wasze opinie czy warto być zbytnim perfekcjonistą. Z jednej strony to dobrze, że dbam o wszelkie szczegóły i próbuję przewidzieć wszelkie możliwe problemy, które mogą nastąpić w przyszłości. Z drugiej strony może się wydawać, że na rozmyślania marnuję zbyt wiele czasu (często po dłuższym zastanowieniu okazuje się, że dany splot kilku wydarzeń i tak nie ma prawa wystąpić), który mógłbym poświęcić na zrobienie czegoś konkretnego. A teraz podam ciekawy przykład z mojej praktyki

Otóż płacąc przez system Platnosci.pl mój skrypt dostaje informację o każdej zmianie statusu transakcji (czyli w uproszczeniu jest to informacja, że zamówienie nr X zostało zatwierdzone, albo odrzucone). I założyłem (nie wiem czy słusznie), że dane zamówienie może tylko raz zmienić status (no bo każde nowo utworzone zamówienie może być później albo zatwierdzone, albo odrzucone). I okazało się, że w wyniku jakiegoś dziwnego błędu mój skrypt w ciągu 1 minuty dwa razy dostał informację o tym, że dane zamówienie zostało zatwierdzone. Efekt? Skrypt do tego samego zamówienia dwa razy wystawił taką samą fakturę, dwa razy dany partner dostał prowizję za jedno zamówienie (dobrze, że to było konto testowe a nie prawdziwego partnera). Oczywiście szybko dodałem do skryptu sprawdzanie, czy dane zamówienie już wcześniej było przetworzone. Takie zdarzenie miało miejsce tylko raz po przeprowadzeniu kilkuset transakcji, więc moje zdziwienie było wielkie, że nagle coś nawaliło. I tu pojawia się pytanie – czy popełniłem błąd, że na siłę wcześniej nie założyłem odpowiedniej blokady?

4 komentarze to “Czy perfekcjonizm to zaleta?”

  1. Darek pisze:

    Ja bym się tak perfekcjonizmem nie zadręczał, chociaż między perfekcjonizmem a jego zupełnym brakiem nieraz jest niewyraźna granica. Im bardziej odpowiedzialny projekt tym więcej szczegółów trzeba brać pod uwagę przy jego niezawodności. I przede wszystkim trzeba założyć że system będzie obsługiwany przez ludzi którzy nie mają pojęcia o jego działaniu. Myślę że lepiej kierować się zawsze początkowymi założeniami jakie były powzięte przy tworzeniu projektu a potem w razie możliwości (czasowych) uzbrajać go w coraz wymyślniejsze zabezpieczenia. Co do małoprawdopodobnych splotów zdarzeń to zakładałbym wersję mniej optymistyczną (czyli coś złego się jednak zdarzy) ale brałbym ją pod uwagę pod warunkiem że nakład pracy włożony w usprawnienie nie pogrąży mnie na dłuższy czas. Szukałbym wtedy najprostszej metody by wyeliminować na starcie przetwarzania skryptu taką możliwość.

  2. Darek pisze:

    Generalnie stawiałbym na profesjonalizm a nie perfekcjonizm a profesjonalizm to możliwie najbardziej optymalne (maksimum korzyści przy minimum kosztów) podejście poparte doświadczeniem, czego jak myślę Ci nie brakuje.

  3. Grzesiek pisze:

    Fajnie jest gdy programista przemyśli wszystkie ewentualności…
    Tylko czy da się wszystko przewidzieć? Chyba nie.
    Dlatego ja jako Twój potencjalny klient wolałbym inne podejście.
    To, że błędy się pojawią to pewne, dlatego ważne aby na nie szybko reagować. Wtedy nie są takie straszne. Zamiast więc poświęcać zbyt dużo czasu na myślenie nad ewentualnymi błędami lepiej zająć się eliminacją tych rzeczywistych.

    To tylko punkt widzenia klienta. Na pewno warto ten czas rozłożyć i na przemyślenie algorytmu i na reagowanie.

    Pozdrawiam

  4. Hilary Jendrasiak pisze:

    Moim zdaniem to błąd. Skrypt powinien przewidywać każdą sytuację, co z nim nie zrobisz- nie zadziała niepoprawnie.
    Szczególnie w takiej sytuacji, jaka zaistniała… 😉