All Posts in XPeppers

Aprile 21, 2020 - Commenti disabilitati su Perché è importante uno sviluppo iterativo e incrementale anche in una libreria OpenSource?

Perché è importante uno sviluppo iterativo e incrementale anche in una libreria OpenSource?

Questa è la nostra esperienza sulla realizzazione di una libreria OpenSource, di come lo sviluppo iterativo, incrementale si applichi non solo a progetti "commerciali" ma anche allo sviluppo open source, in particolare a quello guidato dalle esigenze e dal feedback.

Questa è la storia di Daikon

a dead simple and minimal framework for creating web applications in Kotlin with minimal effort

Una libreria utiizzata in molti progetti del nostro team.

La Nascita

Tutto è nato dal team in cui lavoriamo: il Team Vega e dal nostro coinvolgimento su progetti riguardanti lo sviluppo di applicazioni web in Kotlin.

Siamo stati per molto tempo dei fan di SparkJava per la sua semplicità e il suo DSL molto intuitivo.

Un'applicazione scritta in Spark è anche abbastanza semplice da testare e da manutenere, ma ci trovavamo spesso nelle condizioni di non poter usare SparkJava anche per i test.

In particolare, come spesso accade, abbiamo a che fare con servizi esterni (autenticazione, API varie, etc...), quindi nei test E2E ci piace (ove non sono disponibili i servizi veri) usare delle implementazioni che simulano il comportamento reale. Per fare questo solitamente creiamo dei test che lanciano delle API HTTP programmabili con validazioni e risposte realistiche.

Con SparkJava non possiamo lanciare più di un server HTTP nella stessa applicazione, questo perché dietro le quinte lavora con oggetti statici.

Sappiamo però che esistono librerie per soddisfare questa necessità ad esempio WireMock, ma non ci siamo mai trovati troppo bene ed in più ci forzano a configurare API HTTP in due modi diversi:
1. la libreria per il codice di produzione
2. la libreria per il codice di test.

Questo è stato uno dei motivi che hanno dato il via allo sviluppo di Daikon: avere un unico modo per lanciare più applicazioni che usano HTTP nella stessa suite di test.

In più volevamo anche qualcosa che fosse:
- rapido a partire e a servire richieste, dato che ultimamente stiamo lavorando parecchio su container docker che per loro natura sono volatili e necessitano di startup veloci.
- senza magia, ovvero la possibilità di capire facilmente come utilizzare la libreria senza magie/convenzioni che obblighino gli utilizzatori a fare mille ricerche su StackOverflow. (es: SpringBoot)

L'Evoluzione

Cosa sta dietro al concetto di iterativo-incrementale in pratica?

L'idea parte dalla necessità di trovare un modo per validare il prima possibile quello che stiamo sviluppando e capire se questo porta valore.

Per andare in questa direzione dobbiamo avere sempre qualcosa di funzionante e pronto per essere utilizzato anche se con funzionalità ridotte, grezze e migliorabili.

Non solo, gli incrementi e le raffinazioni devono essere guidate dal feedback e motivate da reali esigenze, senza speculare su quello che potrà essere o potrà avvenire nel futuro.

Oramai è qualcosa che noi in Claranet Italia diamo per scontato nella realizzazione dei progetti, ma non sempre è un concetto che viene applicato da chi sviluppa, in modo particolare nel mondo OpenSource.

A volte perché si sviluppa pensando a utilizzatori immaginari (non reali), a volte perché ci si fa prendere da manie di grandezza con il risultato di complicare il codice provando a renderlo più estensibile/configurabile/astratto, salvo poi ritrovarsi tra le mani un codice più complesso e difficile da manutenere senza una reale necessità.

In Daikon tutto (o quasi) è stato guidato dal feedback e dalla necessità.

Le prime versioni erano molto scarne: si faceva partire un' applicazione web con pochi metodi HTTP supportati, solo GET, POST e poco altro.

Man mano che usavamo Daikon nei nostri progetti, ci rendevamo conto che mancavano delle funzionalità. Quindi cercavamo di utilizzare queste reali necessità come spinta alla crescita di Daikon invece che svilupparle all'interno dei singoli progetti.

Siccome non siamo soli nell'universo, anche i feedback di colleghi, clienti e collaboratori sono stati importantissimi per capire quali funzionalità aggiungere o affinare.

Nonostante avessimo testato l'applicazione con scrupolo e il suo design sia stato fatto in TDD, niente è esente da bug. Questi feedback, quindi, ci hanno aiutato molto a trovarne alcuni (pochi per fortuna), verificarli con dei test e correggerli.

