Workshops

Ultimate Software Design with Kubernetes

Bill Kennedy

Managing Partner, Ardan Labs Instructor

When

Tuesday June 18, 09:00-18:00

Level

Intermediate

Summary

As a program evolves and acquires more features, it becomes complicated, with subtle dependencies between components. Over time, complexity accumulates, and it becomes harder and harder for programmers to keep all the relevant factors in their minds as they modify the system. This slows down development and leads to bugs, which slow development even more and add to its cost. Complexity increases inevitably over the life of any program. The larger the program, and the more people that work on it, the more difficult it is to manage complexity." - John Ousterhout

This class teaches you how to build production-level software in Go leveraging the power of a domain-driven, data- oriented architecture that can run in Kubernetes. From the beginning, you will program along with the instructor as he walks through the design philosophies and guidelines for building software in Go. With each new feature added to the project, you will learn how to deploy to and manage the Kubernetes environment used to run the project. The core of this class is to teach you how to handle and reduce the spread of complexity in the systems you are building.

What a student is expected to learn

Introduction to the class and all the engineering that you will learn.

  • Design Philosophy, Guidelines, What to Expect
  • Tooling to Install
  • Images to Install

Deploy First Mentality: We begin to build the service with a focus on the ability to deploy the service in Kubernetes.

  • Project Layers, Policies, and Guidelines
  • Prepare Project
  • Logging

Kubernetes: We introduce Kubernetes and get a K8s environment up and running. At this point, everything we do runs in the K8s environment.

  • Clusters, Nodes and Pods
  • Start the Kubernetes Cluster
  • Create/Build a Dockerfile for the Service
  • Create/Apply K8s Deployment for the Service

Kubernetes Quotas: We introduce applying Quotas to the deployment and discuss the problems that can result.

  • Understanding CPU Quotas
  • Understanding the Go Scheduler
  • Adjust GOMAXPROCS to maximize performance

Domain-Driven, Data-Oriented Architecture: We talk about the data-driven, data-oriented architecture that is implemented in the project. We discuss the design philosophy, guidelines, and semantics of how the three layers of App, Business, and Storage work together.

  • Architecture Review
  • Data Flow Trust vs Non-Trust

Prerequisites

  • It is expected that you have been coding in Go for several months.
  • A working Go environment running on the device you will be bringing to class.

Recommended Preparation

  • Please clone the main repo for the class: github.com/ardanlabs/service
  • Please read the notes in the makefile for installing all the tooling and testing the code before class.
  • Please email the instructor for assistance: bill@ardanlabs.com

Bio

William Kennedy is a managing partner at Ardan Labs in Miami, Florida. Ardan is a group of passionate engineers, artists and business professionals focused on building and delivering reliable, secure and scalable solutions. Bill is also the author of Go in Action and the Ultimate Go Notebook, plus the author of over 100 blog posts and articles about Go. Lastly, he is a founding member of GoBridge and the GDN, which are organizations working to increase Go adoption through diversity.



ULTIMATE GO

Miki Tebeka

Go Trainer, Ardan Labs, Instructor

When

Tuesday June 18, 09:00-18:00

Summary

This workshop is based on "Ultimate Go" by Bill Kennedy. It is aimed at developers who have experience with Go and want to understand how to write more efficient code and understand data semantics and concurrency patterns. We'll cover many coding best practices that help write precise code.

Some of the topics we'll cover are:

  • Programming vs engineering
  • Polymorphism with interfaces
  • Using generics to reduce code size
  • Using concurrency
  • Performance optimization (both CPU & Memory)

Prerequisites

You should have experience writing Go code. You should have the following installed on your machine:

  • Go SDK
  • IDE such as VSCode with the Go extension or Goland
  • Git
  • Graphviz

Bio

Miki is an old Gopher and even older developer :) He spends his time teaching (either via his company or via ArdanLabs), writing books, creating video courses, blogging and of course - writing code (either open source or for customers). Miki is one of the organizers of GopherCon Israel and the Go Israel Meetup.



Go for Experienced Programmers

Johnny Boursiquot

Software, Reliability, and Cloud Systems Engineer, Instructor

When

Tuesday June 18, 09:00-18:00

Level

Intermediate to Advanced

Summary

You're an experienced programmer looking to get up and running quickly with Go. You want the knowledge, tools, and techniques to write idiomatic, professional-grade Go using fun exercises that get you comfortable with the language and its ecosystem. This is the workshop you're looking for.

