Poprawnie – instrukcja użytkownika aplikacji nie powinna zawierać opisu zastosowanych algorytmów. Dokument „dla użytkownika” ma jedno główne zadanie: w prosty sposób pokazać, jak korzystać z programu, a nie jak jest on zbudowany w środku. Algorytmy, struktury danych, złożoność obliczeniowa, szczegóły implementacyjne – to jest domena dokumentacji technicznej, przeznaczonej dla programistów, architektów systemów czy osób rozwijających oprogramowanie. Z punktu widzenia zwykłego użytkownika ważne jest raczej: na jakim sprzęcie aplikacja pójdzie, jak ją zainstalować, jak uruchomić konkretną funkcję i co zrobić, gdy coś nie działa. Moim zdaniem wrzucanie do instrukcji opisów algorytmów szkodzi na dwóch poziomach. Po pierwsze, zaciemnia obraz – użytkownik musi przebijać się przez techniczne treści, których i tak nie wykorzysta, zamiast skupić się na krokach „kliknij tu, wybierz to, zapisz”. Po drugie, z punktu widzenia bezpieczeństwa i ochrony własności intelektualnej firmy, zbyt szczegółowe ujawnianie algorytmów w publicznej instrukcji nie jest najlepszą praktyką. Standardem branżowym jest rozdzielenie dokumentacji na: user guide (instrukcja użytkownika), admin guide (dla administratorów), developer/technical documentation (dla twórców i integratorów). W user guide opisujemy np. wymagania sprzętowe (system operacyjny, ilość RAM, miejsce na dysku), sposób instalacji (krok po kroku, zrzuty ekranu), oraz działanie funkcji z punktu widzenia użytkownika („ten przycisk eksportuje dane do PDF”). Natomiast algorytmy sortowania, szyfrowania, kompresji czy przetwarzania danych trafiają do dokumentów technicznych, specyfikacji lub repozytorium kodu. W praktyce, jeśli użytkownik musi znać algorytm, żeby użyć programu, to znaczy, że interfejs jest po prostu źle zaprojektowany.
Wiele osób intuicyjnie myśli, że dobra instrukcja użytkownika powinna zawierać „wszystko o programie”, łącznie z tym, jak jest on zbudowany od środka. To dość częsty błąd. Instrukcja użytkownika to dokument stricte praktyczny, nastawiony na obsługę, a nie na analizę wewnętrznej logiki systemu. Dlatego wymagania sprzętowe są tam jak najbardziej na miejscu – użytkownik musi wiedzieć, czy aplikacja w ogóle uruchomi się na jego komputerze, jakiego systemu operacyjnego potrzebuje, ile pamięci RAM czy wolnego miejsca na dysku. To podstawowy element każdej sensownej instrukcji, spotykany w oprogramowaniu komercyjnym i open source. Podobnie opis instalacji programu jest absolutnie kluczowy. Bez przejrzystej procedury instalacji, najlepiej krok po kroku, z krótkimi komentarzami, wielu użytkowników po prostu nie poradzi sobie z poprawnym uruchomieniem aplikacji. W dobrych praktykach dokumentacyjnych (np. styl Microsoft, Atlassian, Red Hat) sekcje typu „Instalacja”, „Pierwsze uruchomienie”, „Konfiguracja wstępna” to standard. Trzecia kwestia to sposób działania poszczególnych komponentów, ale z perspektywy użytkownika, nie programisty. Nie chodzi o opisy klas, modułów czy bibliotek, tylko o to, co użytkownik widzi: okna, zakładki, panele, przyciski, formularze. Instrukcja powinna tłumaczyć, do czego służą konkretne elementy interfejsu, jakie mają opcje, co się stanie po wybraniu danej funkcji. Bez takiego opisu użytkownik błądzi po omacku. Problem zaczyna się wtedy, gdy do instrukcji użytkownika próbuje się wcisnąć opis zastosowanych algorytmów. To już jest poziom dokumentacji technicznej, przeznaczony dla deweloperów. Użytkownik końcowy nie potrzebuje wiedzieć, czy dane są sortowane quicksortem, mergesortem, jak działa algorytm szyfrowania albo jaka jest złożoność czasowa przetwarzania. Takie informacje nie pomagają mu wykonać zadania w aplikacji, tylko wprowadzają niepotrzebny chaos. Typowy błąd myślowy polega tu na mieszaniu dwóch różnych grup odbiorców: użytkowników i programistów. Dobrą praktyką jest ich rozdzielenie i trzymanie instrukcji użytkownika na poziomie funkcji, kroków i efektów, a nie implementacji.