**Full stack** on tietojärjestelmien kehittämisen osa-alueita yhdistelevä lähestymistapa, joka liittyy käyttäjäkokemuksen suunnitteluun, järjestelmäkehittäjien työnkuviin ja osaamiseen  sekä kehitystyön tekniseen ympäristöön. Teknisenä käsitteenä full stack voi viitata yksinkertaisimmillaan järjestelmän rakenteen jaotteluun asiakas- ja palvelinosiin. Full stack voidaan nimetä lyhenteellä, joka muodostetaan siinä keskeisten välineiden nimistä (esim. LAMP = Linux, Apache, MySQL, Perl).

Termi *full stack* perustuu teknisten järjestelmien kuvaamisessa käytettyyn pinon (engl. stack) käsitteeseen, jolla tarkoitetaan järjestelmän arkkitehtuurin kerroksittaista rakennetta.  Rakenteessa kullakin kerroksella on oma tehtävänsä ja määritellyt rajapinnat toisiin kerroksiin.

Full stackin synonyyminakin käytetty termi *solution stack* (kirjaimellisesti suomentaen "ratkaisupino") viittaa nimettyihin ohjelmistotuotteisiin ja/tai laitteisiin, joista kokonaisuutena katsotaan muodostuvan palveluarkkitehtuuri (Service Oriented Architecture, lyhennettynä SOA).

Ammatillinen ja työnjaollinen näkökulma
---------------------------------------

Ammatillisena ja työnjaollisena käsitteenä, jollaisena sitä käytetään esimerkiksi rekrytoinnissa, full stack sisältää ajatuksen, että suunnittelija (full stack designer) tai ohjelmistokehittäjä (full stack developer), kykenee ottamaan huomioon, suunnittelemaan ja toteuttamaan käyttäjäkokemuksen eri osa-alueiden tukea tietojärjestelmässä. Full stack developer -käsite on varsin uusi. On esitetty, että sitä on alettu laajemmin käyttää vuoden 2013 tienoilla.

Full stack -suunnittelijan rooli on saanut runsaasti huomiota keskusteluissa esimerkiksi sen määrittelyn, hyödyllisyyden ja työmarkkinoilla esiintyvän kysynnän kannalta.

Käyttäjäkokemuksen näkökulma
----------------------------

Käyttäjäkokemusta (user experience) pidetään erityisesti kuluttajatuotteiden massamarkkinoilla tärkeänä tekijänä tuotteiden ja palveluiden menestyksessä. Käyttäjäkokemuksen käsite poikkeaa aiemmin tietojärjestelmien suunnittelussa keskeisestä käytettävyyden (usability) käsitteestä siten, että käyttäjäkokemukseen katsotaan kuuluvan hedonistinen osa (kuten hauskuuden tai tyydytyksen kokemus), kun taas käytettävyys määrittyy välineellisin tai käytännöllisin kriteerein. Käytettävyyttä kehittämällä pyritään tehostamaan käyttäjän ja laitteen yhteistoimintaa ja toisaalta tekemään sitä käyttäjälle miellyttävämmäksi.

Tekninen näkökulma
------------------

Teknisestä näkökulmasta web-järjestelmien full stack koostuu tietokantajärjestelmästä sekä sovellusten kehityksen ja käytön asiakas- ja palvelinympäristöistä.

Esimerkiksi MEAN on ilmainen ja avoimeen lähdekoodiin perustuva full stack, joka sisältää MongoDB-tietokannan, Express.js-palvelimen toteutusympäristön, AngularJS-JavaScript-ohjelmistokehyksen ja Node.js-suoritusympäristön.

Esimerkkejä full stack -kokoonpanoista| Kokoonpano | Käyttöjärjestelmä(t) | Tietokanta/-kannat | Web-palvelin | Ohjelmointikieli/-kielet | Web-framework |
| --- | --- | --- | --- | --- | --- |
| BCHS | OpenBSD | SQLite | httpd | C |  |
| GLASS | Linux | GemStone | Apache | Smalltalk | Seaside |
| LAMP | Linux | MySQL | Apache | Perl |
| MEAN.JS | Node.js:n tukemat | MongoDB | Node.js | JavaScript | AngularJS |
|

Carlos Buenon vuonna 2010 julkaisemaa blogikirjoitusta *The Full Stack* pidetään full stackin idean hahmottamiseen merkittävästi vaikuttaneena "klassikkona". Kirjoituksessa Bueno kuvaa *full stack -ohjelmoijan* (full stack programmer) generalistina eli laaja-alaisena osaajana, joka kykenee kehittämään sovelluksia itsenäisesti ja joka ennen kaikkea ymmärtää tekemiensä ratkaisujen vaikutukset tietojärjästelmän teknisen kokonaisuuden, sen kerrosrakenteen kannalta.