Man mano che Daikon veniva usato ci sono stati segnalati alcuni miglioramenti che avrebbero potuto semplificare il suo utilizzo e così, basandoci su necessità, feedback e uso quotidiano, abbiamo fatto la sua roadmap, fino a renderlo una libreria stabile e usata in diversi progetti in produzione.

I Traguardi Raggiunti

Uno degli obiettivi che ci eravamo prefissati era di tenere la libreria il più snella possibile. Per questo motivo abbiamo sempre cercato di evitare l'aggiunta di dipendenze. Quando qualcosa si rendeva necessario (es: parsing delle richieste e risposte in JSON) creavamo delle estensioni per Daikon che a tutti gli effetti erano progetti separati.

In questo modo l'utilizzatore ha a disposizione il set minimo di funzionalità che gli servono ed eventualmente aggiunge le estensioni alla sue dipendenze per le altre funzionalità.

Per quanto riguarda le estensioni, ci è venuto in soccorso Kotlin che, grazie alle Extension Functions, ci ha permesso di trovare un modo elegante, leggero ed espressivo per estendere il core di Daikon.

Sono nate così diverse estensioni:
* Daikon Freemarker
* Daikon Gson
* Daikon Jackson XML
* Daikon Eureka
* Daikon Prometheus

Dopo qualche tempo abbiamo iniziato a gestire anche alcuni servizi Serverless, quindi abbiamo deciso di estrarre l'intero routing nel CORE di Daikon in modo che fosse flessibile ed utilizzabile sia come server HTTP (usando Jetty) sia in Lambda che semplifica la gestione di applicazioni serverless.

Quindi è nato un altro interessante progettino: Daikon Lambda che ha la stessa interfaccia e le stesse funzionalità di base di Daikon.

Abbiamo poi deciso di estendere il concetto di semplicità e minimalismo anche al client HTTP. Così è nato anche Topinambur.

Collaborazione ed entusiasmo

Una cosa che ci è piaciuta moltissimo è stato il fatto che il Team Vega non fosse solo in questa avventura. Ai nostri colleghi è piaciuto il progetto e si sono adoperati per darci una mano a realizzare qualcosa che mancava o a migliorare quanto avevamo fatto. Ad esempio Daikon Prometheus è nato dall'esperienza in quell'ambito di un nostro collega che ha visto l'opportunità di estendere la nostra libreria con quanto conosceva.

I clienti, inoltre, si sono dimostrati da subito entusiasti del progetto, sia perché avevano a disposizione qualcosa di funzionante e semplice integrato nei loro progetti, sia perché lo hanno potuto integrare in altri loro sistemi senza difficoltà e molto velocemente. Senza contare il fatto che lo sviluppo di Daikon non aveva intaccato (se non positivamente ) la delivery del progetto.

Feedback

Daikon è un progetto in continua crescita che si evolverà ulteriormente grazie ai feedback che riceveremo. Potete contribuire in vari modi:
* usatelo e diteci come vi trovate, cosa vorreste avere in più o cosa vorreste migliorare;
* diventate contributor del progetto;
* mettete un like a questo post e una stellina al progetto su GitHub.

PS: vi siete chiesti come mai le librerie hanno nomi di vegetali? Basta nomi di animali, finalmente una libreria vegetariana!

Marzo 4, 2019 - Commenti disabilitati su Preparati a diventare un AWS Specialist in Big Data

Preparati a diventare un AWS Specialist in Big Data

L'esame di certificazione AWS Big Data Specialty è un esame di alto livello che richiede al candidato una eccellente conoscenza non solo dei servizi AWS ma anche delle tecnologie Big Data.

Ottenere la certificazione AWS Big Data Specialty ti permette di imparare nuove skills e portarti ad un avanzamento di carriera come professionista nel campo dei Big Data e Analytics.

L’esame è rivolto a persone che operano analisi complesse di Big Data e valida l’abilità di:
- implementare i servizi core di AWS Big Data con le best practices architetturali;
- sfruttare e automatizzare strumenti di data analysis.

Il formato dell’esame è quello solito, si può prenotare una sessione direttamente dal portale di training AWS e sostenere l’esame con domande a risposta multipla in un tempo massimo di 3 ore. Il costo di registrazione all’esame di certificazione è di $ 300. Le domande d'esame sono tipicamente riferite a scenari pratici e reali di utilizzo delle tecnologie Big Data.

Nel percorso di studio consigliato da Amazon c’è il corso Big Data on AWS che offriamo regolarmente on-site e in classi pubbliche. Ulteriori materiali utili per prepararsi sono i whitepapers, la documentazione, il canale Youtube AWS re:Invent e la piattaforma di training ufficiale AWS.

Prima dell’esame ti consigliamo di visualizzare il blueprint dell’esame disponibile qui. In questo documento sono elencati i prerequisiti necessari al sostenimento dell'esame.

