Programowanie obiektowe zapewnia dużą elastyczność, ale jeśli jest używane nieprawidłowo, może również powodować wiele zamieszania, ponieważ łatwo jest tworzyć bardzo złożone systemy, gdy wystarczą znacznie prostsze rozwiązania. Powinieneś uruchomić mały działający system, zanim rozwiniesz go w bardziej złożony. Pamiętaj też, że większość projektów w świecie rzeczywistym jest nadmiernie ograniczona i nie będziesz w stanie zadowolić wszystkich, więc musisz zdecydować o priorytetach swojego systemu. Każda część twojego systemu powinna skupiać się na jednej rzeczy i robić to dobrze. W razie wątpliwości rób krótsze rzeczy. Twórz krótsze klasy i krótsze metody. Takie postępowanie zmusi obiekty do skupienia się na jednej odpowiedzialności, co z kolei poprawi Twój projekt i pozwoli na łatwiejsze ponowne użycie kodu. Spraw, aby Twoje obiekty były jak najbardziej prywatne. Klasy publiczne nie powinny mieć żadnych pól publicznych, co oznacza, że wszędzie należy używać hermetyzacji. Maksymalizuj ukrywanie informacji i minimalizuj sprzężenia. Pamiętaj też, że imiona mają znaczenie. Unikaj tajemniczych skrótów w swoim kodzie i bądź konsekwentny. To samo słowo powinno oznaczać to samo wszędzie w systemie. Na koniec postaraj się, aby kod był jak najbardziej niezmienny. Tworzy to kod, który jest łatwy do zrozumienia, o wiele bardziej wielokrotnego użytku i bezpieczny dla wątków, co może być bardzo przydatne przy równoległym wykonywaniu, co zobaczymy w następnym rozdziale. Jeśli jednak zaimplementujesz zmienny system, zachowaj jak najmniejszą przestrzeń stanów. Ogólna rada: Twój projekt powinien być łatwy do zrozumienia i trudny do niewłaściwego użycia, nawet bez dokumentacji. Twój kod powinien być czytelny i łatwy w utrzymaniu, a wysiłek włożony w tworzenie kodu, który jest łatwy do zmiany, powinien być pozytywnie skorelowany z prawdopodobieństwem wystąpienia takiej zmiany