Please contact me if you’re interested in having me speak at your event.
|Real World Expression Trees in C#||February 2019||NDC Porto||Porto, Portugal|
|Workshop: Building RESTful APIs with ASP.NET Core and C#||May 2019||NDC Minnesota||Minneapolis, MN, USA|
|Real World Expression Trees in C#||May 2019||NDC Minnesota||Minneapolis, MN, USA|
|Real World Expression Trees in C#||June 2019||NDC Oslo||Oslo, Norway|
|TBA||September 2019||DevConf Poland||Kraków, Poland|
Notable past events
|Using Immutable Data Structures in C#||September 2018||DevConf Poland||Kraków, Poland|
|The Hello World Show LIVE||September 2018||DevConf Poland||Kraków, Poland|
|Workshop: Building Single Page Apps Using React and ES6||September 2018||DevConf Poland||Kraków, Poland|
|Versioning and Maintaining Your REST API in ASP.NET Core||July 2018||KCDC||Kansas City, MO, USA|
|Deconstructing TypeScript's Type System||June 2018||NDC Oslo||Oslo, Norway|
|The Hello World Show LIVE (video)||January 2018||NDC London||London, England|
|An Opinionated, Maintainable REST API Architecture for ASP.NET Core (video) (slides/info)||June 2017||NDC Oslo||Oslo, Norway|
|Never RESTing – RESTful API Best Practices using ASP.NET Web API (video) (slides/info)||January 2017||NDC London||London, England|
For my full past speaking history, click here.
Designing and building RESTful APIs isn’t easy. On its surface, it may seem simple – after all, we’re only marshaling JSON back and forth over HTTP right? However, that’s only a small part of the equation. There are many things to keep in mind while building the systems that act as the key to your system.
In this session, we’ll delve into several best practices to keep in mind when designing your RESTful API. We’ll discuss authentication, versioning, controller/model design, and testability. We’ll also explore the do’s and don’t’s of RESTful API management so that you make sure your APIs are simple, consistent, and easy-to-use. Finally, we’ll discuss the importance of documentation and change management.
The session will show examples using ASP.NET Web API and C#. However, this session will benefit anyone who is or might be working on a RESTful API.
Versioning and Maintaining Your REST API in ASP.NET Core
When tasked with making a REST API for your system, you'll inevitably have to think about versioning. One of the most difficult parts of API maintenance, versioning is an essential conversation to have about the future of your API, even before you hit File -> New Project. Do you version in the URL (v1/api/whatever)? Do you use header versioning? Should I update my production API in place?
In this session, Spencer will provide several strategies and real world examples of API versioning done right... and wrong. We'll discuss versioning strategies such as header versioning and URL versioning, as well as best practices on how to intelligently version your REST API without tearing your hair out... or making your consumers tear their hair out.
In this session, Spencer will discuss the advanced type features of TypeScript, including intersection types, type guards, nullable types, type aliases, string literals, and discriminated unions. We’ll also discuss ways to take full advantage of TypeScript’s compile-time checking to ensure your code is clean and safe.
Writing a brand-new RESTful API using ASP.NET has never been easier, or so you’ve been led to believe. Create a project, write a few models, and scaffold – instant API for your website! While convenient, this leads to a lot of pain as your API scales. Testability and maintainability become more and more difficult as your codebase continues to expand. Eventually, you’re left with a huge mess of code and zero separation of concerns.
In this session, Spencer will provide a highly-opinionated and easy-to-learn pattern for creating scalable, maintainable APIs powered by ASP.NET Core. Attendees will learn about dependency injection, validating requests, executing requests via services, error handling, and versioning strategies to make sure your API lasts for the long haul.
Entity Framework is the de facto data access standard in .NET, and for good reason – its simplicity and power enables anyone to quickly write and execute strongly-typed queries using LINQ. Have you ever wondered how Entity Framework translates even the most complicated of LINQ queries to SQL? The answer is simple – expression trees.
Used by many libraries we know and love (including EF, AutoMapper, and NHibernate), expression trees provide a lot of power in an easy-to-use API surface. In this session, Spencer will unravel the mysteries of expression trees. Attendees will learn what expression trees are, how to create them, and how libraries like Entity Framework and AutoMapper use them to perform routine tasks.
Using Immutable Data Structures in C#
Immutable objects - aka objects whose properties and fields can't change after instantiation - are one of the fundamental pillars of functional programming. Yet, it also has other great uses in classically object-oriented languages such as C#. Immutability can help make your code cleaner, easier to reason about, and reduce runtime errors. But how can you do that without making it feel like you're fighting against the typically-mutable C# and the entire .NET Framework?
In this session, Spencer will discuss immutability and how you can apply it in your day-to-day as a .NET/C# developer. We'll go over immutable objects, immutable collections, and how you can refactor your code to successfully apply immutability to your exisitng codebase. Spencer will also discuss the implications of introducing immutability to your code, both positive and negative.
Three Rewrites, One Startup - An Architect’s Journey
Picture this: you're a senior engineer at your company who, one day, is thrust into the architect role. Suddenly, you're having to think about things that you've never thought about - what's the difference between a microservice and a service bus? How do I design a scalable system for tomorrow without overengineering today?
Better yet, if you're at a startup, do all that - and still be responsible for code reviews, development, and coaching of junior devs. How can a fledgling architect possibly "do it all" - and more importantly, do it well?
Luckily, someone has gone down that path (and is still going)... and he's ready to share his story.
Attend Spencer's talk and hear about how he, as a senior engineer, had to grow into the architect role. We'll discuss the problems faced, the critical "decision points" he made from an architecture standpoint, the results of those choices, and how he helped guide the business through three architectural rewrites - all in a span of four years!
Evolution of an Architecture - Going from one-time Project to Million Dollar Startup
What happens when you take a small, one-off project for a customer and say to yourself, "this could be a product"? Besides the excitement of possibly building a whole new company, you're faced with a slew of technical choices. What do you do with the old code base? What do you have to build to make sure it scales properly, both from a performance and a developer perspective? Where do you invest your time in building something for the long haul and where do you cut corners, faced with having to balance multiple hats? How do you evaluate the possibility of the - gasp - rewrite?
In this talk, Spencer explores the evolution of the architecture at his startup. We'll discuss the decisions he faced as senior-dev-turned-architect and how he made the choices he made - both good and bad. From technical blunders to big impacts, this is guaranteed to be a wild ride!
Workshop: Building Web Apps with ASP.NET Core
ASP.NET Core is the latest web framework offering from Microsoft. Open source and cross-platform, ASP.NET Core is the best web development platform for building web and cloud based applications on Windows, Mac and Linux.
This workshop is fully hands-on with guided exercises designed to get you productive in ASP.NET Core quickly. Whether you’re new to ASP.NET or are a seasoned ASP.NET developer, this workshop will have something for everyone. We'll discuss creating new projects, services, dependency injection, middleware, logging and diagnostics, Razor views, web APIs, and single page apps in this comprehensive jump-start to ASP.NET Core.