Il nostro trainer Gianluigi Mucciolo a proposito della certificazione: "Per il superamento dell'esame il corso è fondamentale, e sono necessari almeno 6 mesi di utilizzo di AWS per conoscere al meglio gli aspetti più particolari dei servizi big data."

Cosa imparerai nel nostro corso:

- Amazon Kinesis Firehose and Kinesis Stream;
- Amazon S3;
- Amazon DynamoDB;
- Amazon Quicksight;
- Amazon Redshift;
- AWS IoT;
- Amazon Machine Learning;
- Security: IAM, AWS KMS, AWS CloudHSM;
- Disaster Recovery: Soluzioni per Backup e Restore di dati in altre regioni AWS.
- Amazon Data Pipeline.

Altri argomento oggetto, in misura limitata, del corso sono:

- Amazon VPC.
- Elastic Load Balancer e Auto Scaling.
- Amazon SQS e Amazon SNS.

La certificazione ti da un valore aggiunto, ormai ci sono tantissime persone che si spacciano per "big data specialist" ma pochi di questi sono veramente competenti in materia, con questa certificazione puoi effettivamente dire di saperci mettere le mani."

I nostri trainer hanno già sostenuto l’esame di certificazione Big Data e sono a disposizione per suggerimenti e indicazioni per raggiungere l’obiettivo.

Hai già sostenuto l'esame AWS Big Data Specialty? Candidati e Lavora in XPeppers come Cloud Engineer oppure consulta la nostra offerta formativa.

Ottobre 1, 2018 - Commenti disabilitati su XPeppers entra a far parte del gruppo Claranet

XPeppers entra a far parte del gruppo Claranet

XPeppers entra a far parte del gruppo Claranet portando una forte cultura Agile e DevOps all’interno della multinazionale.

Claranet, leader europeo nei servizi di hosting e di gestione delle applicazioni critiche, estende la propria offerta di servizi con competenze di DevOps e di metodologie e sviluppo Agile grazie alla fusione con XPeppers. Espande inoltre la propria offerta Amazon Web Services (AWS) e conferma la sua posizione di leader nel mercato europeo del cloud outsourcing, rafforzando le competenze per supportare ancora meglio applicazioni complesse nel Cloud.

XPeppers è una delle aziende leader nel mercato italiano di sviluppo software e Cloud che utilizza le metodologie Agili, avvalendosi anche di framework come Scrum e Kanban, per migliorare la gestione dei processi aziendali e lo sviluppo di prodotti software altamente affidabili e manutenibili.

Adotta e promuove inoltre la cultura e le pratiche di eXtreme Programming per aiutare le aziende a ridurre il tempo tra l’idea e la produzione oltre ad aumentare la qualità del software.

XPeppers vanta inoltre una profonda conoscenza dei principi e dei valori, nonché delle pratiche tecniche e metodologiche connesse alla cultura DevOps e ai cosiddetti metodi di sviluppo Agili, attraverso i quali guida i propri clienti verso la trasformazione digitale.

«Essere parte del Gruppo Claranet creerà nuove importanti opportunità per i nostri clienti, partner e dipendenti - commentano soddisfatti Mario Lanzillotta e Anna Tocci, i due fondatori di XPeppers -. Tutto il nostro ecosistema potrà infatti beneficiare delle operazioni paneuropee di Claranet, della sua base finanziaria e di un’offerta di servizi mai così ampia e di valore»

In questo modo XPeppers è in grado di affiancare i clienti in tutto il ciclo di sviluppo, dal miglioramento dei processi aziendali alla realizzazione del prodotto fino alla gestione dell’applicazione su server on-premise o su cloud.

XPeppers ha un fatturato annuo di circa 4 milioni di euro e tra i suoi clienti annovera, tra gli altri, Condé Nast e Mercury Payments.

«L’ingresso di XPeppers nel gruppo Claranet era inevitabile. In qualità di specialista AWS, XPeppers incarna un partner ideale e consente a Claranet di perfezionare la sua capacità di portare tutti i benefici di AWS ai clienti europei. Attraverso AWS e DevOps XPeppers completa in maniera ideale il nostro portafoglio e la nostra offerta. I nostri clienti ora potranno beneficiare di tutti i vantaggi del cloud pur mantenendo un unico punto di contatto sul territorio e a livello locale» spiega Lucia Terranova, Deputy General Manager Claranet srl.

Febbraio 12, 2018 - Commenti disabilitati su Condé Nast Genius on AWS

Condé Nast Genius on AWS

In questo episodio di This is My Architecture, il format AWS in cui vengono presentate architetture cloud innovative, Marco Viganò CTO digital di Condé Nast ha mostrato la soluzione adottata per il progetto Genius.

