XNA se sastoji od nekoliko skupina povezanih alata i pomoćnih sredstava. Integracijom tih komponenti XNA na jednom mjestu razvojnom inženjeru daje sva sredstva potrebna za razvoj igre. Kao i većina ostalih razvojnih okruženja za izradu igara, i kod XNA se podrazumijeva da će se modeli i teksture koje će se koristiti izraditi u nekom specijaliziranom alatu.
Osnovna svrha XNA je pružanje alata za razvoj "jednostavnih" (engl. lightweight) igara. Pritom su ciljane skupine korisnika nezavisni razvojni programeri, amateri odnosno hobisti te studenti. Prema tome, glavni ciljevi kojima XNA teži su:
Jedna od glavnih snaga, odnosno prednosti XNA-a u odnosu na konkurentska okruženja je mogućnost jednostavne zamjene platforme za koju je igra rađena. Već smo rekli da je pomoću XNA-a moguće razvijati igre za Windows PC-e, XBOX 360 te pametne telefone s Windows Phone OS-om. XNA omogućuje da se jednom napravljena igra izvodi na svim navedenim platformama uz minimalne izmjene izvornog koda. Jasno je da nije moguće napraviti igru koja se bez posebnih izmjena izvršava na svim platformama zbog specifičnosti svake navedene platforme (procesorska snaga, dostupnost radne memorije, karakteristične razlučivosti prikaza...), međutim XNA olakšava više-platformski razvoj posebnim funkcijama poput funkcionalnosti prikazanoj na priloženoj slici
Budući da je cilj ponovna upotreba koda i resursa u što većem udjelu, XNA omogućuje kreiranje projekta u kojem se definiraju podprojekti za različite platforme, prilikom čega svi podprojekti referenciraju isti izvorni kod kako bi se svaka promjena automatski ažurirala u svim verzijama projekta. Pritom se rješenje izgrađuje posebno za svaku platformu. Naglasak se također stavlja i na dijeljenje resursa koliko god je to moguće, dok se platformno-specifični resursi smještaju u odgovarajući podprojekt.
Razvoj igara je jako složen posao koji podrazumijeva široko područje sofisticiranih znanja. Zbog toga je početnicima jako teško uopće započeti s razvojem, kada moraju u kratkom periodu savladati opsežno gradivo. XNA je napravljen s posebnom pažnjom kako bi se početnicima omogućilo što brže uključivanje u svijet razvoja igara. To je omogućeno korištenjem već jako dobro poznatog IDE-a Visual Studio, programskog jezika C# te automatskim rješavanjem mnogih problema koji bi inače zahtijevali posebnu pažnju programera. Osim toga, XNA nudi i obilnu dokumentaciju s mnoštvom primjera izvornog koda, kako bi programer početnik mogao u kratkom vremenu shvatiti principe rada. Ostvarenje ovog cilja programeru omogućuje da se fokusira na igrivost, odnosno na pravila igre umjesto na tehničke detalje.
Struktura XNA-a se može promatrati kao niz slojeva, budući da XNA programeru dopušta pogled i razvoj s visoke razine. Probleme niske razine (poput komunikacije s uređajima) XNA rješava u niskom sloju umjesto programera. Razvojni okvir koncipiran je na sljedeći način:
Najniži sloj predstavlja platformu na kojoj se gradi ostatak razvojnog okvira. Obuhvaća nativne i upravljane API-je poput Direct3D 9, XACT, XInput i XContent.
Temeljna funkcionalnost koju pruža XNA implementirana je u ovom sloju. Viši slojevi predstavljaju samo proširenje ovog sloja.
Ovaj sloj naslanja se na jezgru razvojnog okvira proširenjem postojećih funkcionalnosti na način da se programiranje učini što jednostavnije.
Završni sloj je specifičan za igru koja se razvija. U njemu se nalazi izvorni kod igre, te svi resursi potrebni za njen rad.
Pojasnili smo kako je XNA strukturiran, te ćemo sada reći nešto i o funkcionalnostima koje XNA pruža. Temeljne funkcionalnosti koje su implementirane u jezgri razvojnog okvira navedene su u donjem popisu:
Umjesto da se programer bavi programiranjem platformno-specifičnih funkcija, aplikacijski model izrađen je na takvoj razini apstrakcije da programer može pisati platformno neovisan kod, a da XNA umjesto njega u pozadini izgradi posebno rješenje za odgovarajuću platformu. Ovakav način programiranju posebno pogoduje ponovnoj upotrebi koda, te omogućuje programeru da se koncentrira na samu igru.
XNA sadrži grafičke API-je temeljene na Direct3D 9 koje omogućuju programeru jednostavno iscrtavanje objekata s ugrađenim funkcionalnostima.
Ovaj API koristi ugrađenu podršku za nativne API-je niske razine te umjesto programera rješavanja probleme s učitavanjem zvučnih datoteka u igru. Rad sa zvukom svodi se praktički na pozivanje spremljenog resursa te pozivanje željene operacije.
API za ulazne jedinice omogućuje jednostavan rad s ulaznim jedinicama poput kontrolera, tipkovnice i miša. S metodom getState() može se provjeriti raspoloživost bilo kojeg ulaznog uređaja te potom dohvaćati unesene vrijednosti.
Još jedan API koji se koristi za spremanje podataka (profili igrača, bodovi, stanja igara) na platformno neovisan način.
Math API pruža klase i metode koje su najčešće korištene u razvoju igara (vektori i matrice).