Ultimate Software Design with Encore

Ultimate Software Design with Encore

Jun 10th, 2024

11:00AM - 4:00PM EST

Remote

This course teaches you how to build production-level services in Go, leveraging the power of a Domain Driven, Data Oriented Architecture deployed in Encore.

Price: $300 - $595

Enroll Now

When: June 10th - 14th, 2024

Schedule: 5 Days/ 5 Hours, from 11am to 4pm EST (GTM - 5)

Where: Online - Zoom Meeting


We have a special offer running for this training: GET 2 TICKETS for the PRICE OF 1

Ticket Prices:

  • 2 FOR 1 - Pay $600 and Get 2 Seats: $300 Each
  • Individual Ticket Holder - $595

NOTE: If you want a 2x1 ticket but don’t have someone, send us an email, and we will pair you for the reduced price.


Description: This course teaches you how to build production-level services in Go, leveraging the power of a Domain Driven, Data Oriented Architecture deployed in Encore. From the beginning of the course, you will pair-program with your instructor Bill Kennedy as he walks you through the design philosophies, architectural decisions, and best practices as they apply to engineering a production-ready Go service.

With each new feature that is added to the service, you will learn how to deploy and manage the Kubernetes environment used to run the service. Throughout the class, the code being worked on is pushed to a repository for personal access and review.

For further class information, please see the class schedule or review the self-study options.

What a student is expected to learn:


1.0 - Introduction

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

  • 1.1: Design Philosophy, Guidelines, What to Expect
  • 1.2: Tooling and Images to Install

2.0 - Deploy First Mentality

We begin to build the service with a focus on the ability to deploy the service in Kuberenetes.

  • 2.1: Project Layers, Policies, and Guidelines
  • 2.2: Prepare Project
  • 2.3: Build Encore Service with Logging
  • 2.4: Add Test API Handler
  • 2.5: Deploy to Encore Cloud

3.0 - Finish Initial Service Startup/Shutdown

We finish the initial startup and shutdown of the service.

  • 3.1: Configuration
  • 3.2: Debugging / Metrics

4.0 - Middleware

We add middleware functions for business-level logic that needs to be injected into the processing of requests.

  • 4.1: Panic Handling
  • 4.2: Metrics

5.0 - JSON Web Tokens (JWT) and Open Policy Agent (OPA)

We gain an understanding of how JWT’s work and their shortcomings. We also learn about OPA and how we will use it to perform the actual authentication and authorization.

  • 5.1: Understanding JWT
  • 5.2: Private/Public Key Generation
  • 5.3: Token Generation
  • 5.4: Token Signature Validation with OPA

6.0 - Encore Secrets

We create add a secret for the private key.

  • 6.1: Secret Support

7.0 - Authentication / Authorization

We integrate authentication and authorization support into the project by developing a packages to generate and validate tokens. Then we integrate the packages into the application and test things are working.

  • 7.1: Auth Package
  • 7.2: Auth Unit Test
  • 7.3: Add Middleware
  • 7.4: Auth Service

8.0 - 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.

  • 8.1: Architecture Review
  • 8.2: Data Flow Trust vs Non-Trust

9.0 - Database Support

We add a Postgres database to our Encore environment. Then we write a small database package that provides support for using the SQLx package more effectively. Finally, integrate the database package on application startup.

  • 9.1: Encore Support for Postgres
  • 9.2: Create Database Package
  • 9.3: Update Readiness Handler to Perform DB Checks

10.0 - Database Migrations and Seeding

We define our schema and provide support for migration schema changes over time. We also provide support for seeding the database. Finally, we add support in Encore to run the migration and seeding on POD startup.

  • 10.1: Maintaining Database Schemas and Seeds
  • 10.2: 10.2: Admin Tooling and Init Containers to Automate Migrations

11.0 - API, App, Business, and Storage Domain Implementation

We implement the User domain inside the App, Business, and Storage layers.

  • 11.1: User Business Domain Support
  • 11.2: User Storage Domain Support
  • 11.3: User App Domain Support
  • 11.4: User API Domain Support

12.0 - Testing

We add docker and unit testing support for writing tests against a real database and write the actual user package tests.

  • 12.1: Starting and Stopping Containers
  • 12.2: Database Testing Support
  • 12.3: Unit and API Testing Support
  • 12.4: Write User Business Test
  • 12.5: Write User API Tests

13.0 - Delegate and Transactions

We talk about how the delegate and transaction systems work.

  • 13.1: Delegate System
  • 13.2: Transaction System

14.0 - Review Service Project

Review service project and get it running

  • 14.1: Check For Dependcy Upgrades, Rebuild, Run

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.

  • Please clone the main repo for the class.

  • Please read the instructions in the makefile for installing everything before coming to class.

  • Please email the instructor, Bill Kennedy, for assistance.

  • Computers should be capable of modern software development, such as access to install and run binaries, install a code editor, etc.


Why Engineers & Teams Trust Ardan Labs

Cisco Logo

Extremely well organized and high value

"The course is extremely well organized and the pace is also very conducive to the learning process. The exercises are very well organized. Delivered very high value."

- Cisco
Kelsey Hightower's Photo

Best training in the Go community

"You should reach out to the team over at @ardanlabs. They have been training the Go community since the beginning and I've yet to see anyone do it better."

- Kelsey Hightower
Jessica Greene's Photo

Go features that made work better

"Feeling so happy with myself: yesterday at work I refactored some code to use @golang 1.16 built-in, embed I learned about it at @ardanlabs service class."

- Jessica Greene
Zip Recruiter Logo

Well-structured and useful advice

"Excellent class. The instructor is a hacker speaking to hackers, so we got very useful information and advice. Well-structured and paced. 10/10 would gopher it again."

- Zip Recruiter
Adeniyi Oluwatola's Photo

Best ever—learned to build great services

"I finished Ultimate Service from @ardanlabs. I'm telling you this was the best ever. Talking from project structures to metrics. Now I can write good services in Go."

- Adeniyi Oluwatola
Steve Francia's Photo

Improved productivity with Go

"Thanks @ardanlabs for a great Ultimate Go class! Bill is a great teacher and I'm definitely more productive in Go now."

- Steve Francia
Matt Holt's Photo

Complex topics explained clearly

"Highly recommend Ultimate Go by @goinggodotnet & @ardanlabs. I appreciate how Bill explains complex topics simply and clearly. The labs were incredibly helpful too."

- Matt Holt
Cole Calistra's Photo

Well documented and well structured

"Their quality is astounding. They went above and beyond what we asked, working in line with best practices. Everything had test cases, was well documented and well structured, and ran smoothly.”

- Cole Calistra
See What's New

From the Lab

Where ideas get tested and shared. From the Lab is your inside look at the tools, thinking, and tech powering our work in Go, Rust, and Kubernetes. Discover our technical blogs, engineering insights, and YouTube videos created to support the developer community.

Explore our content: