KISS (Keep it Simple, Stupid) to reguła powstała w środowisku inżynierii wojskowej, która została zaadaptowana do wielu dziedzin życia w tym szczególnie inżynierii, nauki i życia społecznego. Zakłada tworzenie i projektowanie produktów w tak prosty sposób, aby każdy przeciętny użytkownik potrafił się posługiwać i rozumieć sposób działania, a inżynier mógł podjąć się naprawy w przeciętnych warunkach. Istnieje wiele wariantów rozwinięcia skrótu w tym m.in.: Keep it Super Simple, Keep it Simple, Smart i wszystkie z nich mają charakter pozytywny akcentując utrzymywanie produktów w sposób prosty i zrozumiały nawet dla potocznego głupka.
Programowanie
Adaptacja zasady KISS w informatyce oraz inżynierii oprogramowania odnosi się do każdego elementu oprogramowania, począwszy od procesu projektowania struktury programu, interfejsu użytkownika, skończywszy na kodzie źródłowym. Projekt powinien być tworzony i rozwijany w taki sposób, aby był jak najbardziej zrozumiały, bez wprowadzania niepotrzebnych skomplikowanych szczegółów. Zespół deweloperski czy programista przejmujący projekt powinien bez większego wysiłku być w stanie zrozumieć strukturę, sposób działania i szczegóły implementacji. Subiektywną miarą reprezentującą czytelność i prostotę projektu mogą być właśnie koszty poniesione przez programistów próbujących zrozumieć kod innego programisty.
Utrzymanie
Każdy projekt, który z założenia ma być utrzymywany i rozwijany w przyszłości powinien stosować się możliwie często do reguły KISS. Z biegiem czasu skład zespołu deweloperskiego może ulec zmianie co nie powinno być przeszkodzą w dalszym rozwoju projektu. Dlatego ważnym jest tworzenie projektu w taki sposób, aby mógł być łatwo zrozumiały przez każdego programiste danej firmy. W tym celu pomocne może być przyjęcie wspólnych wytycznych i standardów kodu w obrębie zespołu bądź zespołów.
Refaktor
Proces refaktoryzacji wpisuje się w trend zasady KISS. W trakcie rozwoju projektów zachodzi wiele modyfikacji nawet w klasach właściwie zaprojektowanych. Rodzi to potrzebę ciągłego dbania o jakość kodu. Jeśli jest to możliwe należy zastany kod uprościć i zostawić czytelniejszym.
Struktura
Warto dbać o spójność projektu w zastosowaniu jednolitych wzorców architektonicznych. Poszukiwanie najlepszego rozwiązania dla danego problemu nierzadko jest oparte na metodzie prób i błędów. Podążając za biężącymi trendami należy utrzymać jeśli to możliwe jedną architekturę przynajmniej dla modułu. Pozwoli to na uniknięcie wymagania znajomości wielu wzorców przez każdego programistę i zmniejszy jego złożoność. Ponadto należy utrzymać spójną strukturę pakietów.
Nazewnictwo
Duże znaczenie dla zrozumienia struktury projektu oraz szczegółów implementacji ma nazewnictwo. Należy dobierać odpowiednie nazwy dla wszystkich elementów projektu: pakietów, klas, obiektów, metod, zmiennych, stałych, parametrów itd. Nazwy powinny jednoznacznie opisywać przeznaczenie i odpowiedzialność oraz jednocześnie nie być zbyt długie. Dobrą praktyką jest przyjęcie spójnej notacji i konwencji nazewnictwa w obrębie całego zespołu.
Komentarze
Dobry kod powinien być napisany w taki sposób, aby komentarze nie były wymagane do jego zrozumienia. Jeśli powstaje potrzeba dodawania komentarzy do szczegółów implementacji należy się zastanowić czy możliwe jest uproszczenie opisywanego kodu. Być może dobrym pomysłem jest podzielenie go na mniejsze fragmenty, których nazewnictwo tłumaczy ich wykorzystanie. Są jednak sytuacje w których zastosowanie komentarzy ma sens i jest wręcz niezbędne np. w sytuacji opisania warunków zewnętrznych, miejsc krytycznych lub know-how.
YAGNI
Reguła YAGNI (You Ain't Gonna Need) mówi o tym, aby w momencie tworzenia kodu umieszczać w nim tylko to co jest lub będzie na pewno potrzebne. Zastosowanie reguły po części realizuje zasadę KISS, tzn. niepotrzebny i nieużywany kod mógłby utrudnić zrozumienie projektu. Istnieje spora szansa, że nieużywane fragmenty i funkcjonalności, które powstają przy okazji realizacji innych zadań w przyszłości mogą być zupełnie niepotrzebne lub wymagania zmienią się na tyle, że wymuszą zmianę implementacji. W związku z czym pisanie kodu na przyszłość (np. zestawu funkcji walidacyjnych) może okazać się stratą czasu. Biorąc pod uwagę zasady KISS i YAGNI należy zastanowić się nad bilansem zysków i strat dla wprowadzania rozwiązań uniwersalnych bez istnienia żadnych alternatywnych typów w momencie tworzenia.
Testowanie
Dobra praktyką w metodyce testów jest testowanie jak najmniejszej jednostki. W trakcie tworzenia przypadków testów dąży się do uproszczenia problemów do zadań atomowych. Im mniejsze i prostsze metody testowe tym lepiej dla jakości testów.
Dokumentacja
Dokumentacja projektowa również powinna być tworzona w taki sposób, aby była zrozumiała dla potencjalnych odbiorców. Na jej podstawie programista powinien być zdolny do zastosowania funkcjonalności i ewentualnego rozszerzenia projektu. Niewątpliwie dobrze i prosto napisany interfejs znacznie ułatwia tworzenie zrozumiałej dokumentacji.