Non sei connesso a internet.
Novità aziendali 14103

Come continuiamo a sviluppare il nostro software

Le sfide poste dalla crescita di un’azienda richiedono adeguamenti agili e intelligenti a tutti i livelli. Non è solo l'organizzazione a doversi adattare costantemente, ma anche l'architettura del software. In questo articolo puoi scoprire di cosa ci stiamo occupando attualmente e quali temi stiamo affrontando.

È passato molto, troppo tempo dall’ultima volta che ho dato un’occhiata alle attività di sviluppo di Digitec Galaxus. Se ci leggi spesso, forse ricordi questo articolo:

TeamBehindScreen21.jpeg
Novità aziendali
Oliver Herren

Oliver Herren

Chief Information Officer

Profilo utente
  • 45109

Come sviluppiamo il nostro software?

Da allora, il reparto sviluppo si è ampliato da cinque a dodici team di scrum. Questo comporta una serie di problemi che devono essere affrontati con attenzione. È così che siamo arrivati alle molteplici sfide di oggi, sfide che probabilmente non diminuiranno nei prossimi anni.

Per via del rapido sviluppo del reparto sviluppo, si è sviluppata la necessità di sviluppare ulteriormente lo sviluppo a causa della lentezza nella crescita dello sviluppo. (chiarissimo, no?)

Le sfide

  • Crescita da 5 a 12 team di scrum nell’ultimo anno
  • Ulteriore crescita del reparto sviluppo prevista per i prossimi anni
  • Molti nuovi collaboratori richiedono un know-how ben strutturato
  • Maggiori esigenze relativamente ai tempi di risposta dell'applicazione (Performance matters)
  • Garantire la scalabilità per un ulteriore aumento degli ordini e delle interazioni con gli utenti
  • Rendere la complessità trasparente attraverso moduli chiari (Bounded Contexts) e interfacce pulite
  • Spostare l'intera soluzione nel cloud

Essere in grado di gestire la complessità

Quando si tratta di complessità, le cose si fanno complicate. «Simple can be harder than complex: You have to work hard to get your thinking clean to make it simple», ha detto una volta Steve Jobs. Insomma: per semplificare i processi e i problemi, non solo è necessario possedere le conoscenze tecniche adeguate, ma anche conoscere i processi aziendali in modo approfondito. Se un sistema viene suddiviso in modo insensato, aumenta inutilmente la complessità e si riduce la possibilità di gestirlo. La modularizzazione è un’ottima soluzione, ma non è un rimedio universale a tutti i problemi: anche se vengono creati moduli utili, non viene ridotta la complessità generale, che invece viene semplicemente trasferita alle interfacce tra i sistemi. Idealmente devono esserci poche interfacce, che sono stabili quanto più possibile. In questo modo, un team può concentrarsi sul lavoro in un singolo modulo e non deve preoccuparsi del resto dell’applicazione.

La complessità può essere ridotta (in tedesco) solo se vengono ridotte anche le esigenze e le capacità del sistema. Quindi: l’obiettivo principale non deve essere quello di ridurre la complessità, ma di essere in grado di gestirla.

E come si fa?

La teoria:

  • Con il partizionamento: suddividendo l'intero sistema in diversi sottosistemi e facendoli comunicare tra loro attraverso interfacce chiare e semplici quanto più possibile.
  • Stabilendo una gerarchia esplicita tra le parti del sistema, in modo da poter mantenere una visione d'insieme sullo stesso, evidenziare le dipendenze e le interfacce in modo chiaro e ben definito, e quindi stabilire in modo chiaro anche le priorità.
  • Rendendo autonome le singole parti del sistema, in modo che la maggior parte di esse possa concentrarsi esclusivamente sulle rispettive aree di competenza.