Genius è il cervello dietro molti dei portali del gruppo Condé Nast, un motore di recommendation per gli oltre 30 milioni di visitatori.

Abbiamo collaborato con Condé Nast per la realizzazione di parte dell’infrastruttura. Il loro approccio da early adopter ci ha permesso di iniziare ad utilizzare i servizi di Rekognition poche ore dopo il loro rilascio al pubblico.
I nuovi servizi di machine learning di AWS vanno ad arricchire i contenuti presenti nel DAM interno con informazioni relative agli oggetti e le celebrity individuati nelle foto.

Con un’infrastruttura completamente serverless, i costi di elaborazione e manutenzione sono ridotti al minimo e i media taggati in maniera automatica sono diventati immediatamente abilitanti allo sviluppo di nuove funzionalità. Nello specifico, le informazioni relative alle celebrity presenti nella gallery vengono utilizzate in un modello di MXnet per migliorare la rilevanza dei contenuti suggeriti ai visitatori.

Citando il CEO di AWS, per la riuscita del progetto è fondamentale avere la possibilità di esplorare nuove soluzioni in maniera iterativa senza grandi investimenti anticipati che possano in qualche modo precludere la scelta di altre strade.

Settembre 21, 2017 - Commenti disabilitati su Come ottenere la certificazione AWS

Come ottenere la certificazione AWS

Gartner 2016 MQ hi-res graphic

Sul fatto che Amazon Web Services sia leader di mercato nel campo dei servizi di Cloud Computing non ci sono dubbi. Per questo motivo la certificazione AWS sta attirando sempre maggiore interesse da parte delle Aziende e dei professionisti IT. Le certificazioni AWS sono l'unico strumento in grado di certificare le competenze e le conoscenze tecniche necessarie per la progettazione e la distribuzione di servizi basati sull'infrastruttura di AWS.

Ottenere la certificazione consente di accrescere la propria visibilità e credibilità, sia quella del Solution Architect che quella dell'intera organizzazione.

XPeppers è Training Partner AWS per l'Italia e una delle domande che spesso ci viene posta è: come ottenere la certificazione AWS ? per questo motivo cerchiamo di descrivere, in questo post, il percorso di certificazione offerto da AWS, illustrando i benefici di ogni singola certificazione, nonché le varie risorse a disposizione del professionista che intende certificarsi.

certificazioni AWS 3

 

Le certificazioni disponibili si suddividono in tre categorie, quella dei Solutions Architect, quella dei Developer e quella dei SysOps Administrator. Ogni categoria ha poi due livelli di certificazione, un livello Associate e un livello Professional.

  • Solutions Architect: le certificazioni di questa categoria sono indicate per coloro che intendano dimostrare le loro capacità nel disegnare architetture IT complesse utilizzando i servizi di AWS. Con questa certificazioni il professionista può certificare la propria capacità a disegnare direttamente su AWS architetture scalabili, sicure e affidabili, così come la capacità di migrare applicazioni multi tier da una soluzione on-premisis ad una on-cloud.
  • Developer: le certificazioni della categoria developer sono pensate per gli sviluppatori che intendano provare la loro capacità a interagire con le API di AWS utilizzando i diversi SDK messi a disposizione. In questa certificazioni si affrontano anche temi come "Code-level application security" (ruoli e utenze IAM, crittografia, etc.)
  • SysOps Administrator: questa categoria di certificazioni è particolarmente indicata per quei professionisti che intendano validare le loro competenze nel deploy, management e operation di servizi su cloud AW.

Il livello associate è il livello base delle certificazioni AWS, mentre il livello Professional è il livello più alto, almeno per il momento. Il questionario, a scelta multipla, relativo alle certificazioni di livello Associate è composto da 80 domande da svolgere in 90 minuti (qui un esempio), mentre il questionario del livello Professional, sempre a scelta multipla, è composto da 150 domande da completare in 180 minuti (qui un esempio). In tutti i casi il questionario è rigorosamente in lingua inglese o giapponese. A mio avviso la difficoltà più grossa, sia per il caso Associate che Professional, consiste nel fatto che oltre ad una buona dose di studio è necessaria una buona carica di esperienza e di Use Case affrontati. Infatti molte delle domande hanno come obiettivo quello di testare la capacità del professionista di utilizzare al meglio i servizi di AWS per risolvere un problema, facendo attenzione al fatto di saper disaccoppiare il più possibile le componenti in modo da aumentare la scalabilità e l'affidabilità della piattaforma. Come prerequisito inutile dire che una buona conoscenza di Networking e SOA aiuta nell'affrontare le varie domande.