Lähteet
-------

* Bieberstein, Norbert, Laird, Robert, Jones, Keith & Mitra, Tilaka: *Executing SOA: A Practical Guide for the Service-Oriented Architect*. Upper Saddle River, NJ: IBM Press, 2008. ISBN 978-0-13-235374-8. (englanniksi)
* Karvonen, Hannu: *User Experience Goals in Human-Centred Design of Safety-Critical Systems*. väitöskirja. Jyväskylä: Jyväskylän yliopisto. (englanniksi)
* Loukides, Mike: Full-stack developers *radar.oreilly.com*.  2014. Viitattu 19.8.2020.
* Shropshire, Jordan, Landry, Jeffrey P. & Presley, Steven S.: Development of a Metric for Assessing Full Stack Developers’ Expertise *Semanticscholar.org*.  2018. Viitattu 17.8.2020.
* Sinkkonen, Irmeli, Kuoppala, Hannu, Parkkinen, Jarmo & Vastamäki, Raino: *Käytettävyyden psykologia*. Helsinki: Edita, IT Press, 2002. ISBN 951-826574-7.
* Viitanen, Minna: *Full-stack -suunnittelijan roolin hyödyt ja haasteet ketterässä ohjelmistokehityksessä*. Diplomityö, Tietotekniikan diplomi-insinöörin tutkinto-ohjelma,Tampereen teknillinen yliopisto. Tampere: M. Viitanen, 2018. Teoksen verkkoversio (viitattu 19.8.2020).
* Zammetti, Frank: *Modern Full-Stack Development: Using TypeScript, React, Node. js, Webpack, and Docker*. Apress, 2020. ISBN 978-1-4842-5737-1. (englanniksi)

### Viitteet

1. ↑  Viitanen 2018, 2
2. 1 2  Viitanen 2018, 24
3. ↑   Shropshire, Landry & Presley 2018
4. ↑  Zammetti 2020, 1
5. 1 2 3  Loukides, Mike: Full-stack developers *radar.oreilly.com*.  2014. Viitattu 19.8.2020.
6. ↑  Viitanen 2018, 25
7. ↑  Bieberstein ym. 2008, 1
8. ↑  Christian Maioli M (pseudonyymi): What 'full-stack developer' should mean *TechBeacon.com*.  20.7.2016. Micro Focus. Viitattu 18.8.2020.
9. ↑  Karvonen 2019, 40
10. ↑  Sinkkonen ym. 2002, 19
11. 1 2  What is the MEAN Stack? MongoDB. Viitattu 17.8.2020.
12. ↑  Dzonsons, Kristaps: BCHS Stack *learnbchs.org*. Viitattu 17.8.2020.
13. ↑  A Beginners’ Guide to Installing and Configuring GLASS: Gemstone 64/S Smalltalk / Seaside / Application Server / Object Database Server Environment *kalountos.wordpress.com*.  2015. Viitattu 18.8.2020.

Aiheesta muualla
----------------

* Bueno, Carlos: The Full Stack: Part I *Facebook Engineering Blogs*.  2010. Facebook Inc.. Viitattu 20.8.2020.

### Opinnäytetöitä

* Huhtala, Harri: *Full-Stack JavaScript: MEAN.JS-projektin luominen*. (Haaga-Helia-ammattikorkeakoulu), 2014. Teoksen verkkoversio (viitattu 19.8.2020).
* Nevalainen, Toni: *MEAN Software Stack : MEAN-stack and its relative strengths and weaknesses relative to its competitors*. (Hämeen ammattikorkeakoulu), 2018. Teoksen verkkoversio (viitattu 20.8.2020). (englanniksi)
* Nguyen Nhat, Minh: *Building a component-based modern web application: full-stack solution*. (Metropolia Ammattikorkeakoulu), 2018. Teoksen verkkoversio (viitattu 21.8.2020). (englanniksi)
* Reponen, Antti: *Full-Stack: MERN-pino*. (Metropolia Ammattikorkeakoulu), 2018. Teoksen verkkoversio (viitattu 19.8.2020).
* Tuhkanen, Aleksi: *Tietojärjestelmän rakentaminen startup-yrityksessä full-stack kehittäjänä*. (Haaga-Helia ammattikorkeakoulu), 2017. Teoksen verkkoversio (viitattu 19.8.2020).