Cosa, secondo me, è importante:

  • Eliminare i processi e le fasi di lavoro non necessari che non aggiungono valore per il cliente. Questo è chiaramente il punto più importante, perché a volte tendiamo a complicare e burocratizzare le cose.
  • Focalizzarsi sul cliente. Ci sono vantaggi per il cliente? E questi vantaggi sono proporzionati?
  • Questo ci porta alla definizione delle priorità: per definire le priorità in modo utile e sensato dobbiamo implementare una strategia e una visione chiara.
  • Ognuno può aiutare esponendo i processi complicati e affrontando apertamente le questioni rilevanti, ma anche evitando di cercare ulteriori problemi insignificanti.
  • Definire gerarchie piatte e un approccio orientato al lavoro di squadra.
  • Le competenze dovrebbero essere distribuite il più possibile tra le squadre.
  • In caso di dubbio, dobbiamo essere in grado di prendere decisioni chiare, anche quando non tutti sono d'accordo. Altrimenti rischiamo di rimanere bloccati su un problema in eterno, mentre in realtà potrebbe essere risolto in molti modi diversi.
  • Bisogna essere costruttivi e ottimisti, perché i problemi esistono per essere risolti. E una volta che sono stati risolti, portano alla luce nuovi problemi. È così che gira la vita emozionante di un ingegnere ;-)

Come affrontiamo le sfide?

Ecco una breve panoramica di quanto è accaduto negli ultimi quindici mesi e di cosa abbiamo fatto per far crescere il nostro reparto sviluppo.

Specializzazione per settore

I team di scrum sono stati assegnati a un dominio, cioè a un reparto ben definito come la logistica, la gestione dei prodotti o il negozio online. Ogni team può così specializzarsi in questo settore e, sviluppando costantemente le conoscenze e i processi individuali, può trovare soluzioni sempre migliori e più eleganti. La sfera di competenza è solitamente rappresentata da un reparto. Il team sviluppo lavora il più possibile a stretto contatto con il cliente per scoprire come generare il massimo valore aggiunto in base alle possibilità attuali. Per noi è anche molto importante che una squadra sia stabile quanto più possibile; idealmente, un team funziona così bene che lavora in stato di flusso.

Team interdisciplinari

Un team non è più composto esclusivamente da sviluppatori di software, ma racchiude sempre un insieme di tutte le competenze richieste nel dominio o sottodominio. Ad esempio, in un team dedicato allo shop online devono lavorare anche gli Interaciton Designer e gli sviluppatori front-end. A seconda del contesto, è necessaria anche la presenza di un Requirement Engineer, un esperto di business intelligence o un System Engineer. L'obiettivo è ridurre il numero di interfacce e abbreviare i percorsi di comunicazione: il team dovrebbe essere in grado di lavorare in modo autonomo senza ostacoli e senza dipendere da altri settori.

Coaching di nuovi team

Per assicurarsi che i team siano stabili il più possibile e che la loro composizione non cambi in continuazione, la maggior parte di essi viene formata da nuovi dipendenti. Per facilitare una rapida acquisizione del know-how, vengono seguiti in modo professionale e metodico da un coach specializzato: uno sviluppatore di software che ha familiarità con il nostro ambiente li assiste per un certo periodo e si rende disponibile a rispondere alle loro domande. Dal punto di vista metodologico, un coach per il settore scrum e per quello dello sviluppo agile di software lavora con tutto il team.

Competenze e responsabilità individuali all'interno dei team

Affinché ogni singolo dipendente possa lavorare secondo uno spirito imprenditoriale, è necessario che le informazioni rilevanti siano liberamente accessibili a tutti. Che si tratti della nostra strategia, missione e visione o dei risultati dei sondaggi ai collaboratori, in pratica non disponiamo di informazioni che non siano consultabili da tutti i dipendenti. Ciò significa che tutti possono verificare se i loro progetti o compiti sono in linea con la strategia aziendale. È importante che tutti sappiano quale servizio vogliamo fornire al cliente. La nostra proposta di valore è pubblica e trasparente, in modo che ogni cliente possa misurare le nostre prestazioni rispetto alla nostra promessa.

Strategia del cloud