Amazon mette a disposizione, sul proprio sito web, vari Labs, Quiz e Videocorsi che aiutano a prepararsi per la certificazione, ma il modo migliore per raggiungere la preparazione necessaria a sostenere un esame è quello di rivolgersi a uno dei tanti Trainer Partner presenti in tutto il mondo. I nostri corsi sono strutturati per permettere di affrontare tranquillamente una sessione di esame e i nostri docenti sono altamente qualificati avendo seguito un percorso di formazione direttamente presso i Training Center di Amazon Web Services. A seguire una tabella che per ogni certificazione suggerisce il relativo corso di formazione.

AWS Certification Exam Recommended AWS Training
AWS Certified Solutions Architect - Associate Architecting on AWS
AWS Certified Solutions Architect - Professional Advanced Architecting on AWS
AWS Certified Developer – Associate Developing on AWS
AWS Certified SysOps Administrator - Associate System Operations on AWS
AWS Certified DevOps Engineer - Professional DevOps Engineering on AWS

Veniamo ai costi. Il costo delle certificazioni varia da 150 Euro per la certificazione Associate a 300 Euro per la certificazione di livello Professional per tutte e tre le categorie. Inoltre partecipando ai corsi offerti dai Training Partner è spesso possibile ottener degli sconti. Gli esami di certificazione sono gestiti attraverso i Testing Center accreditati PSI, puoi prenotare una sessione direttamente dal portale training AWS.

Per qualsiasi informazione relativa ai corsi su Amazon Web Services non esitare a contattarci o visita l'elenco dei corsi e date disponibili: http://www.xpeppers.com/corsi-di-formazione-aws/

 

 

Settembre 15, 2017 - Commenti disabilitati su WeDoTDD: That’s How

WeDoTDD: That’s How

We recently did an interview on wedotdd.com on how we practice TDD. We decided to share our answers also in our blog, keep on reading if you want to know more!

 

Pairing in Peppers

 

History, what you do now, anything that summarises you or makes you interesting

An agile software developer at XPeppers has on average four years worth of experience in agile methodologies and has therefore grown a skillset that ranges from Clean Code and Refactoring to Test-Driven Development. Our software developers spend most of their work hours crafting customer ideas into great software.

All team members at XPeppers focus on their continuous improvement by investing time in studying new technologies and paradigms, doing katas and setting up coding dojos and presentations.

How did you learn TDD?

Each developer who joins our team has a study path to follow and has a mentor that helps them learn all the things we value most at XPeppers, among which you can obviously find TDD.

We know that TDD can be learnt only with practice and therefore we suggest katas and organise internal coding dojo during our study time to both improve our skills and share ideas. We try to teach our developers TDD "on the field" by pairing up developers who are less experienced on TDD with our XP coaches.

Our developers quickly get that TDD has a huge impact on the quality of the code they craft and easily become engaged with it. With time they understand that tests are not only a good way to avoid regressions but also a great tool to improve code design.

Tell us more about how your team pairs

At XPeppers we try to work on uniformed pairing stations that run similar software. In addition to this, we’ve noticed that large desks with big monitors encourage a more natural role and keyboard switch.

During our pair sessions we do talk a lot (hence we’re italian :P) and collaborate in order to make better design decisions and write better code in general.

Another practice we sometimes do is to pair (on site and remote) with a member of customer's team to enhance domain knowledge and share development best practices.

More Details About the Team Itself

At XPeppers every team is shaped according to customer needs and follows a project from the beginning until its delivery. Its members however, might be adjusted based on iterations and workload whereas the team ideally is cross-functional by nature. In this way we are able to enhance our focus on a specific product and share experiences throughout the team on a project based manner.

Every month we update our projects portfolio board to both assure everyone is allocated and to have a more long term view of ongoing projects.

What role does QA play on the team? How do they interact and work with the developers, Project Managers, etc.?

In some of our projects we have a QA person that tests the user stories when they are available on a production-like environment. Usually they try to replicate the requirements written in the back of the user story.

In some other projects we write an automated user acceptance test and we have a set of UAT that proves that our software works as intended (or expected) by the customer.

What kinds of products does the team support / develop?

We have huge experience on financial applications: we built both Mobile Payment Apps for iOS and Android and backend payment gateways for some of the biggest players in Italy.

We are confident with API development (lately we are working extensively with Serverless Architectures).

The XPeppers team has many other successful case studies with different customers among with you can find famous newspapers, networking companies and public institutions.

Can you describe in detail the team methodologies & workflow when developing software

Every XPeppers team has its Product Owner which talks directly with the customer to collect the requirements and other information such as some priorities including scope, time and quality. In this way the PO can better understand the real customer needs.

Then the team takes part to a KickOff meeting in order to update all the team members on projects goals, the expected results, the timing and the process.

The whole team defines the priority for each story to minimize the time spent to have a working software that can be tried and approved by the customer.

