GOTO is a vendor independent international software development conference with more that 90 top speaker and 1300 attendees. The conference cover topics such as .Net, Java, Open Source, Agile, Architecture and Design, Web, Cloud, New Languages and Processes

Sam Newman, Technical Consultant at ThoughtWorks

Sam Newman

Biography: Sam Newman

Sam Newman is a technical consultant at ThoughtWorks, where he has been for over nine years. As a consultant has worked with a variety of companies in multiple domains in the UK, Australia and the US. If you asked him what he does, he’d say ‘I work with people to build better software systems’.

He has written articles for O’Reilly, presented at conferences, and sporadically commits to open source projects. While Java used to be his bread and butter, he also spends lots of time with Ruby, Python, Javascript, and Clojure, Infrastructure Automation and Cloud systems.

Presentation: From Macro to Micro: How Big Should Your Services Be?

Track: Architectures / Time: Monday 13:20 - 14:10 / Location: Rytmisk Sal, Musikhuset

This session will briefly introduce the concept of microservices, and why they are important. But then we'll focus on the tough questions. If you're starting with a big, monolithic system, how should you split it up? When are microservices right for you? This talk looks at the competing forces from Conways law to Operations, which can help you make the right decisions about service granularity and just how 'micro' you should go.

Workshop: Micro Services

Track: Training / Time: Thursday 09:00 - 16:00 / Location: Uni 2

Write programs that do one thing and do it well. Write programs to work together” was accepted 40 years ago yet we have spent the last decade building monolithic applications, communicating via bloated middleware and with our fingers crossed that Moore’s Law keeps helping us out. There is a better way.

Micro services. In this tutorial we will discover a consistent and reinforcing set of tools and practices rooted in the the Unix Philosophy of small and simple. Tiny applications, communicating via the web’s uniform interface with single responsibilities and installed as well behaved operating system services. So, are you sick of wading through tens of thousands of lines of code to make a simple one line change? Of all that XML? Come along and check out what the cools kids are up to (and the cooler grey beards).

In this tutorial we will cover the following topics:

Principle-driven evolutionary architecture
Capability modelling and the town planning metaphor
REST, web integration and event-driven systems of systems
Micro services, versioning, consumer driven contracts and postels law
Testing, Building and continuous delivery
Operational concerns

Workshop: Continuous Delivery

Track: Training / Time: Friday 09:00 - 16:00 / Location: Uni 1

Getting software released to users is often a painful, risky, and time-consuming process. This tutorial sets out the principles and technical practices that enable rapid, incremental delivery of high quality, valuable new functionality to users. Through automation of the build, deployment, and testing process, and improved collaboration between developers, testers and operations, delivery teams can get changes released in a matter of hours–sometimes even minutes–no matter what the size of a project or the complexity of its code base.

In this tutorial we take the unique approach of moving from release back through testing to development practices, analyzing at each stage how to improve collaboration and increase feedback so as to make the delivery process as fast and efficient as possible. At the heart of the tutorial is a pattern called the deployment pipeline, which involves the creation of a living system that models your organization's value stream for delivering software. We spend the first half of the tutorial introducing this pattern, and discussing how to incrementally automate the build, test and deployment process, culminating in continuous deployment.

In the second half of the tutorial, we introduce agile infrastructure, including the use of Puppet to automate the management of testing and production environments. We'll discuss automating data management, including migrations. Development practices that enable incremental development and delivery will be covered at length, including a discussion of why branching is inimical to continuous delivery, and how practices such as branch by abstraction and componentization provide superior alternatives that enable large and distributed teams to deliver incrementally.