In base ai progressi tecnologici, crediamo che in futuro le aziende opereranno esclusivamente nel cloud. Già oggi capita che alcune funzionalità vengano rese disponibili prima, o addirittura esclusivamente, tramite questa soluzione. Se prendiamo in considerazione i miliardi di dollari investiti nelle varie piattaforme cloud, è un fenomeno che non potrà fare altro che accelerare. E per riuscire a cavalcare l’onda del cambiamento con successo, ci affidiamo a più fornitori. La flessibilità e l'innovazione che ci garantisce l’utilizzo del cloud sono fondamentali, ed è per questo che i nuovi servizi verranno sviluppati esclusivamente lì. Anche quando apportiamo modifiche a un settore, trasferiamo tutto su una piattaforma cloud ottimale. Attualmente, stiamo già svolgendo questo lavoro con le piattaforme Google Cloud, Microsoft Azure ed Elastic. A questo scopo, tutti i componenti applicativi che non sono stati ancora adattati continueranno a essere utilizzati in loco nel nostro Dual Datacenter. Più ibrido di così non si può. Questo spiega anche perché DevOps è diventato molto più importante e perché in futuro lo sarà ancora di più. Perché nel cloud, l'infrastruttura diventa parte dell'applicazione.

Al momento, non mi vengono in mente altri cambiamenti. E comunque ormai sicuramente ho scritto troppo, perciò termino qui questo mio contributo e mi impegno ad accorciare l'intervallo tra un articolo e l’altro! In questo modo spero anche di ricordarmi bene tutto ciò che modifichiamo e aggiorniamo.

Per saperne di più sullo sviluppo del nostro software

baixe-aqui-do-livro-ldquo21.jpeg
Novità aziendali
Tim Csitkovics

Tim Csitkovics

Junior Software Engineer

Profilo utente
  • 732

Warum die Macht nicht immer mit dir sein sollte

Ti piacerebbe sviluppare con noi?

Vorremmo lavorare ancora più velocemente; se sei in linea con la nostra visione, qui trovi diverse offerte di lavoro attualmente aperte per entrare a far parte del nostro reparto sviluppo. Ti aspettiamo per affrontare tante altre sfide nell’ambito della crescita.

User
Cool: costruire ponti tra il mondo reale e il mondo dell'informazione. Non cool: dover prendere l’auto per andare a fare shopping. La mia vita è "online" e l'era dell'informazione è esattamente dove mi sento a casa.

14 Commenti

User Athrandir

Ein Kompliment an alle Entwickler, Architekten und Designer bei Digitec. Die Nutzung Eurer Plattform macht nicht nur Spass sondern ist auch Inspiration. Man merkt als Nutzer sofort, dass hier Hingabe dahinter steckt - deshalb auch der Vorsprung gegenüber den Plattformen globaler Mitbewerber.

11.10.2017
Segnala abuso

Devi essere connesso al tuo account per segnalare un abuso.

Effettua il login per poter rispondere al commento.

User juhahartmann

12 Teams mit Scrum? Vielleicht bald Zeit auf SAFe umzusteigen ;)

09.10.2017
Segnala abuso

Devi essere connesso al tuo account per segnalare un abuso.

User raphaelrenaud

Ist schon Realität: digitec.ch/de/page/wie-entw...

09.10.2017
Segnala abuso

Devi essere connesso al tuo account per segnalare un abuso.

Effettua il login per poter rispondere al commento.

User reinhold86

Wie gross sind denn eure Scrum Teams?

09.10.2017
Segnala abuso

Devi essere connesso al tuo account per segnalare un abuso.

User Oliver Herren

Die sind zwischen fünf und neun Personen gross.

10.10.2017
Segnala abuso

Devi essere connesso al tuo account per segnalare un abuso.

Effettua il login per poter rispondere al commento.

User Krono

Echt cool!
Die mobile Seite von digitec Seite solltet ihr aber bald mal ziemlich stark verbessern. Mühsam zum benutzen...

17.10.2017
Segnala abuso

Devi essere connesso al tuo account per segnalare un abuso.

Effettua il login per poter rispondere al commento.

User ianazch90

