Inżynieria wymagań
„Najtrudniejszym etapem tworzenia systemu komputerowego jest podjęcie precyzyjnej decyzji dotyczącej tego, co należy zbudować. Żadna inna część pracy koncepcyjnej nie jest tak trudna, jak zdefiniowanie szczegółowych wymagań technicznych, w tym określenie interfejsów umożliwiających komunikację z ludźmi, urządzeniami oraz innymi systemami oprogramowania. Żadna inna część pracy aż tak bardzo nie zaszkodzi systemowi, jeśli zostanie wykonana źle. Żadna inna część nie będzie trudniejsza do późniejszego wyprostowania.” Frederic Brook w opracowaniu „ Bez srebrnej kuli.Istota i wypadki inżynierii oprogramowania” z 1987.
Inżynieria oprogramowania jest dziedziną informatyki, której początki sięgają lat sześćdziesiątych ubiegłego stulecia. Andrzej Jaszkiewicz w książce „Inżynieria oprogramowania” definiuje ją jako wiedzę techniczną a nie naukę teoretyczną, dotyczącą cyklu życia oprogramowania, której celem jest uzyskanie wysokiej jakości produktu – oprogramowania.
Według tej definicji najistotniejsza jest: zgodność z wymaganiami użytkownika, niezawodność, efektywność, łatwość w konserwacji i ergonomia. Jej metody, techniki i narzędzia powstają i są rozwijane w oparciu o praktyczne doświadczenie i weryfikowane są podczas ich praktycznego stosowania. Z drugiej strony, dziedzina ta wykorzystuje oczywiście dorobek wielu nauk np. teorii programowania, sztucznej inteligencji, badań operacyjnych, psychologii i nauki o zarządzaniu. Obecnie zespół pracujący nad nowym oprogramowaniem złożony jest z analityków biznesowych, programistów, wdrożeniowców, kierowników projektu a nawet kadry zarządczej. W ramach tej dziedziny można wyróżnić dwa nurty: nurt formalny wymagający stosowania metod formalnych oraz nurt praktyczny opierający się na wiedzy i doświadczeniu ludzkim. To dzięki doświadczeniu można lepiej, skuteczniej czy szybciej realizować projekt, jednak brak formalnego zapisu realizowanego przedsięwzięcia może okazać się bardzo zawodny w osiągnięciu celu. Informacje zebrane od klienta mogą okazać się niewystarczające lub niepełne. Również zmieniające się wymagania jak i brak zrozumienia celów biznesowych często prowadzi do niepowodzenia przedsięwzięcia informatycznego.
W inżynierii oprogramowania pomija się często inżynierię wymagań w skład której wchodzi opracowywanie wymagań jak również zarządzanie nimi. Współczesna literatura fachowa, kładzie duży nacisk właśnie na sformalizowany zapis prowadzonych działań, zbieranie wymagań i zarządzanie nimi.
Uczymy się na własnych błędach. Świadomość niepowodzenia i popełnionego błędu powinna skłonić nas do poszukiwania nowego, może lepszego rozwiązania by nie powtarzać ponownie tego samego błędnego działania.