I 'Software Abstractions' presenterer Daniel Jackson en tilnærming til programvaredesign som kombinerer tradisjonelle formelle metoder med automatiserte verktøy for tidlig oppdagelse av feil. Denne metoden, som Jackson omtaler som 'lettvekts formelle metoder' eller 'smidig modellering', finner inspirasjon i formell spesifikasjon og bygger på en presis og uttrykksfull notasjon, basert på en grunnleggende kjerne av enkle og robuste konsepter. I stedet for konvensjonell analyse gjennom teorembevis, benytter denne tilnærmingen en fullt automatisert analyse som gir designere umiddelbar tilbakemelding. Jackson har utviklet Alloy, et språk som fanger essensen av programvareabstraksjoner på en enkel og konsis måte, med et minimalt verktøysett av matematiske begreper. Denne reviderte utgaven oppdaterer teksten, eksemplene og vedleggene for å være fullt kompatible med Alloy 4.