A story complexity is estimated in points based on the team experience or on a spike made before. The points are assigned following the Fibonacci scale starting from the simplest story.

We use a physical Kanban-board every time is possible. If a team is distributed we have a virtual board, even if we often reply it in a physical format for visualisation convenience.

We schedule meetings with the customer every 1 or 2 weeks to do a demo of the software and plan which stories to include in the following iteration.

In XPeppers we adopt many XP practices like Pair Programming, TDD, Code Review. We rely on the type of customer/project to choose the practices that help us to enhance the quality of the project, the development process and the relation with the customer.

Can you describe a typical / common setup of a developer machine?

A typical developer machine at XPeppers is a MacBook Pro 13' or a Dell XPS 13'. We have an IDE to work with languages like Java or C# and an editor like vim, emacs or atom.

We follow the Agile Manifesto, so we value people more than tools: this is why we try to decide as a team which configuration is best suited for a given project.

Can you explain in detail the different types of tests the team writes and in what contexts or at which levels (boundaries) of code?

We use to write different kind of tests based on the project context. Basically, using TDD, we happen to leave a trail of tests behind us, which are going to be the core of our test suite. We tend to cover the code strategically: the most important or risky is the feature, the more tests we write for that part of code. We also write integration tests, to verify the behaviour of the system (or one of its part) as a whole. Those tests are all written by developers as part of their day-to-day work. We then also write Acceptance Tests, which we use to discuss and clarify features with customers. Those are the main type of tests we write.

Just to give a concrete example, those are some numbers taken for two big-sized projects:

  • 2,500 Unit tests, running in about 30-40 seconds
  • 200 Integration tests, running in about 19-20 minutes
  • 250 Acceptance tests, written as Cucumber scenario tests, running in about 12-18 minutes against a production-like deployed application
  • 2,308 Unit tests, running in about 10-15 seconds
  • 556 Integration tests, running in about 6 minutes
  • 502 Acceptance tests, running in about 17 minutes against a production-like deployed application

Depending on the project context, we may decide to write also other type of tests, mainly smoke tests and stress tests.

What is the team's style / approach to TDD?

As a consulting company, we don't have a team style or specific approach to TDD. We'd like to see TDD as an effective practice to build working software. We try to choose the approach that best fit particular situation, team or product.

When we are working with an external team, like customers who are approaching TDD for the first time, we like to keep a smooth and very strict rhythm so that people can appreciate, learn and better understand the practice. From the other hand, we tend to shift to a faster and less strict approach when we are working with more experienced people or when the confidence about the domain is high we tend to go faster.

Explain how you refactor your tests (blue step in TDD)

We try to make a refactor step after each test pass and try to enhance code in order to embrace business changes needs or reduce technical debt.

When our application is hard to change, we know we should refactor our code.

If we cannot do it immediately (e.g. due to a short deadline) we create a card with TD (Technical Debt) label and we do it as soon as possible.

Are there any refactoring patterns or techniques that you apply to the production code?

There are different patterns that we employ everyday in order to improve the design of our production code, avoid duplication and express in a better way the intent of each component. Each person in our team has a different set of patterns in their toolbox but we try to use those that answer the four rules of simple design; anyhow most of the patterns we employ are taken from two books we warmly recommend: Refactoring by Martin Fowler and Refactoring to Patterns by Joshua Kerievsky.

How has TDD helped the team design better code?

TDD helps our teams in many ways. It allows us to see a new feature from the customer point of view.

In addition we can write more meaningful code for the business needs, which leads to have the code cleaner and more understandable for the entire team.

It permits to have a quick feedback and to not over-engineer the application, because we write only the code that is really needed.

How has TDD benefited your customers and client's projects?

Our customers feel a better quality in the software we deliver, because there are few bugs and we can fix them quickly.

The customer asks for new features with more confidence and trusts us. The software turns out to be more flexible and easier to extend.

What are some challenges the team has faced with TDD?

There are many challenges that we try to face when we practice TDD in our team, and these challenges are not only related to technical aspects but also to different approaches that come from our different experiences.

In some situations we discuss a lot about the first test we should write when developing a new feature: shall we start with this case or another? In other cases we have to think carefully on our TDD approach; of course we love outside-in TDD but sometimes when we are confident we embrace inside-out as well.

Another challenge for an experienced member of the team is to pass down some values to younger people: first of all we teach that tests are code and therefore is important to give them all the respect they deserve and polish them using refactoring techniques, DSL etc etc. Moreover tests are made to be read by other people (not always technician) and we must try to make them as much expressive as we can.

Please provide more details on your CI environment or CI environments of the clients you support

