SymfonyLive Berlin is the official Symfony conference in Germany - a two day conference with three tracks, plus two days full of workshops from experts in the community. See you in Berlin!
09:30 |
Advanced Symfony Security
Workshop by Marco Petersen in Workshops (8 hour) Ein Security-Layer ist aus vielen modernen Webanwendungen nicht mehr wegzudenken. Die Security-Komponente von Symfony erleichtert das Einrichten eigener Security-Logik und bietet Mechanismen, welche es dem Entwickler ermöglichen, selbst die komplexesten Anforderungen einfach und wartbar zu realisieren. In diesem Workshop nehmen wir die Komponente genauer unter die Lupe und befassen uns mit fortgeschrittenen Themen wie dem Guard-Authenticator, Security-Votern, sowie weiteren Mechanismen, um Authentifizierung und Authorisierung nach Bedarf anzupassen. Der Workshop richtet sich an alle Entwickler/innen, die bereits erste Schritte mit der Security-Komponente gemacht haben und ihr Verständnis vertiefen möchten. |
Knowing your state machines - The Symfony Workflow Component
Workshop by Tobias Nyholm in Workshops (8 hour) Web development is not just about delivering a response, it is also about writing good code. The state pattern will help you move complexity from being all over your code to one or more state machines. Tobias' workshop will introduce state machines, show you how to identify uses of them, and implement them in your Symfony application in an object-oriented manner using the Symfony Workflow component. |
|
Von der Idee zum Feature
Workshop by Stefan Priebsch in Workshops (8 hour) Fachanwender sind keine Software-Designer. Und Entwickler sind keine Fachexperten. Aber wo kommen dann eigentlich die Features her, die in der Entwicklung umgesetzt werden sollen? Und warum dauert das immer alles so lange und ist dann auch noch so teuer? Wir setzen in diesem Workshop vor der eigentlichen Programmierung an und versuchen, den Prozess von der Idee zu einem schließlich in Code umsetzbaren (?) Feature zu verstehen und zu verbessern. Zwischen Conway's Law und Akzeptanztests untersuchen wir unter anderem die Unterschiede zwischen iterativer und inkrementeller Entwicklung. Wir sehen uns verschiedene Arbeits- und Visualisierungstechniken an, die uns helfen, Features zukünftig effizienter zu spezifizieren und zu planen. Der Workshops vermittelt anhand von praxisnahen Fallbeispielen einen Einblick in verschiedene Werkzeuge und Methodenbausteine und ermuntert dazu, sich aus diesem Baukasten ein eigenes, der jeweiligen Situation angemessenes Vorgehensmodell zusammenzustellen. |
|
DDD practices applied to Doctrine 2 Projects
Workshop by Marco Pivetta in Workshops (8 hour) In this full day of hands-on coding we will approach development with Doctrine ORM from a tactical DDD perspective. We will start from a minimal specification, exploring yet-to-be-discovered business scenarios in a rich domain, how to plan features, how to isolate them into workable units, implement them in a framework-less environment and finally test them effectively. We'll freshen up some DB design done "domain-first", looking at the possible performance issues how to mitigate them on the long run and how to provide an optimal data model for both writes and reads without sacrificing valuable abstractions in the domain logic. At the end of the day, you will have a good overview of how to attack relational DB abstractions, when to optimise for business interactions, and how to optimise for read interactions. |
|
Symfony Best Practices
Workshop by Andreas Grzywatz in Workshops (8 hour) Wie baut man ein einfaches Symfony4-Projekt auf? Symfony ist für seine Flexibilität bekannt und wird für die verschiedensten Zwecke benutzt. Angefangen bei Microsites, über Enterprise-Anwendungen, die Millionen von Request beantworten, bis hin zur Basis von anderen Frameworks. Wir geben Tipps zum Aufbau von Standard-Anwendungen mit Symfony, die sich bei unserer Arbeit mit einer Vielzahl von Kundenprojekten in den letzten Jahren als sinnvoll herausgestellt haben. |
|
Symfony Messenger
Workshop by Samuel Roze in Workshops (8 hour) The Symfony Messenger component brings to Symfony the notion of message buses and (optional) asynchronous processing of these messages via queues such as RabbitMq. In this workshop, you will learn about (1) how to use the message bus pattern as a strategy to decouple your application, (2) configure the routing of your messages to handle them asynchronously and (3) discover the underlying notion of middleware in order to add your own logic to the buses. We'll then go into more details around (4) how Messenger applies in the CQRS context, (5) the specifics of the AMQP and Enqueue adapters for your asynchronous processing and (6) how to customise and write your own adapters. |
|
Advanced Application Testing
Workshop by Matthias Noback in Workshops (8 hour) Many web applications out there don't get the testing love they need. Some test suites only have unit tests; they run fast, but will never prove that features as a whole function correctly. Some test suites only have functional tests; they run very slowly, they often fail for no reason, but they can prove that all the wiring is correct too. There is a middle ground, which we'll be aiming to reach in this workshop. We take an existing application with only functional tests and "tease out" other types of tests. We thereby: - Increase the speed and predictability of the test suite as a whole - Reduce the need for functional tests - Set a standard for web application test suites, which you can apply at home (or at work) too All of this will be rooted in some pretty interesting software architecture theory (i.e. ports & adapters and layered architecture). The program: - System tests - Architecture: ports, adapters, layers - Integration tests - Unit tests - Acceptance tests - Test doubles and architectural boundaries - Spotting design issues with feedback from tests |
|
Symfony Forms im Detail
Workshop by Christopher Hertel in Workshops (8 hour) Formulare sind bei vielen Webseiten elementar und können sehr unterschiedlich ausgeprägt sein. Ein einfaches Formular ist mit der Form Komponente von Symfony schnell umgesetzt, aber wie sieht es mit komplexeren Anwendungsfällen aus? Wir beleuchten die Architektur der Komponente, an welchen Stellen wir - zusätzlich zu FormTypes - Erweiterungen machen können und welche Anwendungsfälle vielleicht nicht mit der Komponente umgesetzt werden sollten. Der Workshop richtet sich an Entwickler*innen, die bereits Erfahrung mit Symfony und der Form Komponente gemacht haben, aber ihr Verständnis vertiefen möchten und gehobene Anforderungen haben. Wir werden über den Tag viele praktische Aufgaben mit der aktuellsten Symfony Version lösen. |
|
Profiling Symfony & PHP apps
Workshop by Marc Weistroff, Christian Flothmann in Workshops (8 hour) It is difficult to improve what is not measurable! Profiling an application should always be the first step in trying to improve its performance. With this workshop, learn how to identify performance issues in your application and adopt the best application profiling tools in your daily development habits. This workshop will guide you through the use of PHP profiling tools such as Blackfire.io to help you identify performance leaks. |
|
Deployen, Skalieren und Monitoring von Symfony Anwendungen in Kubernetes
Workshop by Bastian Hofmann in Workshops (8 hour) Kubernetes ist eine sehr leistungsfähige Container Orchestration Plattform, die einem viele Vorteile beim Deployen, Ausführen und Skalieren von hoch verfügbaren Web-Anwendung bietet und einiges an manueller Arbeit abnimmt. In diesem Workshop lernt ihr wie Kubernetes funktioniert und man eine Symfony Anwendung innerhalb von Kubernetes aufsetzt, skaliert, monitort und in seine CI Pipelines integriert. |
|
REST Services in Symfony
Workshop by Andreas Hucks in Workshops (8 hour) Webservices werden mittlerweile in sehr vielen Bereichen der IT zur Integration unterschiedlicher Anwendungen verwendet. REST-Webservices spielen dabei eine besondere Rolle, da REST sich auf die Grundlagen von HTTP stützt, einfach verständlich ist und leicht in bestehende Anwendungen zu integrieren ist. In diesem Workshop bringen wir den Teilnehmern sowohl die theoretischen Grundlagen von REST, als auch die praktische Umsetzung mit Symfony näher. Mit praxisnahen Beispielen werden Themen wie Serialisierung, Content-Negotiation und die Sicherheit von REST-Webservices erklärt und durch realistische Übungsaufgaben verdeutlicht. |
|
Modernisieren mit Symfony
Workshop by Alexander M. Turek in Workshops (8 hour) Eine in die Jahre gekommene Webanwendung. Sie verdient immer noch Geld für uns, aber es wird immer schwieriger, sie zu warten. Feature-Wünsche der KundInnen häufen sich, der Bug-Tracker läuft über, aber die Abarbeitung wird immer langsamer und fehleranfälliger. Jetzt einen Rewrite zu starten, das würden viele EntwicklerInnen nun gerne tun. Nur wahrscheinlich wird dieser niemals fertig. In diesem Workshop werden wir uns eine alte php-Codebasis vornehmen. Durch Einbinden von Symfony und weiteren Open-Source-Bibliotheken werden wir schrittweise alte Anwendungsteile ablösen und unsere Legacy-Codebasis auf diesem Weg schrittweise in eine moderne Symfony-Anwendung umbauen. |
09:30 |
Schnittstellen-Testing in einer Microservice-Architektur
Workshop by Frank Stelzer in Workshops (8 hour) Die Definition von Schnittstellen und deren Einhaltung ist essentiell in einer Microservice-Architektur. Applikationen können eigene Schnittstellen zur Verfügung stellen und Schnittstellen von anderen Applikationen benutzen. Bei einem kleineren Projekt mag das noch überschaubar sein, aber wie macht man das in einem Projekt mit vielen Applikationen? Wie stellt man auch langfristig die Funktionalität der Schnittstellen sicher? Das normale Test-Setup, wie man es von normalen Symfony-Applikationen kennt, reicht dafür nicht mehr aus. Hier kommt das Thema Contract Testing ins Spiel. Mit den sogenannten Contracts schließen Applikationen untereinander Verträge ab und durch entsprechende Tools kann man erkennen, wann diese Verträge gebrochen werden. |
Richtig guten Code schreiben
Workshop by Sebastian Bergmann in Workshops (8 hour) Was macht sauberen Code aus? Wie wird Code richtig gut? Und wie schreibt man richtig guten Code? In diesem Workshop lernt Ihr das nicht nur, sondern Ihr könnt es auch direkt in die Praxis umsetzen! Zunächst demonstriert Sebastian Bergmann den Einsatz von Domain-Driven Design und Test-Driven Development, natürlich nicht ohne auch über Themen wie Clean Code oder die SOLID-Prinzipien zu sprechen. Danach arbeitet Ihr in Paaren und setzt das Gelernte in die Praxis um. Wir schließen den Tag ab mit einer Review-Runde, in der Ihr Feedback zu Eurem Code bekommt. Um von diesem Workshop wirklich profitieren zu können, bringst Du bitte Dein eigenes Laptop mit Deiner gewohnten Entwicklungsumgebung mit. Neben IDE (oder Texteditor) brauchst Du eine aktuelle Version von PHP und PHPUnit. Frameworks oder Third-Party-Code wird nicht benötigt. |
|
CQRS und Event Sourcing - concepts, architecture and implementation
Workshop by Marco Pivetta in Workshops (8 hour) CQRS and Event Sourcing are challenging if approached for the first time, and especially if done from scratch. This tutorial day will lead give you a basic understanding of what CQRS and ES are, including their complexities, advantages and pitfalls. We will help you modelling, designing and implementing an application relying on these architectural patterns, guiding you through: - Domain analysis - Involved architectural components - Data flow - Synchronous/Asynchronous dispatching - Implementing domain logic with aggregates - Projections - Scaling - Testing |
|
Einführung in ReactJS
Workshop by David Badura in Workshops (8 hour) ReactJS ist eine JavaScript-Library für die Entwicklung von Benutzeroberflächen unter anderem für Webanwendungen aber auch für Native Mobile-Anwendungen. ReactJS überzeugt dabei durch seine einfachen Konzepte und, dank der komponentenbasierten Struktur, durch seine hohe Wiederverwendbarkeit. Dieser Workshop erklärt die Hauptkonzepte von ReactJS und bietet einen Einblick in die Entwicklung von Single-Page-Anwendungen. Die Inhalte werden zunächst theoretisch vermittelt und dann in einer Praxis-Session vertieft. Zum Schluss wird erläutert, welche Möglichkeiten es bei der Anbindung von ReactJS in Symfony gibt, welche Herausforderungen damit einhergehen und welche Lösungsansätze existieren. Anforderungen: Du solltest grundlegende Kenntnisse in Javascript mitbringen. |
|
Event storming
Workshop by Arne Blankerts in Workshops (8 hour) Für eine effiziente Entwicklung von Software ist es unerlässlich, dass der abzubildende Prozess von allen Beteiligten verstanden wurde. Keine sonderliche Herausforderung, sollte man meinen. Oder doch? In der Praxis zeigt sich nämlich, dass viele Details eher unklar sind: Warum ist dieser Schritt hier überhaupt notwendig? Müsste der nicht vielleicht sogar früher erfolgen? Und was passiert überhaupt, wenn an dieser Stelle etwas schief geht? Event Storming für Process Modeling ist eine effektive und erfreulich interaktive Methode, um das Wissen über den abzubildenden Prozess und die daraus resultierenden Anforderungen sowohl für die Fachabteilung als auch für die Entwickler greifbar zu machen und in verständlicher Form aufzubereiten. Und das ganz ohne Laptop! |
|
Doctrine effizient verwenden
Workshop by Denis Brumann in Workshops (8 hour) Doctrine ORM ist ein elementarer Bestandteil in vielen Symfony-Anwendungen, egal ob Full-Stack, API oder Command Line-Tool. Seit dem Release von Version 2.6 Ende Dezember 2017 wird an ORM Next (3.0) gearbeitet und der Branch enthält bereits einige Änderungen, die man in aktuellen Projekten berücksichtigen kann, um ein späteres Upgrade einfacher zu gestalten. In diesem Workshop besprechen wir aktuelle Best Practices beim Einsatz von Doctrine in einer modernen Symfony-Anwendung mit Fokus auf die Vermeidung von Speicher- und Performanceproblemen und einem Blick auf zukünftige Änderungen und ihre Auswirkungen auf Projekte, die Doctrine ORM einsetzen. Der Workshop richtet sich an Entwickler*innen, die bereits Erfahrung mit Doctrine haben, aber ihr Verständnis vertiefen möchten. Die Praxisbeispiele bauen auf einer aktuellen Symfony 4-Anwendung auf und Features, die zum Einsatz kommen, wie das Autowiring, werden als bekannt vorausgesetzt. |
|
Entwicklung einer Anwendung mit einem modernen Symfony CMS - Sulu 2.0
Workshop by Thomas Schedler in Workshops (8 hour) Die Entwicklung moderner Webseiten wird immer komplexer und umfangreicher. Klassische Vermarktungsauftritte rück immer mehr in den Hintergrund — viel öfter geht es um die Ausweitung eines bestehenden oder das Etablieren eines neuen Businessmodells in der digitalen Welt. Genau an diesem Punkt setzen Framework basierte Content Management Systeme wie Sulu an. In seiner gewohnten Symfony Entwicklungsumgebung Content-Management-Herausforderungen und Business-Logik zu einer maßgeschneiderten Lösung zu kombinieren, wird der Schwerpunkt dieses Workshops sein. Dazu werden wir uns zuerst die Basiskonzepte von Sulu aneignen, um dann möglichst schnell die Schnittstellen zwischen Sulu und Symfony zu erkunden. Es sind nämlich genau diese, die es uns ermöglichen, Custom-Domain-Objects in unserer Administrationsoberfläche abzubilden und mit Content aus dem Redaktionssystem zu verschmelzen. |
|
Symfony Messenger
Workshop by Samuel Roze in Workshops (8 hour) The Symfony Messenger component brings to Symfony the notion of message buses and (optional) asynchronous processing of these messages via queues such as RabbitMq. In this workshop, you will learn about (1) how to use the message bus pattern as a strategy to decouple your application, (2) configure the routing of your messages to handle them asynchronously and (3) discover the underlying notion of middleware in order to add your own logic to the buses. We'll then go into more details around (4) how Messenger applies in the CQRS context, (5) the specifics of the AMQP and Enqueue adapters for your asynchronous processing and (6) how to customise and write your own adapters. |
|
Upgrading Symfony
Workshop by Andreas Hucks in Workshops (8 hour) Habt ihr schon mal versucht eine alte Symfony Anwendung auf den neusten Stand zu bringen? Symfony 4.4 löst Symfony 3.4 als neuste LTS Version ab. Ein guter Zeitpunkt, um sich mit der Thematik zu beschäftigen. In diesem Workshop werden wir gemeinsam eine Symfony 2+ Anwendung auf den neusten Stand bringen. Wir gehen auf den Releaseprozess von Symfony ein, sehen uns Tools an, die uns dabei helfen werden Deprecations zu erkennen, werden Anhand der Beispielanwendung den Upgrade-Vorgang zusammen durchführen und mehr über die Grundlagen von Composer lernen. Am Ende des Workshops wisst ihr, wie ihr eure Anwendung sicher upgraden könnt und welche Strategien euch zur Verfügung stehen. |
|
Domain Driven Aggregate Design
Workshop by Matthias Noback in Workshops (8 hour) In this workshop you'll go back to the basics of object-oriented programming and learn to apply core principles of Domain-Driven Design to your domain objects: aggregates, consisting of entities and value objects. You'll learn how to progress from domain knowledge to a functioning domain model, and use unit testing along the way to describe the expected behavior of your objects. The program: - Object-orientation, distilled - Mini-event storming: the warehousing domain - Modelling session: determine types and behavior - Implementing an entity and value objects - Aggregate design rules - Working with domain events and eventual consistency |
|
REST Services in Symfony
Workshop by Jan Schädlich in Workshops (8 hour) Webservices werden mittlerweile in sehr vielen Bereichen der IT zur Integration unterschiedlicher Anwendungen verwendet. REST-Webservices spielen dabei eine besondere Rolle, da REST sich auf die Grundlagen von HTTP stützt, einfach verständlich ist und leicht in bestehende Anwendungen zu integrieren ist. In diesem Workshop bringen wir den Teilnehmern sowohl die theoretischen Grundlagen von REST, als auch die praktische Umsetzung mit Symfony näher. Mit praxisnahen Beispielen werden Themen wie Serialisierung, Content-Negotiation und die Sicherheit von REST-Webservices erklärt und durch realistische Übungsaufgaben verdeutlicht. |
|
Learning Design Patterns with Symfony
Workshop by Hugo Hamon in Workshops (8 hour) Established in the 70's by the "Gang of Four", Design Patterns are general reusable abstract solutions to solve often recurring problems in software design. Object oriented frameworks leverage them to design robust, extensible and testable code, letting developers build their applications on top of solid foundations. In this workshop, you'll (re)discover tens of the original design patterns, why and how they're implemented in Symfony. |
09:15 |
Keynote
Talk by Janina Loh (45 minutes) Keynote |
10:05 |
HTTP-Clients in PHP - vom fopen-Wrapper zur Symfony-Komponente
Talk by Denis Brumann in Track 1 (45 minutes) HTTP-Requests aus einer PHP-Anwendung zu verschicken, war früher kompliziert. Von aufwendigem Stream-Handling über eine Vielzahl an Bibliotheken hin zu einem gemeinsamen Standard hat sich viel getan. In meinem Talk gebe ich einen kurzen Einblick in die Historie von HTTP-Clients, einen Überblick über den PSR-18 Standard hin zu Symfonys HttpClient-Komponente und welche Vorteile sie bietet. |
Statische Code Analyse in PHP
Talk by Benjamin Cremer in Track 2 (45 minutes) Das Typensystem sowie die statische Code Analyse können eine große Hilfe sein, wenn es darum geht,Fehler frühzeitig und automatisiert zu finden, ohne dass dafür manuelle Tests geschrieben werden müssen. Ich zeige die Voraussetzungen an deinen Code, um das meiste aus der statischen Code Analyse herauszuholen sowie die Tools, um direkt loszulegen. |
|
Case Studies of Legacy CMS to Headless CMS
Talk by David Keller, Stiven Llupa in Track 3 (45 minutes) (tba) |
|
11:20 |
Backwards Incompatible Tales
Talk by Marco Pivetta in Track 1 (45 minutes) A long time ago, in a land far away, lived a software wizard that was capable of grand magic. They built gardens, libraries, temples, castles. They created life where there wasn’t,and cleared the path where it was unsafe. And then they disappeared, and even though they left behind books and notes, none of their apprentices were able to learn the craft. Since then,nobody was able to use any of the tools of the great mage, and the creations kept working for only a few years, when finally even the last stone that was placed crumbled into sand. Sounds familiar? Software often feels the same: we’re all magicians that force a piece of sand into semi-rational thought, but what will happen when everyone moves on, and nothing works as expected anymore? This talk explores the problems that arise from breaking compatibility with existing tools, how to prevent those breakages from happening, and what to look for as a software maintainer. While I cannot guarantee that you will build indestructible magical fortresses with my tips, I can at least help you make sure that your work will live on with other people picking it up, and hopefully appreciating the stability that you worked towards. |
Dayuse.com - Challenges to Scale an Innovative Worldwide Business
Talk by Hugo Hamon in Track 2 (45 minutes) (tba) |
|
Der Content-Manager mag den Baum
Talk by Maximilian Berghoff in Track 3 (45 minutes) Baumartige Strukturen treffen wir im Web überall an. Ob die einfache URL einer Webseite, in Navigations-Menüs oder für Foren- und Chat-Verläufe. Auch XML repräsentiert eine Baumstruktur. Doch warum Daten nicht auch in einer solchen Struktur ablegen? In der Java-Welt gibt es mit dem JCR ein Content-Repository mit dem sich Daten in einer baumartigen Struktur ablegen lassen. Das JCR wurde auch nach PHP portiert, unter dem Namen PHPCR. Mit dem eigenen Doctrine (PHPCR-ODM) lässt es sich einfach in Applikationen einbinden. Semi-strukturierter Inhalt, dynamisches Routing oder andere hierarchisch strukturierte Daten lassen sich damit effizient persistieren. |
|
12:10 |
In fünf Jahren wird es keine Tester mehr geben
Talk by Nils Langner in Track 1 (45 minutes) Qualität ist wichtig, da sind wir uns alle einig. Aber wie wichtig ist sie? 10 Gründe (technologisch und Mindset), warum es in den nächsten Jahren immer weniger Tester geben wird und warum sich der Stellenwert der Qualität verändert. |
Varnish beyond basic web acceleration
Talk by Thijs Feryn in Track 2 (45 minutes) Varnish is one of the world’s leading caching and web acceleration solutions, improving the performance of almost 5 million websites worldwide and more than 20% of the top 10,000 websites. But Varnish is used for a lot more than just speeding up websites and APIs. Varnish Software’s solution has enabled some of the biggest video streaming platforms in the world to improve their delivery process. In this presentation, Thijs will share some advanced tricks that go beyond basic web acceleration: prefetching, geo blocking,rate limiting, edge content transformation, device detection and the configuration of our massive storage engine. Thijs will also show how these advanced features can be used to speed up the delivery of video streaming content. |
|
Building an extraordinary online store with Sylius
Talk by Magdalena Sadowska in Track 3 (45 minutes) If you are seeking a solution that will let you build anything you can imagine in the eCommerce field, then Sylius might be exactly what you need. From the Sylius Product Owner point of view, I’m going to explain how does Sylius differ from mainstream eCommerce platforms, show you on examples what you can achieve with it and which of its components you can use in your existing Symfony applications. |
|
14:25 |
How Birdie uses an event-based approach to scale
Talk by Samuel Roze in Track 1 (45 minutes) In this talk, you will learn how birdie (https://birdie.care) uses an event-based approach as the core of its architecture. I will go through the reasoning of why it went to the path of using events instead of "updatable entities" for the core of our business logic, how we built it and how it evolved after more than a year in production and millions of events. |
Aggregierte Logging Patterns
Talk by Philipp Krenn in Track 2 (45 minutes) In verteilten Applikationen besteht immer der Bedarf Logs zu zentralisieren - sobald man mehr als ein paar Server oder Container hat, reichen SSH und cat,tail oder less nicht mehr aus. Das übliche Problem ist aber, wie man möglichst effizient zu einer zentralisierten oder aggregierten Log-Lösung kommt. Dieser Vortrag stellt mehrere Ansätze und Patterns mit ihren Vor- und Nachteilen vor,sodass die Zuhörer den auswählen können, der am besten zu ihrer Organisation passt: parsen, senden, strukturieren, containerisieren, orchestrieren. Jedes Muster hat sein eigenes Demo mit dem Open Source Elastic Stack (früher ELK Stack),sodass die Zuhörer die unterschiedlichen Ansätze in ihrer Umgebung einfach ausprobieren können. Wobei die Muster generell bei jedem zentralisierten Logging-System anwendbar sind. |
|
Besser schlafen mit Shopware6
Talk by Daniel Nögel in Track 3 (45 minutes) Der E-Commerce ist vordergründig sehr einfach ist ("Sachen im Internet verkaufen"). Wer aber schonmal einen Kunden in einem E-Commerce Projekt begleitet hat, weiß: Schaut man sich einzelne Funktionen näher an, zeigt sich ein wahres Fraktal an weiteren Funktionen, Anforderungen, Details,Spezialfälle. Aber selbst sehr spezifische Anforderungen erscheinen dir plötzlich elementar, wenn du beim Kunden erstmal in der Lagerhalle gestanden oder dem Einkäufer über die Schulter geschaut hast. Für Shopware6 haben wir viele Anforderungen identifiziert, die in Projekten Aufwände und bei Entwicklern schlaflose Nächte verursachen. In diesem Talk möchte ich euch vorstellen, mit welchen neuen Ansätzen wir euch das Entwickler-Leben einfacher machen wollen. |
|
15:15 |
Meine ehrliche Symfony-Anwendung
Talk by Christopher Hertel in Track 1 (45 minutes) Du hast die letzten Jahre bei verschiedenen Talks viel über Architektur, Testing,Komponenten und Pattern gehört. Natürlich hast du auch viel über Symfony gelernt und die Buzzwords sind in Schwärmen an dir vorbei in ferne Länder gezogen. Aber was bleibt übrig, wenn man wieder im Büro ohne Hypes und gestylte Slides eine Symfony-Anwendung hochziehen muss? Über die letzten Jahre habe ich viele Projekte und Teams kennengelernt und unterschiedlichste Ansätze, Probleme und Lösungen gesehen. In diesem Talk will ich euch meinen Weg Symfony-Anwendungen zu bauen zeigen. Es wird leider nicht so shiny und fancy, sondern realistisch und pragmatisch. Nehmt die Sonnenbrille ab und holt den Notizblock raus. |
Start Smoking, Get Confidence - HTTP Smoke Testing
Talk by Petr Heinz in Track 2 (45 minutes) Introduction to HTTP Smoke Testing of web applications with demonstration of a solution for Symfony. |
|
Content Management mit eZ Platform – ein Crashkurs
Talk by Thorsten Reiter in Track 3 (45 minutes) eZ Systems war im Jahr 2012 einer der ersten CMS Anbieter, die das Symfony Framework voll ausschöpfte. Dieser Talk bietet eine schnelle Einführung in die Arbeit mit eZ Platform. |
|
16:30 |
User Story Mapping - MVP-Scoping leicht gemacht
Talk by Marian Bosse in Track 1 (45 minutes) Wie finden wir die richtigen, sprich die wirklich wichtigen Anforderungen für unser Vorhaben und wie behalten wir auch bei komplexen Softwareprojekten den Überblick, ohne die Details aus dem Auge zu verlieren? Wie stellen wir dann auch noch sicher, dass alle das gleiche Bild vor Augen haben,wenn wir über das große Ganze oder das einzelne Feature sprechen? Eine sinnvolle Antwort darauf kann der Einsatz von User Stories und User Story Maps sein. User Stories haben sich im agilen Umfeld als die Methode zur Formulierung von Anforderungen durchgesetzt,da sie das Verständnis und den kommunikativen Austausch fördern. User Story Mapping ist eine Technik,mit der sich User Stories visuell in Zusammenhang bringen lassen. Story Maps helfen dabei,komplexe Vorhaben in kleinere “Häppchen” zu zerlegen,um dem Kern des Vorhabens auf die Spur zu kommen - damit eignen sich Story Maps hervorragend,um auf der Suche nach dem Minimal-Viable-Product (MVP) gemeinsam ein Vorhaben zu gestalten und sicherzustellen,dass wir wirklich die richtigen Dinge tun. |
Everything about DNS you never dared to ask!
Talk by Ole Michaelis in Track 2 (45 minutes) DNS braucht dich nicht, aber du brauchst DNS! Das Domain Name System (DNS), fast 40 Jahre alt, ist,noch heute, eines der Grundpfeiler des modernen Internets. So ziemlich alles was du macht, vom Deployment über das 1-click skalieren deiner App bis hin zu Twitter nutzt DNS. Trotzdem ist es für die meisten von uns eine Black Box oder Schwarz Magie. In diesem Talk behandeln wir alles von der ICANN bis zum IETF, verschaffen wir uns einen groben Überblick und zoomen dann hinein bis zu den Details. Außerdem verrate ich den 'geheimen' Trick,wie ihr ohne Down Time eine Domain zu einem anderen Provider wechselt. |
|
Let's distribute: Vom Shopsystem zur verteilten Applikationsinfrastruktur
Talk by Leonard Kriese, Bernd Alter in Track 3 (45 minutes) Commerce-Frameworks gibt es nicht zu wenige, doch alle scheitern früher oder später an der Integration von komfortablen CMS-Funktionen - und umgekehrt. Wie müsste ein System mit komplexer Shop- und CMS-Funktionalität aussehen,ohne dabei erneut in eine monolithische Architektur zurückzufallen? Dieser Talk zeigt einen kompromisslosen “headless”-Ansatz, der aus drei Symfony-Applikationen besteht: eZ Platform, Sylius und eine Symfony-App mit Vue.js als Frontend. Bernd und Leo demonstrieren, wie sie Sylius’ Checkout-Komponente über eine Swagger-API exponieren und Inhalte von eZ Platform via GraphQL für das Frontend zugänglich machen. Sie zeigen,wie - mittels Symfony Messenger Component und Message Queues - Daten über Systemgrenzen hinweg synchronisiert und neue Microservices - zum Beispiel ein ERP-Datenimport - integriert werden können. Um die Stabilität des Deployments abzusichern, kommen via Gitlab CI automatisierte Behat-Akzeptanztests zum Einsatz. |
|
17:20 |
Die ultimative API Plattform
Talk by Stefan Adolf in Track 1 (45 minutes) Unzählige Tools in allen Sprachen unterstützen einen dabei, solide APIs zu bauen, aber die Symfony-basierte api-platform sticht hervor: mit ihr erstellt man OpenAPI-kompatible REST-Schnittstellen nur mit Hilfe von einfachen Code-Annotationen. Stefan präsentiert zunächst die Basisinstallation des Frameworks und stellt seine wichtigsten Features vor, um dann tiefer in produktive Details einzusteigen. Darunter, wie man Client-Code und SPA-Frontends automatisch generiert, datenbankbasierte Akzeptanztests in Behat und Mink schreibt, sich per JWT authentifiziert, Custom Endpoints erstellt und von Doctrine ORM unabhängige Datenquellen nutzt. Schließlich demonstriert er, wie sich die produktive Vue.js-SPA seines Projekts via Apollo-Client mit automatisch generierten GraphQL-Endpunkten verbindet, ohne einen einzigen Resolver schreiben zu müssen und wie das brandneue Mercure-Protokoll dafür sorgt, dass das Frontend automatisch mitbekommt, wenn sich Daten auf dem Server ändern. |
Ein Plädoyer für Fokus, Prioritäten und wieso man das Warum wissen sollte!
Talk by Stephan Schulze in Track 2 (45 minutes) IT ist überall! Und jeder von uns, ob Engineer, QA, PO/PM, Ops, SRE, ... gestaltet und betreibt diese Welt! Falls Du Dir Fragen stellst wie: Warte! Warum mache ich das gleich? Ist das wirklich das, woran wir am dringendsten arbeiten sollten? Wie hilft das ,was ich tue, meiner Firma bei der Erreichung ihrer Ziele? Ach und übrigens: Was sind eigentlich die Ziele meiner Firma (und wie viele gibt es)? Dann soll Dich dieser Talk dazu ermutigen: Fokus, eine klare Priorisierung und das “Warum” einzufordern und Veränderung zu bewirken! Und er zeigt auf,warum Management nur eine Seite des Problems ist. |
|
Sulu 2.0 - bring your own business logic
Talk by Thomas Schedler in Track 3 (45 minutes) In den meisten Content Management Systemen ist es sehr umständlich,eigene Business-Logik mit Content aus dem Redaktionssystem zu einer maßgeschneiderten Lösung zu kombinieren. Genau an diesem Punkt setzt die Symfony basierte Content Management Plattform Sulu an. Mit der Version 2.0 ist das Ganze noch einfacher geworden. |
09:15 |
Symfony Update - on the road to v5
Talk by Andreas Hucks, Christopher Hertel in Track 1 (45 minutes) Das letzte Jahr hat viele neue und aufregende Änderungen für Symfony und die Community gebracht. Ob es nun neue Komponenten wie der Mime, HttpClient oder Mailer sind, neue API-, Testing- oder HTTP-Tools, das Bug-Bounty-Programm der EU oder die Diversity-Initiative - es hat sich viel getan. Wir wollen die Zeit kurz vor dem nächsten Major-Release nutzen, um auf all das zurückzuschauen und einen Blick auf die nächste Zeit zu werfen. |
Pushing the limits of PHP
Talk by Christian Lück in Track 2 (45 minutes) It's 2019 and times have changed – yet PHP is still most often associated with your average product catalog or blogging platform. In this talk you will learn that PHP's huge ecosystem has way more to offer and PHP is not inferior at all to its evil cousin Node.js. You will learn about the core concepts of async PHP and why you too should care about ReactPHP being a real thing. The talk has a strong focus on sparking the idea that PHP can be way faster and more versatile than you probably thought. Bring along an open mind, and through lots of interesting examples and live demos learn why what sounds crazy at first might soon be a valuable addition in your toolbox. |
|
Bolt 4 - A modern CMS for the Future
Talk by Bob den Otter in Track 3 (45 minutes) Bolt is a CMS that strives to make managing your content as pleasant and straightforward as possible. Bolt aims to do this for editors,implementors and developers alike. The upcoming version 4 is built on Symfony 4, API platform and Doctrine, so it will have modern features to build both decoupled and “traditional” sites. In this talk, Bob will focus mostly on the developers who need a better solution to deliver a CMS to their clients. After a brief introduction on the history of Bolt (mainly the move from Silex to Symfony 4), Bob will show you how to get up and running with Bolt, and showcase some of the features to help you efficiently build websites and how to configure, extend and adapt the system using the Symfony skills you already have. |
|
10:05 |
Head first into Symfony Cache, Redis, & Redis Cluster
Talk by André ®ømcke in Track 1 (45 minutes) Symfony Cache has been around for a few releases. But what is happening behind the scenes? Talk focuses on how is it working, down to detail level on Redis for things like datatypes,Redis Cluster sharding logic, how it differs from Memcached and more. |
Einstieg in Ansible ohne die Fettnäpfchen
Talk by Lukas Sadzik in Track 2 (45 minutes) Jede Lernkurve ist steil! Dieser Talk versucht, sie für Ansible ein wenig abzuflachen. Wir fangen ganz am Anfang an und klären zuerst einmal: was ist Ansible überhaupt (und was ist es nicht)? Und dann geht's auch schon los. Stück für Stück tasten wir uns an die Konzepte von Ansible heran: was sie bedeuten,wie wir sie verwenden können und auch wie wir sie (nicht) verwenden sollten. Es geht vor allem um ein Verständnis dafür, wie Ansible funktioniert - weniger darum, was es alles kann. Dazu kommen ein paar Best Practices und Dinge, die man im Umgang mit Ansible vermeiden sollte. Ein Einsteigertalk, jedoch nicht nur für Einsteiger. |
|
Lessons learned at Lillydoo
Talk by Jan Gregor Triebel in Track 3 (45 minutes) In dieser Session wollen wir uns einmal genauer anschauen, wie Symfony in einem hypergrowth Start-Up wie Lillydoo eingesetzt wird. Insbesondere soll es darum gehen, welche Bundles,Komponenten, Patterns und Best Practices sich im e-commerce Alltag bewährt haben und - mindestens genauso wichtig - welche nicht. Außerdem schauen wir uns noch die Toolchain an, die wir bei Lillydoo zur Qualitätssicherung einsetzen. Darüber hinaus gibt es einen Einblick wie Lillydoo jenseits von Symfony und PHP skaliert - maßgeblich auf der Prozessseite. |
|
11:20 |
Using redis streams to build more resilient services
Talk by Thomas Schedler in Track 1 (45 minutes) Redis, das Schweizer Taschenmesser unter den Datenbanken,hat in der Version 5.0 einen neuen Datentyp dazu bekommen,der es wert ist, etwas genauer unter die Lupe genommen zu werden. Konkret geht es um Redis Streams und darum wie sie uns helfen, fehlertolerante und skalierbare Services zu bauen. |
Automatisierte Review-Umgebungen mit GitLab-CI und Rancher
Talk by Daniel Badura in Track 2 (45 minutes) In den meisten Software Projekten werden bereits Continuous Integration (CI) Systeme verwendet,um die Code Qualität zu sichern. Dafür werden Tests und statische Codeanalyse Tools automatisiert bei jedem Commit ausgeführt. So kann sichergestellt werden, dass ein Pull Request nur gemerged wird,wenn die Pipeline “grün” ist und somit alle für das Projekt definierten Qualitätsanforderungen erfüllt sind. Oftmals ist dieser Ansatz aber nicht ausreichend, da der Kunde oder die QA die neue Features einzeln in einer abgeschlossenen Umgebung testen und abnehmen möchten. In diesem Vortrag geht es darum,wie wir mit der GitLab-CI automatisiert Review-Umgebungen für jeden Branch hochfahren. Daraus resultiert, dass ein Entwickler keine manuellen Review-Umgebungen mehr bereitstellen muss. Wir verwenden dazu die Tools Docker, Rancher und Traefik, um diese Instanzen zu verwalten. Zuerst werden wir es anhand eines Minimal-Beispiels praktisch nachvollziehen. Daraufhin werden wir eine Symfony App als Beispielprojekt nehmen, um einen komplexeren Workflow abzubilden. Weiterhin werde ich unsere Erfahrungen einbringen, die wir mit unseren Kunden und Product Ownern gemacht haben,seitdem wir dieses Verfahren bei uns eingeführt haben. Zudem gehe ich noch auf ein paar technische Fallstricke ein,auf die wir gestoßen sind. |
|
Everyday Tools That Make My Work Easier
Talk by David Ostrožík in Track 3 (45 minutes) Tools we use daily to ease development of e-commerce framework for building big e-commerce projects. |
|
12:10 |
Denormalisiere deine Datenbank - Schema-Design für moderne Datenbanksysteme
Talk by Andreas B. in Track 1 (45 minutes) Über viele Jahre haben wir unsere Datenbanken nach den Regeln der Datenbanknormalisierung gebaut. Moderne Datenbanksysteme bieten uns aber viel mehr als skalare Typen und es wird Zeit, dass wir sie nutzen. Ich werde zeigen, wie wir komplexe Datentypen in relationalen Datenbanken nutzen können,um Daten dort zu speichern, wo wir sie brauchen. Gleichzeitig werfen wir einen Blick auf dokumentenbasierte Datenbanken, um zu sehen, welche Möglichkeiten des Schema-Designs wir davon adaptieren können. |
Softwarequalität === Gesundheit
Talk by Roland Golla in Track 2 (45 minutes) Automatisierte Tests sind wichtig für die Gesundheit, die Teams,Employer Branding, die Mitarbeiter und einfach alle. Natürlich auch die Kunden. Gesundheit ist wichtig und nervliche Ausfälle dauern sehr lange und heilen eventuell gar nicht. Programmierer sind sich dessen nicht bewusst, dass Kopfschmerzen und andere Warnzeichen komplette Leben zerstören können. |
|
Multigrained Microservices - Die Transformationsstrategie eines traditionellen Online-Händlers
Talk by Frank Leue in Track 3 (45 minutes) Alle reden über Microservices, doch welche Unternehmen sind heutzutage wirklich in der Lage, die notwendigen Ressourcen für diesen Architekturstil zu erschließen? Kleine und mittlere Unternehmen mit nahezu standardisierten Systemen verfügen kaum über die Möglichkeiten oder Attraktivität, den Kampf um Talente für sich zu entscheiden. Dieser Vortrag beschreibt, wie ein Unternehmen trotz beschränkter Ressourcen technologisch auf dem neusten Stand agieren und sich dabei auf sein Kerngeschäft konzentrieren kann. Am Beispiel des Umbaus eines eigenentwickelten OnPremise Shop-Systems zeigt Frank Leue, CTO des traditionellen Handelsunternehmens 'Lobenbergs Gute Weine', welche Vorteile ein Cloud Native Ansatz bieten kann,welche strategische Rolle Symfony dabei spielt und welche Herausforderung es dabei in Technik und Team zu lösen gibt. |
|
14:25 |
Exploring Async PHP
Talk by Daniel Leech in Track 1 (45 minutes) As PHP programmers we are used to waiting for network I/O, in general we may not even consider any other option. But why wait? Why not jump on board the Async bullet-train and experience life in the fast lane and give Go and NodeJS a run for the money. This talk will aim to make the audience aware of the benefits, opportunities, and pitfalls of asynchronous programming in PHP,and guide them through the native functionality, frameworks and PHP extensions though which it can be facilitated. |
Great APIs built with Symfony and Open Source Software
Talk by Asmir Mustafic in Track 2 (45 minutes) Nowadays offering a REST API has become a must for most of the businesses. Offering a good documentation, validating properly the requests, having descriptive error messages,supporting multiple versions, retrieving data, persisting data, handling rate limitations and many other things can be not an easy task. This talk is a walk-through on how to build a rich, RESTful (Level 3 including HATEOAS) API for web applications using Symfony-related components and bundles. The result will be a standard, documented, validated and easy to maintain API, that users will enjoy and developers love to build. |
|
Sylius and Sulu | Commerce and Content
Talk by Johannes Wachter in Track 3 (45 minutes) Kundenspezifische eCommerce-Prozesse und eine anspruchsvolle Content-Architektur zusammen zu bringen ist eine große Herausforderung. Oft muss ein Basissystem erweitert oder kombiniert werden. Letzteren Weg haben wir gewählt und sozusagen das eCommerce Framework Sylius mit der Content Management Platform Sulu verheiratet. Ein Erfahrungsbericht. |
|
15:15 |
Und was kostet das? - Scrum als Dienstleister
Talk by Franzi Hackhausen in Track 1 (45 minutes) - "Hallo, ich würde gern eine Hochzeitstorte bestellen - aber bitte vegan!" - "Gerne! Für solche Torten benötigen wir für gewöhnlich 8-12h. Vegan haben wir noch nie gemacht versuchen gern, sie in ähnlicher Zeit herzustellen." - "Öh... und was bedeutet das nun konkret?" Ähnlich perplex dürften sich manche Kunden fühlen, deren Dienstleiter agil arbeitet. Für Dienstleister wie uns wirft Scrum ganz spezielle Fragen auf: Wann sollten wir Rücksprache mit dem Kunden bei Umsetzungsfragen halten? Wann bei Kostenfragen? Wie reagieren wir,wenn Kunden jeden Sprint die Fastlane vollpumpen? Welche Aufgaben darf unser (Proxy-)PO übernehmen? Kann man es es überhaupt schaffen, Kunden an schwammige Preisschilder zu gewöhnen? In unserem Vortrag erfahrt ihr, wie wir mit solchen Fragen umgegangen sind,welche Fehler wir gemacht haben, was wir gelernt haben, und welche Lösungen wir weiterhin suchen. |
Ready for Takeoff - Umgang mit latenzbehafteten Internetverbindungen
Talk by Thomas Holland in Track 2 (45 minutes) Wie verliert man Internetnutzer an die Konkurrenz? Die beste Option ist es sicherlich,wenn der eigene Service im Schneckentempo lädt! Die unzähligen Artikel,Tutorials und Best Practices zur Ladezeitoptimierung von Webseiten gibt es nicht ohne Grund: Lädt eine Webseite schnell, steigert dies die Conversion Rate. In diesem Talk gehen wir allerdings über das übliche Performance ABC hinaus und befassen uns mit einer besonderen Herausforderung: Wie kann die Ladezeit einer Webseite unter extrem schlechten Netzwerkbedingungen optimiert werden? Aus erster Hand teilen wir unsere Erkenntnisse,wie wir für Internetnutzer in Flugzeugen mit einer latenzbehafteten Satelliten-Internetverbindung die Ladezeit optimiert haben. Basierend auf unserer Erfahrung diskutieren wir,wie Maßnahmen wie Resource Prefetching, Resource Inlining, Code Splitting und eine optimierte Build Pipeline dabei geholfen haben, die absolute und wahrgenommene Ladezeit um eine Größenordnung zu verbessern. Darüber hinaus zeigen wir, wie wir unseren Kunden überzeugen konnten Performance Optimierungen über neuen Features zu priorisieren. |
|
Paketverwaltung im Browser – die Composer-WebGUI für Contao
Talk by Andreas Schempp in Track 3 (45 minutes) Contao Open Source CMS ist seit über 10 Jahren auf dem Markt und gehört zu den Top5 CMS im DACH-Raum. Mit Contao 4 und Symfony wurde Composer zum integralen Bestandteil der Applikation. Contao stand vor der Herausforderung, die bisher vorhandenen Update- und Erweiterungsfunktionen weiterhin im Browser anzubieten. Unsere Lösung dafür heisst «Contao Manager» – eine WebGUI, welche auf jedem Webserver Composer-Pakete installieren und die Applikation verwalten kann. In meinem Vortrag gebe ich einen Einblick wie Contao und der Contao Manager funktionieren, wie wir mit Hilfe der Composer Resolver Cloud die speicherintensiven Aufgaben auslagern – und wie ihr diesen Dienst für eure Anwendung nutzen könnt. |
|
16:30 |
Wie gut sind meine Tests wirklich?
Talk by Stephan Hochdörfer in Track 1 (45 minutes) Wie lässt sich die Qualität von Unit-Tests beurteilen? Eine hohe Testabdeckung ist kein Garant dafür, dass unsere Tests auch wirklich gut sind. Brauchen wir also Tests für unsere Tests? In gewisser Weise ja. In dieser Session werde ich aufzeigen, wie sich durch den Einsatz von mutations-basiertem Testing die Qualität der eigenen Tests verbessern lässt und dank verschiedener Metriken die Test-Qualität "sichtbar" machen lässt. |
SOLIDe Symfony Apps bauen
Talk by Ole Rößner in Track 2 (45 minutes) Symfony eignet sich super, um schnell Ergebnisse zu erzielen. Bei komplexeren Anwendungen fällt es manchen Teams oft schwer Anwendungen gut zu gliedern und wart- und erweiterbar zu halten. Fette Controller, Gott-Klassen und Spaghetti-Code sind die Folge,dabei bietet Symfony durch Einhaltung von Clean-Code und SOLID Prinzipien so viele Möglichkeiten auch große,komplexe, monolithische Projekte klar zu strukturieren, sauber in Verantwortlichkeiten zu trennen und auf lange Zeit hin pfleg- und erweiterbar zu halten. Ich möchte in diesem Talk, anhand eines Refactoring Beispiels zeigen, welche Möglichkeiten Symfony 4 hier bietet. |
|
Flexibel bleiben mit einem plattformunabhängigen Storefront
Talk by Alexander Nickel in Track 3 (45 minutes) Seit letztem Jahr sind PWAs definitiv in aller Munde. Firmen wie z.B. Twitter haben es geschafft, nur durch die Nutzung einer PWA, ihr User Engagement um mehr als 65% zu erhöhen. Der Vorzug von altbewährten aber teils auch veralteten E-Commerce Systemen und Schnittstellen, sorgt dafür, dass der E-Commerce neue Technologien langsamer adaptiert als Firmen, deren einziges Produkt eine Webapplikation an sich ist. Doch auch E-Commerce muss sich weiterentwickeln. User gewöhnen sich heute schneller an neue Technologien und deren Vorteile als jemals zuvor. Sind erstmal Technologien wie z.B. der Offline-Support etabliert,wird ein Shop ohne diese Funktion von den Usern als deutlich weniger wertig wahrgenommen. Es gibt mittlerweile einige PWA Storefront Lösungen auf dem Markt,welche sich deutlich in Umfang und Möglichkeiten unterscheiden, bei denen wir von Flagbit allerdings immer noch entscheidende Eigenschaften vermissen. Dazu gehören Projekte, die auch innerhalb großer Entwicklerteams skalierbar sind, ein professionelles E-Commerce Tracking, um die Performance unseres Storefronts messen zu können, sowie die Möglichkeit, dass Kunden Teile ihrer E-Commerce Lösung austauschen können, ohne das komplette Frontend neu schreiben zu müssen. In meinem Vortrag zeige ich wie wir bei Flagbit ein Storefront auf Basis von Angular entwickelt haben, warum die Wahl auf Angular gefallen ist und wie es damit möglich ist einzelne Teile mit wenig Aufwand auszutauschen. |
|
17:20 |
Keynote: Better Communication to Bridge the Tech/Business Gap
Talk by Jeffrey McGuire (45 minutes) The “Tech/Business Gap” is what we call the misunderstandings,for example, between the people building a technical product and the people who need to sell it. These often result in teams or individuals pulling in different directions within a company—even when everyone believes they’re working towards a common goal. Among various factors that cause this “gap,” it often boils down to communication challenges. Even though we’re talking about internal problems, one path to success is building consensus via an external communications strategy. In this presentation, I’ll talk about solving this problem by building a common vision and a plan for communicating it to the world. As a bonus, if successful, the resulting communication strategy will also help sell your products and services! |