This immersive and hands-on workshop equips you with the essential knowledge and practical experience to become a proficient Go developer. Throughout this intensive training, you'll discover the core principles and advanced techniques that make Go a standout language for building robust and high-performance applications.

What a student is expected to learn

  • Comprehensive Introduction: Gain a solid understanding of Go's syntax, data types, control flow, and package management system.
  • Go Tools: Get to know the tool chain for building, testing, benchmarking, and profiling your programs.
  • Effective Error Handling: Discover Go's approach to error handling and techniques for creating robust, failure-resistant code.
  • Testing: Use the standard library package and other community favorites along with advanced techniques for testing.
  • Benchmarking: Take advantage of built-in performance optimization tools.
  • Generics: Understand how to leverage parametric polymorphism to remove boilerplate from your code.
  • HTTP Servers and Clients: Learn how to write resilient servers and clients along with techniques such as throttling and backoff.
  • Concurrency: Learn how to use goroutines, channels, and how thread synchronization works. Leverage techniques such as worker pools, semaphores, and pipelines to take full advantage of Go concurrency.
  • Dependency Management: Go beyond the standard library to work with third-party packages securely. You'll publish your own packages, learn to isolate your CI build from repository outages, and more.
  • OpenTelemetry: Build observable Go applications by instrumenting them to emit traces and metrics.

Some of what you'll work on during the workshop

  • Build command line tooling
  • Build a REST API with a Database
  • Write a Highly-Concurrent Port Scanner
  • Write a Load Balancer
  • Build a URL Shortener and deploy with AWS Lambda and DynamoDB
  • Work with Large Language Models (LLMs) in your projects

Prerequisites

  • Complete the Go Tour
  • Browse through Go by Example
  • Introduce yourself to OpenTelemetry (optional but recommended)
  • Introduce yourself to LLMs concepts

Preparation

  • Have a GitHub account
  • Have an OpenAI account
  • Have an AWS account and the awscli configured locally (the services we use will fit comfortably with the free tier AWS provides)
  • Install Docker
  • Have a functioning Go environment installed with Go 1.22 or later
  • Use an editor/IDE with Go plugin installed

Bio

Johnny Boursiquot is a multi-disciplined Software, Reliability, and Cloud Systems Engineer with over two decades of experience across various client, server, and cloud infrastructure technologies. He has been part of multiple startup founding teams and worked at large, market-leading Fortune 500 technology companies. Johnny has authored technology courses, collaborated on books as a co-author and technical reviewer, and provided corporate training to large technology companies. Currently, he works extensively with Go (golang), AWS (ECS, Fargate, Lambda, CloudFormation, etc.), Microservice Architectures, and Serverless Architectures. He also teaches these technologies professionally on platforms like LinkedIn Learning, O'Reilly, Packt, and others, and offers programming workshops at no cost to learners in his local community whenever possible.



Go Design

Ronna Steinberg

Tech Lead at Upvest, Instructor

When

Tuesday June 18, 09:00-18:00

Level

Beginners

Summary

Learn how to design robust Go applications that are simple and easy to maintain! In this hands-on workshop we will cover (and appreciate) the different philosophies that went into the language, and how they support us in making our design choices. This workshop is ideal for anyone looking to expand their design skills, or struggling to expand their Go codebases, as well as for people new to Go who are looking to get an idea of how to work with it.

What a student is expected to learn

In order to dive into the different design philosophies in Go, we will go over Go’s type system, interfaces, packages, and generics, as well as some other lesser utilized capabilities of the language, and see how they contribute to our design decisions. We will also learn how to write testable asynchronous code (and how to test it). If passing functions as variables (first-order functions) is your thing, we will also learn how to do it well, and particularly how to ensure that your code remains maintainable.

To those who missed it, this workshop also covers topics from the sold-out GopherCon Europe 2023 workshop: “Object-Oriented Design with Go”.

Expect to expand your toolkit to design your projects to express and do exactly what you intend for them to do. This is a hands-on workshop so get ready to code.

Who is this workshop for?

Some coding experience in any programming language and basic familiarity with the Go programming language are ideal, if you are completely new to Go you can go over "A Tour of Go".

Bio

Ronna is a tech lead at Upvest, a Google developer expert for the Go programming language, a Women Who Go organizer and GoTime’s unpopular opinion hall of famer and has been crafting hands-on workshops in Go since 2017. After 20 years of software development Ronna knows that she is the sum of the opportunities that were given to her which is why she helps others to do the same.