The continuous integration environment heavily reflects the project itself. Its complexity and automation degree tell us what kind of environment to spin-up in order to be more effective and productive on a daily basis. We’ve used different tools in the past including Jenkins, GitlabCI, Travis, CodeShip, CircleCI, DroneCI for backend and frontend development. Bitrise and Buddybuild for mobile applications. At XPeppers, we prefer a streamlined continuous deployment or delivery approach to push artefacts towards production.

Please provide more details on your apprenticeship program, internships or on-boarding process

At XPeppers we provide either apprenticeship and internships programs. Both have a strong focus on learning the core principles, values and practices of our way of working.  Apprentices are given the chance to deepen their understanding of eXtreme Programming, Clean Code and TDD by following an ad hoc tailored version of our study path with the support from the entire team.

On-boarding is another very important aspect that helps newcomers to become first-class XPeppers citizens. The on-boarding process is made up of activities other than simply studying, ranging from learning our culture, presenting their progress to others and joining all daily team activities.

How does the team continually learn and improve their TDD and general code design skills?

Each team member at XPeppers has an ad hoc study path to improve both soft and technical skills continuously. We spend a certain amount of time each day to follow this path and to share know how with other team members by making presentations, pair programming sessions and other team activities that help us grow.

Do you talk about TDD with candidates during interviews?

During our interviews at XPeppers we usually ask the candidate whether or not he/she has familiarity with practices such as TDD. If so, we ask further technical information about the subject and adopt TDD during subsequent exercises and pair programming sessions. If it turns out that the candidate has never done nor seen test driven development before, we try to understand how willing the candidate is to learn and improve his/her knowledge of our practices.

Settembre 7, 2017 - Commenti disabilitati su How to integrate AWS CodeCommit with BuddyBuild: a solution for our Continuous Delivery

How to integrate AWS CodeCommit with BuddyBuild: a solution for our Continuous Delivery

AWS CodeCommit - BuddyBuild integrationUsing a Continuous Delivery solution in a software development project is really useful because it brings a great saving of time and costs while providing fast feedbacks on the build.

In our opinion, a Mobile project needs a Continuous Delivery because it enables automation of all time-consuming operations such as tests, builds and releases.

These advantages are even more obvious if applied to a team similar to ours, that follows an iterative-incremental approach to the development cycle with frequent releases.

While developing a mobile app for a customer working on payment services we found ourselves using BuddyBuild as Continuous Delivery service and AWS CodeCommit as Git repository.

Currently BuddyBuild offers a full integration with GitHub, BitBucket and GitLab. It is also possible to use other Git services through SSH protocol, but this approach does not support the trigger of an automatic build after a Git push.

Therefore we had to find an alternative solution in order to have a complete and automated Continuous Delivery cycle.

First Approach

Initially we had to configure a local script shared throughout team members to automatically trigger the build at every push towards CodeCommit. In this way we use a "git post-push" hook to call the BuddyBuild API.

This approach gave us some trouble over time.

In particular we faced problems with new team members which had to configure the script on their own machine. Furthermore every change to the script had to be propagated on every already configured environment.

New Approach with AWS Lambda

AWS LambdaRecently, AWS introduced the opportunity to trigger an AWS Lambda from a CodeCommit event such as a push, branch creation, etc.

Therefore we decided to develop a small project to integrate CodeCommit and BuddyBuild. We created a Lambda which is triggered by CodeCommit at every push and uses the BuddyBuild API to run a new build.

DockerWe create a new project using Docker as Development Environment. This permits to have an environment as similar as possible to the container inside which AWS Lambda runs the code. Other reasons we like working with Docker are that we can replicate through different team members the same Environment and we can keep our host machines clean.

We use Serverless Framework to develop and deploy the Lambda project but at time of writing there is no support to the CodeCommit event, so we have to manually configure the trigger from the AWS Console.

The function itself is very simple. It's an HTTP request to BuddyBuild API that needs only APP_ID and USER_TOKEN to be configured.

Here a piece of the Lambda source code:

request({
 headers: {'Authorization': `Bearer ${process.env.ACCESS_TOKEN}`},
 uri: `https://api.buddybuild.com/v1/apps/${process.env.APP_ID}/build`,
 method: 'POST'
} /*, [...] */ )

For security reason we get BuddyBuild tokens and AWS credentials from environment variables, in this way everyone can configure these variables with an .env file without pushing them to the repository.

We chose to open source the code which is now publicly available on GitHub: CodeCommit - BuddyBuild Integration: all feedbacks are welcome 🙂

Agosto 22, 2017 - Commenti disabilitati su Cosa ascoltiamo in XPeppers

Cosa ascoltiamo in XPeppers

I podcast sono un ottimo modo per restare aggiornati sulle tecnologie e metodologie che utilizziamo quotidianamente e per questo ne ascoltiamo in abbondanza. Nelle nostre playlist ci sono episodi di svariati podcast:

Software Engineer Radio - una risorsa di apprendimento per tutti i software developer. Gli argomenti trattati sono molto variegati e trattano molti aspetti del nostro lavoro. Dal punto di vista della qualità delle interviste è senza dubbio il numero uno.

Scrum Master Toolbox Podcast - il miglior podcast sui metodi agili, ottimo soprattutto se vuoi migliorare come scrum master ed agile coach. I nostri Pietro di Bello e Paolo D'incau sono stati ospiti dell'host Vasco Duarte.

Altri podcast sul tema agile che ci sentiamo di consigliare: Agile CoffeeThe Happy Melly PodcastLean Change ManagementAgile in 3 MinutesThe McCarthy ShowThe Agile RevolutionITkanban's podcast
Sul tema DevOps invece The Ship Show e CenturyLink Labs Podcast sono i nostri preferiti.

The Ruby Rogues - a panel discussion about topics relating to programming, careers, community, and Ruby. They release a conversation with notable programmers and Rubyists each week to help programmers advance in their careers and skills.

JavaScript Jabber - si parla di sviluppo sia client che server side, di pratiche di programmazione ed environment legati a questo linguaggio. Sono frequenti le interviste con i maintainer delle più famose librerie e framework per avere un aggiornamento direttamente alla fonte.

Tra gli altri, nei nostri Overcast potete trovare:

  • vJug - audio recordings from virtualjug.com
  • The Changelog - a weekly conversation that gets to the heart of open source technologies and the people who create them.
  • Being The Worst - audio apprenticeships for the aspiring software craftsman. Currently exploring DDD, Event Sourcing, CQRS, distributed systems, cross-platform, cross-cloud, & cross-language software delivery.
  • Under the Radar - from development and design to marketing and support, Under the Radar is all about independent app development.
  • SharedInstance - a podcast about iOS Development from three iOS Developers based in Cincinnati
  • Software Process and Measurement Cast - Interviews, essays, facts and tips about process improvement and measurement in the Information Technology arena
  • AWS Podcast - Simon Elisha & Jeff Barr discuss various aspects of the Amazon Web Services (AWS) offering. Each podcast include AWS news, tech tips, and interviews with startups, AWS partners, and AWS employees.
  • 21st Century Work Life - remote working, virtual teams and flexible working.
  • High Resolution - video podcast series with 25 masters of the design industry
  • Freakonomics Radio - each week, hear surprising conversations that explore the riddles of everyday life and the weird wrinkles of human nature—from cheating and crime to parenting and sports.

 

 

Aprile 26, 2017 - Commenti disabilitati su Container Conference in Chiasso

Container Conference in Chiasso

Due giornate dedicate ai temi del DevOps, la Containerizzazione delle applicazioni e lo sviluppo di architetture a Microservizi

L’ agenda per l’evento dei Containers a Chiasso (23-24 maggio) è stata appena annunciata e vi consigliamo di prendere subito i biglietti scontati.
Per iniziare avremo con noi Mattia Gandolfi di Google, che ci parlerà di Kubernetes il tool di riferimento per il deploy, scaling e gestione di applicazioni containerizzate.
Direttamente da Mesosphere DC/OS, Jörg Shad ci parlerà di come mantenere l’applicazione resiliente, nonostante errori di rete, aggiornamenti o bug.

Vedi l’agenda completa

Il giorno 23 Maggio è interamente dedicato ai workshop, tre opzioni super interessanti per capire come realizzare applicazioni sul cloud, containerizzarle con Docker o farle evolvere verso un’architettura a microservizi. CTO, developers e operations non possono perdersi questa opportunità di formazione. Scriveteci per sconti e biglietti di gruppo.

Prendi i biglietti

 

Marzo 15, 2017 - Commenti disabilitati su Incontro DevOps Italia – Si fa presto a dire Serverless

Incontro DevOps Italia – Si fa presto a dire Serverless

Ultimamente si sente molto parlare di architetture Serverless, un termine per certi versi ambiguo e legato a troppi diversi significati che secondo noi non esprime ciò che in realtà si vuole comunicare.

 

All'Incontro DevOps Italia Alessio Coser e Daniel Depaoli hanno tenuto una presentazione su questo tema iniziando con una breve introduzione a questa architettura chiamata anche Function as a Service (FaaS).

Applicando l'architettura FaaS in vari progetti abbiamo raccolto delle riflessioni su quali siano i vantaggi e le sfide che si devono affrontare nell'utilizzo di questa tecnologia.

Le slides della presentazione

 

Da queste esperienze abbiamo creato dei corsi per capire come implementare correttamente una architettura Serverless in modo da gestire le complessità e rendere i cambiamenti futuri più facili: vedi il programma.