Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - Codemotion Roma 2018

Federico Feroldi
Federico FeroldiDigital Transformation leadership & CTO
Una PA agile, funzionale e serverless…
SI PUÒ FARE!
Federico Feroldi / @cloudify • Danilo Spinelli / @gunzip
Roma 2018
CC BY-NC-SA 3.0
Agenda
La genesi
Come l’abbiamo fatto
Presente e Futuro
agid.gov.it • @agidgov
teamdigitale.governo.it • @teamdigitaleit
La visione della “Cittadinanza Digitale”
Eliminare: raccomandate e
lettere, code allo sportello,
scadenze da ricordare,
moduli da compilare,
bollettini da pagare in
Posta!(e tanto altro)
Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - Codemotion Roma 2018
Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - Codemotion Roma 2018
I principi
Codice Open Source
Infrastruttura Cloud
Metodologia Agile e Lean
Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - Codemotion Roma 2018
Le difficoltà
“Secondo me…”
“Serve una gara per…”
“Cloud ? Eccolo !”
“Quando sarà pronto ?”
Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - Codemotion Roma 2018
Trasparenza totale (scrivere e condividere!)
Codice e Documentazione
Discussioni aperte (Pull Request)
Decisioni (Architecture Decision Records)
Backlog (Pivotal Tracker)
Automazione e tooling (gratis!)
Codice / Code Review (GitHub)
Build / Test (CircleCI)
Backlog e Planning (Pivotal Tracker)
Code Analysis (CodeClimate, Codacy, Snyk)
Efficienza (meno codice = meno bug e alta velocity)
Frameworks(Express, React Native)
Codice tipizzato(TypeScript, Flow)
Stile funzionale(fp-ts, io-ts, tslint-immutable)
Best practices (TSLint, ESLint, DangerJS)
PaaS (focus sulla business logic, non sull’infrastruttura)
Azure
Dati in Unione Europea
Serverless
Database/Message broker
Remote-first (usiamo tutto l’aiuto che troviamo)
Prendi l’iniziativa (Backlog→PR→Build→Merge)
Feedback continui (CircleCI → Slack)
Momenti di “sync” (Howdy, Hangouts)
Memo collaborativi (Google Docs)
Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - Codemotion Roma 2018
L’architettura
Terraform
Infrastructure as Code
versioning e ambienti “riproducibili”
Parziale il supporto per Azure
resource "null_resource"
"azurerm_cosmosdb_collections" {
provisioner "local-exec" {
command = …
}
}
Notifiche e Preferenze: un’API per tutte le PA !
Auth & quota (API management)
Persistenza (Cosmos DB)
Integrazione (Storage Queues)
Business logic (Functions / TypeScript)
Azure Functions
Triggers & Actions
Una tecnologia in evoluzione
// update message visibilityTimeout
getDelaySecForRetries(numberOfRetries)
.map(visibilityTimeoutSec => {
queueService.updateMessage(
queueName, ... visibilityTimeoutSec,
() => …
});
Perchè Typescript
Type system ⋍ Meno bug !
Tools & Refactor (Visual Studio Code)
Feature di ES7 (async / await, spread
operator, ...) indipendentemente dalla versione di
NodeJS !
Functional Typescript
Ancora poco “functional”...
function apply<[...ArgumentsT], ResultT>(
fn: (...fnargs: ArgumentsT) => ResultT,
args: ArgumentsT
): ResultT
{
// args becomes any[]
// fn(...args)
}
apply((x: string, y: number) => ..., [“1”, 2])
Functional Typescript
...nel frattempo
Giulio Canti fp-ts
https://github.com/gcanti/fp-ts
Untyped Express controller
Prima…
async getProfile(req, res)
{
const fiscalCode = req.params.fiscal_code;
if (!isValid(fiscalCode)) {
return res.status(400)
.json({ error: “invalid code” });
}
const profile = await
Service.getProfile(fiscalCode);
res.status(200).json(profile);
}
Typed Express controller
...dopo
async getProfile(fiscalCode: FiscalCode):
Promise<Either<
ResponseError<QueryError>,
ResponseSuccess<Profile>>>
=>
(await Model.getProfile(fiscalCode))
.map(ResponseSuccess)
.mapLeft(ResponseError);
Linting
Imporre le “best practice”
Immutabilità, type decl “pervasive”, ...
Favorire uno stile coerente
Ordine degli import, indentazione, naming, ...
… ed efficientare l’onboarding
// tslint:disable:no-any
Deploy delle Azure Functions
gulp:release
Build & Test (tsc)
Bundle (riduce drasticamente startup time !)
Tag (push release tag)
Push (git push origin master)
Pull (tramite trigger automatico nelle Functions)
(git) push the candle back !
Rollback
Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - Codemotion Roma 2018
Un po’ di metriche (9 mesi)
~170 User Stories
~300 Pull Requests
~900 Commits
~22.000 LoCs (80% TS, 20% JS)
What’s next
Lock-in Azure? (Docker, Kubernetes, Helm)
Community?
Quando sarà pronto?
github.com/
teamdigitale/
digital-citizenship
PR welcome!
1 of 33

Recommended

Machine learning models continuous deployment on azure using devops by
Machine learning models continuous deployment on azure using devopsMachine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devopsIgor Antonacci
42 views42 slides
Predictive Maintenance per le aziende del nord-est con Azure e IoT by
Predictive Maintenance per le aziende del nord-est con Azure e IoTPredictive Maintenance per le aziende del nord-est con Azure e IoT
Predictive Maintenance per le aziende del nord-est con Azure e IoTMarco Parenzan
496 views47 slides
Layered Expression Trees feat. CQRS by
Layered Expression Trees feat. CQRSLayered Expression Trees feat. CQRS
Layered Expression Trees feat. CQRSAndrea Saltarello
4.6K views35 slides
Confio Ignite - webinar by Matteo Durighetto by
Confio Ignite - webinar by Matteo DurighettoConfio Ignite - webinar by Matteo Durighetto
Confio Ignite - webinar by Matteo DurighettoMiriade Spa
454 views19 slides
Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023 by
Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023
Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023AndreaStagi3
62 views59 slides
Application insights-gabrome18 by
Application insights-gabrome18Application insights-gabrome18
Application insights-gabrome18Roberto Albano
55 views43 slides

More Related Content

Similar to Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - Codemotion Roma 2018

Application insights - Meet{cast} - Meetup #AperiTech dotNET{podcast} - Marzo... by
Application insights - Meet{cast} - Meetup #AperiTech dotNET{podcast} - Marzo...Application insights - Meet{cast} - Meetup #AperiTech dotNET{podcast} - Marzo...
Application insights - Meet{cast} - Meetup #AperiTech dotNET{podcast} - Marzo...Roberto Albano
57 views52 slides
Silverlight in Action by
Silverlight in ActionSilverlight in Action
Silverlight in ActionDotNetMarche
423 views41 slides
Webcast - Introduzione a Visual Studio Online by
Webcast - Introduzione a Visual Studio OnlineWebcast - Introduzione a Visual Studio Online
Webcast - Introduzione a Visual Studio OnlineDavide Benvegnù
454 views26 slides
Html5 by
Html5Html5
Html5Cristiano Rastelli
1.1K views79 slides
VSTS - L'ALM a portata di mano by
VSTS - L'ALM a portata di manoVSTS - L'ALM a portata di mano
VSTS - L'ALM a portata di manoRiccardo Cappello
51 views14 slides
DevOps by examples - Agile O'Day 2017 by
DevOps by examples - Agile O'Day 2017DevOps by examples - Agile O'Day 2017
DevOps by examples - Agile O'Day 2017Giulio Vian
344 views35 slides

Similar to Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - Codemotion Roma 2018(20)

Application insights - Meet{cast} - Meetup #AperiTech dotNET{podcast} - Marzo... by Roberto Albano
Application insights - Meet{cast} - Meetup #AperiTech dotNET{podcast} - Marzo...Application insights - Meet{cast} - Meetup #AperiTech dotNET{podcast} - Marzo...
Application insights - Meet{cast} - Meetup #AperiTech dotNET{podcast} - Marzo...
Roberto Albano57 views
Silverlight in Action by DotNetMarche
Silverlight in ActionSilverlight in Action
Silverlight in Action
DotNetMarche423 views
Webcast - Introduzione a Visual Studio Online by Davide Benvegnù
Webcast - Introduzione a Visual Studio OnlineWebcast - Introduzione a Visual Studio Online
Webcast - Introduzione a Visual Studio Online
Davide Benvegnù454 views
DevOps by examples - Agile O'Day 2017 by Giulio Vian
DevOps by examples - Agile O'Day 2017DevOps by examples - Agile O'Day 2017
DevOps by examples - Agile O'Day 2017
Giulio Vian344 views
DevOps@Work 2017 - Application insights more control, more power by Roberto Albano
DevOps@Work 2017 - Application insights more control, more powerDevOps@Work 2017 - Application insights more control, more power
DevOps@Work 2017 - Application insights more control, more power
Roberto Albano396 views
AngularJS – Reinventare le applicazioni web by Luca Milan
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni web
Luca Milan6.1K views
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua... by Alessandro Alpi
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
Alessandro Alpi357 views
Schedule - Progetto di Linguaggi e Modelli Computazionali M by Daniele Campogiani
Schedule - Progetto di Linguaggi e Modelli Computazionali MSchedule - Progetto di Linguaggi e Modelli Computazionali M
Schedule - Progetto di Linguaggi e Modelli Computazionali M
Daniele Campogiani430 views
Aspect Oriented Programming by Andrea Bozzoni
Aspect Oriented ProgrammingAspect Oriented Programming
Aspect Oriented Programming
Andrea Bozzoni1.1K views
Introduzione al Domain Driven Design (DDD) by DotNetMarche
Introduzione al Domain Driven Design (DDD)Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)
DotNetMarche1.1K views
Application insights - Power is nothing without control by Roberto Albano
Application insights - Power is nothing without controlApplication insights - Power is nothing without control
Application insights - Power is nothing without control
Roberto Albano176 views
How I did it (in .NET): idiomatic Domain Driven Design by Andrea Saltarello
How I did it (in .NET): idiomatic Domain Driven DesignHow I did it (in .NET): idiomatic Domain Driven Design
How I did it (in .NET): idiomatic Domain Driven Design
Andrea Saltarello977 views
CMDBuid Significato di una soluzione open source per la gestione del CMDB by CMDBuild org
CMDBuid Significato di una soluzione open source per la gestione del CMDBCMDBuid Significato di una soluzione open source per la gestione del CMDB
CMDBuid Significato di una soluzione open source per la gestione del CMDB
CMDBuild org424 views
Tutto quello che non vi hanno mai detto su Azure Integration Services (Logic ... by Alessio Biasiutti
Tutto quello che non vi hanno mai detto su Azure Integration Services (Logic ...Tutto quello che non vi hanno mai detto su Azure Integration Services (Logic ...
Tutto quello che non vi hanno mai detto su Azure Integration Services (Logic ...
Alessio Biasiutti120 views
Meetup DotNetCode A.I. Bot Framework and Azure Functions by dotnetcode
Meetup DotNetCode A.I. Bot Framework and Azure FunctionsMeetup DotNetCode A.I. Bot Framework and Azure Functions
Meetup DotNetCode A.I. Bot Framework and Azure Functions
dotnetcode125 views

More from Federico Feroldi

Project IO - TS-Conf 2019 by
Project IO - TS-Conf 2019Project IO - TS-Conf 2019
Project IO - TS-Conf 2019Federico Feroldi
436 views43 slides
From 1 to infinity: how to scale your tech organization, build a great cultur... by
From 1 to infinity: how to scale your tech organization, build a great cultur...From 1 to infinity: how to scale your tech organization, build a great cultur...
From 1 to infinity: how to scale your tech organization, build a great cultur...Federico Feroldi
573 views27 slides
A Blueprint for Scala Microservices by
A Blueprint for Scala MicroservicesA Blueprint for Scala Microservices
A Blueprint for Scala MicroservicesFederico Feroldi
4.1K views46 slides
From Startup to Exit in 18 months by
From Startup to Exit in 18 monthsFrom Startup to Exit in 18 months
From Startup to Exit in 18 monthsFederico Feroldi
1.3K views9 slides
Design and development of an Online Social Network crawler by
Design and development of an Online Social Network crawlerDesign and development of an Online Social Network crawler
Design and development of an Online Social Network crawlerFederico Feroldi
1.2K views86 slides
Scaling web application in the Cloud by
Scaling web application in the CloudScaling web application in the Cloud
Scaling web application in the CloudFederico Feroldi
2.8K views34 slides

More from Federico Feroldi(12)

From 1 to infinity: how to scale your tech organization, build a great cultur... by Federico Feroldi
From 1 to infinity: how to scale your tech organization, build a great cultur...From 1 to infinity: how to scale your tech organization, build a great cultur...
From 1 to infinity: how to scale your tech organization, build a great cultur...
Federico Feroldi573 views
A Blueprint for Scala Microservices by Federico Feroldi
A Blueprint for Scala MicroservicesA Blueprint for Scala Microservices
A Blueprint for Scala Microservices
Federico Feroldi4.1K views
From Startup to Exit in 18 months by Federico Feroldi
From Startup to Exit in 18 monthsFrom Startup to Exit in 18 months
From Startup to Exit in 18 months
Federico Feroldi1.3K views
Design and development of an Online Social Network crawler by Federico Feroldi
Design and development of an Online Social Network crawlerDesign and development of an Online Social Network crawler
Design and development of an Online Social Network crawler
Federico Feroldi1.2K views
Scaling web application in the Cloud by Federico Feroldi
Scaling web application in the CloudScaling web application in the Cloud
Scaling web application in the Cloud
Federico Feroldi2.8K views
Innovate, optimize and profit with cloud computing by Federico Feroldi
Innovate, optimize and profit with cloud computingInnovate, optimize and profit with cloud computing
Innovate, optimize and profit with cloud computing
Federico Feroldi521 views
Crawling the web for fun and profit by Federico Feroldi
Crawling the web for fun and profitCrawling the web for fun and profit
Crawling the web for fun and profit
Federico Feroldi8.5K views
Cloudify your applications with Amazon Web Services by Federico Feroldi
Cloudify your applications with Amazon Web ServicesCloudify your applications with Amazon Web Services
Cloudify your applications with Amazon Web Services
Federico Feroldi2.3K views

Recently uploaded

CONVEGNO ECOMONDO 09/11-BRUNETTI Maurizia by
CONVEGNO ECOMONDO 09/11-BRUNETTI MauriziaCONVEGNO ECOMONDO 09/11-BRUNETTI Maurizia
CONVEGNO ECOMONDO 09/11-BRUNETTI MauriziaServizi a rete
59 views9 slides
CONVEGNO ECOMONDO 09/11-D'ALUISO Maria Luisa by
CONVEGNO ECOMONDO 09/11-D'ALUISO Maria LuisaCONVEGNO ECOMONDO 09/11-D'ALUISO Maria Luisa
CONVEGNO ECOMONDO 09/11-D'ALUISO Maria LuisaServizi a rete
59 views25 slides
Progettazione ed installazione impianti d'antenna by
Progettazione ed installazione impianti d'antenna Progettazione ed installazione impianti d'antenna
Progettazione ed installazione impianti d'antenna Massimo Talia
5 views6 slides
CONVEGNO ECOMONDO 09/11-BERTANI Tommaso by
CONVEGNO ECOMONDO 09/11-BERTANI TommasoCONVEGNO ECOMONDO 09/11-BERTANI Tommaso
CONVEGNO ECOMONDO 09/11-BERTANI TommasoServizi a rete
60 views6 slides
CONVEGNO ECOMONDO 09/11-QUAZZO Armando by
CONVEGNO ECOMONDO 09/11-QUAZZO ArmandoCONVEGNO ECOMONDO 09/11-QUAZZO Armando
CONVEGNO ECOMONDO 09/11-QUAZZO ArmandoServizi a rete
62 views14 slides
CONVEGNO ECOMONDO 09/11-SCIBILIA Gerardo by
CONVEGNO ECOMONDO 09/11-SCIBILIA GerardoCONVEGNO ECOMONDO 09/11-SCIBILIA Gerardo
CONVEGNO ECOMONDO 09/11-SCIBILIA GerardoServizi a rete
56 views17 slides

Recently uploaded(10)

CONVEGNO ECOMONDO 09/11-BRUNETTI Maurizia by Servizi a rete
CONVEGNO ECOMONDO 09/11-BRUNETTI MauriziaCONVEGNO ECOMONDO 09/11-BRUNETTI Maurizia
CONVEGNO ECOMONDO 09/11-BRUNETTI Maurizia
Servizi a rete59 views
CONVEGNO ECOMONDO 09/11-D'ALUISO Maria Luisa by Servizi a rete
CONVEGNO ECOMONDO 09/11-D'ALUISO Maria LuisaCONVEGNO ECOMONDO 09/11-D'ALUISO Maria Luisa
CONVEGNO ECOMONDO 09/11-D'ALUISO Maria Luisa
Servizi a rete59 views
Progettazione ed installazione impianti d'antenna by Massimo Talia
Progettazione ed installazione impianti d'antenna Progettazione ed installazione impianti d'antenna
Progettazione ed installazione impianti d'antenna
Massimo Talia5 views
CONVEGNO ECOMONDO 09/11-BERTANI Tommaso by Servizi a rete
CONVEGNO ECOMONDO 09/11-BERTANI TommasoCONVEGNO ECOMONDO 09/11-BERTANI Tommaso
CONVEGNO ECOMONDO 09/11-BERTANI Tommaso
Servizi a rete60 views
CONVEGNO ECOMONDO 09/11-QUAZZO Armando by Servizi a rete
CONVEGNO ECOMONDO 09/11-QUAZZO ArmandoCONVEGNO ECOMONDO 09/11-QUAZZO Armando
CONVEGNO ECOMONDO 09/11-QUAZZO Armando
Servizi a rete62 views
CONVEGNO ECOMONDO 09/11-SCIBILIA Gerardo by Servizi a rete
CONVEGNO ECOMONDO 09/11-SCIBILIA GerardoCONVEGNO ECOMONDO 09/11-SCIBILIA Gerardo
CONVEGNO ECOMONDO 09/11-SCIBILIA Gerardo
Servizi a rete56 views
CONVEGNO ECOMONDO 09/11-BARBONE Gaetano by Servizi a rete
CONVEGNO ECOMONDO 09/11-BARBONE GaetanoCONVEGNO ECOMONDO 09/11-BARBONE Gaetano
CONVEGNO ECOMONDO 09/11-BARBONE Gaetano
Servizi a rete63 views
CONVEGNO ECOMONDO 09/11--COLUCCI + DECOLLANZ by Servizi a rete
CONVEGNO ECOMONDO 09/11--COLUCCI + DECOLLANZCONVEGNO ECOMONDO 09/11--COLUCCI + DECOLLANZ
CONVEGNO ECOMONDO 09/11--COLUCCI + DECOLLANZ
Servizi a rete60 views
CONVEGNO ECOMONDO 09/11-MALVEZZI Simone by Servizi a rete
CONVEGNO ECOMONDO 09/11-MALVEZZI SimoneCONVEGNO ECOMONDO 09/11-MALVEZZI Simone
CONVEGNO ECOMONDO 09/11-MALVEZZI Simone
Servizi a rete73 views
CONVEGNO ECOMONDO 09/11-DELL'ANNA Fabrizio by Servizi a rete
CONVEGNO ECOMONDO 09/11-DELL'ANNA FabrizioCONVEGNO ECOMONDO 09/11-DELL'ANNA Fabrizio
CONVEGNO ECOMONDO 09/11-DELL'ANNA Fabrizio
Servizi a rete53 views

Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - Codemotion Roma 2018

  • 1. Una PA agile, funzionale e serverless… SI PUÒ FARE! Federico Feroldi / @cloudify • Danilo Spinelli / @gunzip Roma 2018 CC BY-NC-SA 3.0
  • 2. Agenda La genesi Come l’abbiamo fatto Presente e Futuro
  • 4. La visione della “Cittadinanza Digitale” Eliminare: raccomandate e lettere, code allo sportello, scadenze da ricordare, moduli da compilare, bollettini da pagare in Posta!(e tanto altro)
  • 7. I principi Codice Open Source Infrastruttura Cloud Metodologia Agile e Lean
  • 9. Le difficoltà “Secondo me…” “Serve una gara per…” “Cloud ? Eccolo !” “Quando sarà pronto ?”
  • 11. Trasparenza totale (scrivere e condividere!) Codice e Documentazione Discussioni aperte (Pull Request) Decisioni (Architecture Decision Records) Backlog (Pivotal Tracker)
  • 12. Automazione e tooling (gratis!) Codice / Code Review (GitHub) Build / Test (CircleCI) Backlog e Planning (Pivotal Tracker) Code Analysis (CodeClimate, Codacy, Snyk)
  • 13. Efficienza (meno codice = meno bug e alta velocity) Frameworks(Express, React Native) Codice tipizzato(TypeScript, Flow) Stile funzionale(fp-ts, io-ts, tslint-immutable) Best practices (TSLint, ESLint, DangerJS)
  • 14. PaaS (focus sulla business logic, non sull’infrastruttura) Azure Dati in Unione Europea Serverless Database/Message broker
  • 15. Remote-first (usiamo tutto l’aiuto che troviamo) Prendi l’iniziativa (Backlog→PR→Build→Merge) Feedback continui (CircleCI → Slack) Momenti di “sync” (Howdy, Hangouts) Memo collaborativi (Google Docs)
  • 18. Terraform Infrastructure as Code versioning e ambienti “riproducibili” Parziale il supporto per Azure resource "null_resource" "azurerm_cosmosdb_collections" { provisioner "local-exec" { command = … } }
  • 19. Notifiche e Preferenze: un’API per tutte le PA ! Auth & quota (API management) Persistenza (Cosmos DB) Integrazione (Storage Queues) Business logic (Functions / TypeScript)
  • 20. Azure Functions Triggers & Actions Una tecnologia in evoluzione // update message visibilityTimeout getDelaySecForRetries(numberOfRetries) .map(visibilityTimeoutSec => { queueService.updateMessage( queueName, ... visibilityTimeoutSec, () => … });
  • 21. Perchè Typescript Type system ⋍ Meno bug ! Tools & Refactor (Visual Studio Code) Feature di ES7 (async / await, spread operator, ...) indipendentemente dalla versione di NodeJS !
  • 22. Functional Typescript Ancora poco “functional”... function apply<[...ArgumentsT], ResultT>( fn: (...fnargs: ArgumentsT) => ResultT, args: ArgumentsT ): ResultT { // args becomes any[] // fn(...args) } apply((x: string, y: number) => ..., [“1”, 2])
  • 23. Functional Typescript ...nel frattempo Giulio Canti fp-ts https://github.com/gcanti/fp-ts
  • 24. Untyped Express controller Prima… async getProfile(req, res) { const fiscalCode = req.params.fiscal_code; if (!isValid(fiscalCode)) { return res.status(400) .json({ error: “invalid code” }); } const profile = await Service.getProfile(fiscalCode); res.status(200).json(profile); }
  • 25. Typed Express controller ...dopo async getProfile(fiscalCode: FiscalCode): Promise<Either< ResponseError<QueryError>, ResponseSuccess<Profile>>> => (await Model.getProfile(fiscalCode)) .map(ResponseSuccess) .mapLeft(ResponseError);
  • 26. Linting Imporre le “best practice” Immutabilità, type decl “pervasive”, ... Favorire uno stile coerente Ordine degli import, indentazione, naming, ...
  • 27. … ed efficientare l’onboarding // tslint:disable:no-any
  • 28. Deploy delle Azure Functions gulp:release Build & Test (tsc) Bundle (riduce drasticamente startup time !) Tag (push release tag) Push (git push origin master) Pull (tramite trigger automatico nelle Functions)
  • 29. (git) push the candle back ! Rollback
  • 31. Un po’ di metriche (9 mesi) ~170 User Stories ~300 Pull Requests ~900 Commits ~22.000 LoCs (80% TS, 20% JS)
  • 32. What’s next Lock-in Azure? (Docker, Kubernetes, Helm) Community? Quando sarà pronto?