9:30 BST | 10:30 CEST: Welcome
KEYNOTE | 9:40 BST | 10:40 CEST: Optimizing airports and making whisky: breakthroughs in applying data science to business initiatives - Jarno Kartela and Maria Pusa
Applied data science is becoming a first-class citizen in modern businesses. We are moving from AI hype to practical, extremely valuable solutions that unlock growth, increase efficiency, support strategic decision making and even help to drive creativity. In this talk, we'll take a close look at how modern technology changes the very core of how businesses are run and how some of these solutions are actually built.
10:45 BST | 11:45 CEST: Front-end state management with Xstate - Amy Pellegrini
Handling user behaviour and web application state can be difficult given the unpredictable nature of human actors, and the cascade of potential side effects caused by user interactions with a user interface.
By applying the concept of state machines to the front-end, we can bring a formalised approach to deal with these challenges effectively, and impose constraints that will eliminate potential side effects.
11:35 BST | 12:35 CEST: Perfect, the enemy of good - taming perfectionism with evolutionary design - Emily Karungi and Mihaela Pascuta
As developers, we want to write good quality code that delivers value to our clients. But often, we are forced to make certain design decisions that may not be the best for the future, in order to go to production as soon as possible and receive fast feedback, hence creating tech debt. But is tech debt bad? For teams that do not do trunk based development, often tech debt is a hindrance to deploying a feature to production as soon as possible due to prolonged pull request discussions brought about by some code design decisions made. Changing how we view tech debt could save the business a lot of money by going fast to production and allowing teams to start doing things. This approach avoids the analysis paralysis effect of finding perfection from the start. Bearing in mind that in an agile world, architectures and software requirements change. Tech debt can be handled in an evolutionary way (making a design decision in the last responsible moment) meaning regardless of what we think fits for the software in future, we postpone the decision for when the need arises, but document it (to keep track of it) and prioritise it as we see best. The goal of this talk is not to encourage teams to accumulate tech debt, but rather why tech debt should not be a blocker for a release or going to production. Tech debt is always there, teams have to be aware of it and learn how to manage it.
12:25 BST | 13:25 CEST: Thinking in Types - Kjeld Schmidt
Whether your programming language of choice forces you to be specific about types or not, they will always matter during runtime. By thinking about the types of your data, functions and interfaces even in weakly-typed languages, the mental model of the program and data flow improves, which enables cleaner and more modular code. In many cases, it is also possible to use automated checking tools, which will establish types as a fast and automated part of your testing strategy, working at a level below unit tests.
13:10 BST | 14:10 CEST: Break (20 minutes)
13:30 BST | 14:30 CEST: MVVM is not an architecture - Mihai Mecea
A lot of materials on the internet are praising MVVM as an architectural solution for mobile apps. While MVVM might work for smaller applications it is just a presentation pattern and it will quickly show its limits if used alone once your application starts evolving and the size of the team working on it grows. My personal records using this approach in the past for developing Android applications clearly show that you will hit the limit quite fast and you need a broader architectural approach to make your code evolvable and maintainable over time. The goal of this talk is to explore how MVVM fits into the bigger picture of Clean Architecture and how a minimal approach to implementing this would look like.
14:20 BST | 15:20 CEST: Surviving continuous deployment in distributed systems - Valentina Servile
Most of us have read about Trunk Based Development, Continuous Deployment and Microservices. Maybe even convinced our stakeholders it was time to put them into practice. But what does the day to day life of developers look like at the end of the journey?
As each change we make goes immediately to production and has the potential to affect a complex web of services, it is time to evolve the day to day way we release our software. At ThoughtWorks we've been facing these challenges with many of our enterprise scale clients. In this talk I want to share our approach to incremental, safe releases.
15:10 BST | 16:10 CEST: Our twisted tale of lightweight state management in a micro-frontend architecture - Andrei Bechet and Jann Deterling
As our applications grow larger and larger, state management becomes a delicate topic, especially when several pages need to maintain and share a global state. This problem deepens when such applications are split into micro frontends and become more independent from one another. Keeping the global state to a minimum becomes imperative in order to avoid coupling them tightly with shared code dependencies or even worse with yet another framework. This talk outlines challenges one might face employing a global state and discusses solutions on how to overcome these challenges in order to build decoupled and independent micro frontends.
10:45 BST | 11:45 CEST: Taming the Infrastructure Beast with Application Design Concepts - Rahul Punjabi and Katja Bensiek
Cloud platforms start off with a few resources and a simple codebase. As they grow, scaling for multiple customers often introduces an abundance of complexity that may be hard to reason about and maintain. Conversely, starting with sophisticated ready made solutions can make it difficult to introduce changes and understand their impact. In this talk, we’ll introduce how architectural patterns and refactoring strategies inspired by application design can be used even by small teams to scale out cloud platforms while managing complexity - all through continuous integration pipelines.
11:35 BST | 12:35 CEST: What if your databases never forgot - a story of time travel - Rahul De
All major mainstream databases are updated in-place and have a notion of NOW rather than a progression of time. They are supposed to be a reflection of real life, but are they really? When you save a Customer and their address changes, does that mean they never used to live at the old place? What if your DB started behaving like a git repo instead and recorded each change as a series of changes or facts? What if you could time travel in the DB and look back at any point of time? And do it with the similar performance as any of the usual DBs? What if CRUD isn't the right way of thinking of DBs? Let's discuss DBs which make this possible and not only radically change your thought process about data and facts but also simplify everything around the DB: the app, the infra and the monitoring tooling! Let's be functional at the disk too and not just the app.
12:25 BST | 13:25 CEST: Building reliable data pipelines without access to real data - Arne Lapõnin
Constructing systems that move data from one place to another, also called data pipelines, rely heavily on developers taking into account the intricacies of the data they are planning on moving. One of the common risks across all data pipeline projects is not having access to realistic or production data. This talk will be about how we have been mitigating this risk at a project I have worked on. Our actions have centred around thoroughly testing our system and making sure the system catches unexpected data and is able to recover from it. It has led us to question how does one strike a balance between generating big amounts of synthetic data and testing everything in the system vs delivering business value at a reasonable pace.
13:10 BST | 14:10 CEST: Break (20 minutes)
13:30 BST | 14:30 CEST: Overheard in Infra; conversations about building software - Chris Shepherd and Poppy Rowse
When creating infra products, organisations tend to forget about product thinking and Agile ways of working. In this session we will role play a series of conversations we've heard when building infrastructure products including the classic "we don't need to do a discovery, we already know what we're going to build". We'll dissect a bunch of different themes and ideas and hopefully propose some better ways to ensure you're building the Right Thing for the Right People.
14:20 BST | 15:20 CEST: JVM: Internal details that you thought you didn't need - Anupriya Johari and Rahul De
We as users of the Java Virtual Machine via Java, Clojure or any of the other languages often take this thing for granted. The 25 years that went into making this beast has created something that is truly wonderful and this talk is about knowing not only how to drive the car but also how it works. We truly believe that would make us better drivers. Let's delve into the details of what makes this the most widely used platform, the sophisticated just in time compilation system and the new upcoming features like the Project Loom and the GraalVM.
15:10 BST | 16:10 CEST: Data pipelines for creating seamless data stores - Dexter Barnes and Martin McCaffery
A case study of gathering a variety of types of data from multiple third party sources, translating it into the business domain and making it available to multiple customers. We used Lambdas, Glue Jobs, Kinesis Streams and more to collect and translate batches, streams and aggregated stores of data into flexible resources that could be searched seamlessly by the business for a range of purposes.
CLOSING KEYNOTE | 16:00 BST | 17:00 CEST: Music-as-code performance - Chris Ford
You've spent all day wrestling with better ways to write code. You've listened to enthusiastic software practitioners discuss the latest developments in backends, frontends, data and infrastructure. Now sit back and relax as Chris live codes some music and streams it across the internet for your listening pleasure.
The way it works is that Chris will write little functional programs in Clojure that define melodies, chords and beats. He'll edit the code as it's executing, producing progression, variation and very possibly a NullPointerException or two. But all you have to do is watch and listen. (And along the way he hopes to make the keytar cool again!
17:00 BST | 18:00 CEST: Farewell
We ask for cooperation from all participants to help ensure a safe environment for everybody virtually attending the event, as a reminder you can find out Code of Conduct here. There will be live captioning for this event alongside a Spanish audio option. If there is anything we as organizers can do to make this event more accessible to you, please let us know.