Jonathan "J." Tower
Partner & Principal Consultant, Trailhead Technology Partners
Grand Rapids, Michigan, United States
Jonathan, or J as he's known to friends, is a husband, a father, and the owner of Trailhead Technology Partners, a custom software consulting company with employees all around the world. He is also a Microsoft MVP in .NET and frequently speaks at software meetups and conferences. He doesn't mind too much because he loves sharing what he’s learned, and it also gives him an excuse to visit any nearby National Parks, a passion of his, proven by the fact that he's currently made it to 52 of the 63 parks.
J also has a passion for building community and has served on several non-profit boards over the years as a result. Currently, J sits on the SoftwareGR board, a non-profit trade organization dedicated to building the software industry in West Michigan. He also runs Beer City Code, a software conference, and has served as president on that board for over a decade. J loves hiking, reading, photography, and trying to see all the best picture nominees before the Oscars ceremony.
Area of Expertise
Say Goodbye to Controller Classes with ASP.NET Core's Minimal APIs
The MVC-style pattern we've used for APIs for years isn't the only way to create API projects in .NET anymore. In fact, you never have to create another controller class again, and what's better is, you won't miss them!
Come learn about ASP.NET Core's Minimal APIs and see how moving your API code from controllers will help make your code more maintainable, better organized, and cleaner.
Nuget Packages Every .NET Dev Should Know About
There’s nothing worse than finding out about a great library after it’s too late to use it for your project. Don’t miss out; join us as we look at an overview of some of my favorite Nuget packages, all of which can quickly and elegantly help you solve common problems that we .NET developers face.
Data access, validation, list manipulation, design patterns, testing, fault tolerance—we’ll cover a little bit of everything, and you’ll walk away knowing a list of tools you may have not heard of before, and knowing how and when to use them in your projects.
Multi-Tenant Architecture for .NET Web APIs
Some applications aren’t a good fit for NoSQL. If you’re doing a large-scale .NET project that is a better fit for relational databases like SQL Server, how do you set it up to scale well?
In the session, I’ll recount some of the useful lessons I’ve learned building highly scalable .NET APIs that are built using traditional relational databases. We’ll discuss multi-tenancy, shared databases, shared data, microservices, and CQRS, among other useful design patterns, architectures, and tools.
Faster .NET Web APIs with Redis Caching
Are you suffering from slow web APIs in .NET? Is your database overloaded or the bottleneck in your application? If any of those are true for you, it's likely that adding a caching layer to your APIs will help solve the problem.
In this session, we’ll look at APIs built with .NET and what makes them slow. I'll show you what makes an endpoint a good candidate for in-memory caching, and show you how adding it can help alleviate performance problems. We'll look at Redis and why it's such a good option for your in-memory cache. Finally, we’ll discuss some of the common pitfalls of caching implementations and explore the best tooling and libraries to help ease your Redis caching implementation in .NET.
Avoid Common Microservices Mistakes Made by .NET Developers
.NET developers who are familiar with monolithic applications often make the same mistakes when they set out to build their first microservices application. As microservices become a more important architecture for building highly scalable applications, it is becoming more important for developers to learn how to properly design and implement them.
In this session, we'll review a sample .NET application that has been set up as well-designed microservices. We'll use it as an example of what to do, and what NOT to do when you're building your own microservices architectures in .NET.
Migrate Your Legacy ASP.NET Projects to ASP.NET Core Incrementally with YARP
YARP (Yet Another Reverse Proxy) might have a funny name, but it a very serious tool when it comes to helping you upgrade your legacy ASP.NET projects to ASP.NET Core. The best part is, it helps you do the upgrade gradually, and with minimal impact to your users.
In this session we'll explore using YARP, and how it uses the "Strangle Fig Pattern" to allow you to incrementally migrate your applications to modern technologies. We'll look at the tooling that is available to help you with the migration, and see some shims that make it easier to integrate cross-cutting concerns between your legacy and modern application, such as session storage and authentication.
Improving Your Validation Game with Fluent Validation for .NET
Just about every application needs some sort of validation in it. If you’re a .NET Developer, you’ve no-doubt mostly been doing validation using the data annotation attributes from the System.ComponentModel namespace. These attributes are built-in to .NET by default, and can work well in some situations, but there’s also another option that can be better in several important ways
In the session, we’ll exploring the advantages of using Fluent Validation in your C# and .NET applications. This method of validation creates cleaner code that better follows the single-responsibility principle, gives you more control over custom validation, can be fired conditionally, makes unit testing easier, and even includes client-side support for web apps. If your .NET validation game has gotten a little stale, come see how to step it up with fluent validation.
Improving the Security of JSON Web Tokens with Refresh Tokens.
Are you using JWT tokens to secure your .NET web APIs? Are you also worried about the security of using long-lived tokens or about possible holes in your token refresh implementation?
If that sounds like you: fear not—all your answers are here in this session. Join me as I cover all the JWT and refresh token best practices, and help you make sure you’re following them. We’ll even look at a real token and refresh implementation which you can build off of in your projects. Join us, and make sure you’re not making a mistake with this common security technology.
Don’t Build a Distributed Monolith: How to Avoid Doing Microservices Completely Wrong
As a consultant, I get to see many systems built by many different developers. Recently, I’ve seen an uptick in the number of systems built with a microservice architecture in mind, but those systems often include a lot of the same mistakes that keep them from working well.
In this session you’ll learn from my experiences and get pointers on what to avoid in your microservices implementations so that you don’t accidentally build something which has all the worst aspects of a monolithic application and the worst aspects of microservices These monsters are what I call “distributed monoliths”, and I can help you avoid building one accidentally.
Cloud-Native Architecture for .NET Developers
If you're a .NET Developer, you're probably used to building applications with technologies like ASP.NET, Entity Framework, SQL Server, IIS, and other related ones. But, the cloud is quickly changing the way application are built, and allowing us to write software that is much more performant and scalable than ever before. Will those skills translate to this new world?
Come learn how to apply your existing C#, .NET, and relational database knowledge to the world of cloud-native application development. We'll look at an overview of the technologies that are likely to change the way we develop applications in the future--things like static sites generation, the JAMStack, serverless applications with Azure Functions, and cloud-scale databases with SQL Azure and CosmosDB.
If you're a .NET Developer, you don't have to be afraid of the cloud's impact on your future. I'll show you how you're already set up for success in the cloud.
Choose Your Own Adventure: Lessons Learned from an Unusual Journey
A pro-adventure mindset can lead to exciting opportunities in both your personal and professional life. Join me as I share my unusual story of taking a leap of faith and embarking on a year-long RV adventure across the USA.
During my journey, I learned how having a pro-adventure mindset is essential for unlocking new opportunities and taking risks that can lead to both personal and professional growth. I'll show you how my own outside-the-box thinking led to my incredible experience of traveling to all 48 states while living in an RV and working remotely, plus how it changed my personal and professional trajectory.
By hearing my story, I hope you'll be inspired to see your own career and life path in a different light, and be encouraged to step out of your comfort zone to discover your own adventure. Don't miss this chance to learn about how embracing a pro-adventure mindset can help you achieve your wildest dreams!
Adding Redis Caching to Your .NET Web API
Are you suffering from slow web APIs in .NET? Is your database overloaded? It’s quite likely that adding a caching layer to your application will help with both of those problems.
In this session, we’ll learn about what causes slow APIs and overloaded databases, and see how caching can help alleviate these problems. We’ll discuss some of the common pitfalls of caching implementations and explore all the best tooling and libraries you can use to ease your Redis caching implementation in .NET.
Dotnet CLI or: How I Learned to Stop Worrying and Love the Command Line
If you’ve been using Visual Studio for years like I have, you’ve probably also grown accustomed to the “walled garden” experience that it provides. With .NET Core’s successfuly moves toward being cross-platform support for Linux, Mac, and Windows, the command-line interface (CLI) for .NET Core has become an even more important piece of the puzzle than ever before.
In this session, we’ll work through all the basic workflows for a .NET developer–but all all without the help Visual Studio. By the end, you will be able to create, build, publish, test, run, and package projects, as well serveral other common tasks like database migrations, or using third-party CLI tools.
A Data Access Layer You're Proud of without Entity Framework
If you're a .NET developer, it almost goes without saying that you use Entity Framework as part of the data access code on your software projects. Sometimes, EF is just right for the job, but other times you want something more simple, with better control of the generated SQL queries, and more performant. Over the years, several micro-ORMs (object relationship mappers) have evolved for just this purpose. Sometimes the simplest solution is the best one.
I'd like to walk you through a few of the more popular .NET micro-ORM options so you can see how you can make a simple, high-performance, and easy to use data access layer that you can be proud of.