Wymagania wobec wytwarzanego oprogramowania stale ewoluują. Objętość kodu źródłowego zaczyna wzrastać, a mnogość funkcji powoduje, że złożoność logiki, którą musi rozumieć programista, stale się powiększa. Do tego dochodzi komunikacja z usługami zewnętrznymi, takimi jak bazy danych czy też różnorodne API. Nie zawsze są to powszechnie dostępne funkcjonalności i mogą one wymagać od użytkownika uwierzytelnienia się przy pomocy różnego rodzaju poświadczeń. To z kolei zaczyna komplikować sytuację. Nieprawidłowe przechowywanie sekretów, które z definicji nie powinny być przecież jawne, prowadzić może do nadużyć, takich jak nieautoryzowany dostęp do systemów czy naruszenie poufności informacji.