What technologies are you using (programming language(s), framework,...)?

03.11.2017
Segnala abuso

Devi essere connesso al tuo account per segnalare un abuso.

User witold.baryluk

Looking at job offerings it looks to be mostly C#, ASP.NET, MS SQL. I have no idea how well it scales, but is probably costly in the long run. And moving this to cloud is probably limited. For the frontend, I have no idea. Would be nice to have so ideas about architecture, caches, load balancing, etc. (I see static content is mostly stored in Akamai caches).

14.11.2017
Segnala abuso

Devi essere connesso al tuo account per segnalare un abuso.

User Tobias Käppeli

Like Witold.baryluk said. We mostly use C# ASP.NET and MSSQL.
Other technologies we use are:
- Javascript. The frontend team wants to go an isomorphic approach in the future.
- .NET Core for our newer projects
- Elasticsearch, Logstash, Kibana for search, filtering and as key/value store.
- MSSQL for all relational databases and as Datawarehouse
- Azure Service Bus is coming soon as new messaging service
- Application Insights for Logging
- Akamai as CDN
- BigQuery, DataProc, Datastore, Dataflow in the Google Cloud

For Development we use:
- Visual Studio 2017 or Rider
- Visual Studio Team Services for Git Repositories and Continuous Integration
- NDepend and SonarQube for code analysis

@Witold.baryluk the move to the cloud is getting a lot easier when we migrate more of our code to .NET Core and start using Containers for those workloads. The recently released version 2.0 of the .NET Standard should help here.

17.11.2017
Segnala abuso

Devi essere connesso al tuo account per segnalare un abuso.

Effettua il login per poter rispondere al commento.

User zilti

"Die Komplexität kann nur reduziert werden, wenn auch die Anforderungen und die Fähigkeiten des Systems reduziert werden." - Ein Trugschluss! Komplexität zeugt von unpassenden Herangehensweisen, nicht von Systemanforderungen.

11.10.2017
Segnala abuso

Devi essere connesso al tuo account per segnalare un abuso.

User daniel.tobler

Ich unterscheide zwischen Komplexität, die Anforderungen geschuldet ist und "Accidential Complexity". Für erstere gilt das Zitat im Titel. Die zweite Art der Komplexität, die ich auch häufig antreffe stammt von falschen oder falsch angewandten Technologien, Unwissen, falschen Wissen, von "gut gemeint" und Realisierung von Anforderungen, welche gar nie Anforderungen waren oder dessen Funktion dann doch nie gebraucht wurde.

22.10.2017
Segnala abuso

Devi essere connesso al tuo account per segnalare un abuso.

User jacksuisse

Sprachlich sollte man differenzieren zwischen komplex und kompliziert. Dann gibt es da auch keine Missverständnisse. Für den richtigen Umgang mit Letzterem braucht man vor allem Kompetenz.

14.11.2017
Segnala abuso

Devi essere connesso al tuo account per segnalare un abuso.

User rg

Die Unterscheidung zwischen kompliziert und komplex ist uns wohl bewusst. Sowie in einem System eine gewissen Anzahl von Menschen stecken, ist es komplex. Ein Online-Shop im E-Commerce ist korrekt formuliert ein soziotechnisches Ökosystem. Es interagiert mit den Benutzern in vielfacher Weise und spricht den Menschen auch emotional an. Daher ist dieses System an sich schon komplex. Kompliziert ist zum Beispiel die Aufbereitung der Bestellungen in Versandeinheiten. Dies ist ein Algorithmus.

17.11.2017
Segnala abuso

Devi essere connesso al tuo account per segnalare un abuso.

Effettua il login per poter rispondere al commento.

User XXXXXX

"Die Softwarebranche ist binär. Du bist dir Eins oder die Null. Lebendig oder Tod" - Start Ups

10.10.2017
Segnala abuso

Devi essere connesso al tuo account per segnalare un abuso.

Effettua il login per poter rispondere al commento.


Per favore, effettua il login.

Devi effettuare il login per scrivere un nuovo commento.

Corporate logo