BackBack to Blogs

NDC Virtual Conference 2020

NDC Minnesota has been a staple in Omnitech's learning environment for the past couple of years. It's something that we look forward to, a place our developers can go to learn new and exciting skills, and to bring that knowledge back and share it with the rest of our team.

This year NDC looked a little bit different. Typically, NDC Minnesota is held in Minneapolis/St. Paul. This time, however, due to Covid-19 concerns, the conference went virtual. Instead of traveling to Minnesota, the four engineers we sent to the conference tuned in from Omnitech.

Despite the virtual setting, our engineers still learned a lot and had a great time. During the four days of the conference, they attended a variety of workshops. Topics covered included Azure, Docker, Kubernetes, Open Id Connect, Oauth, gRPC, GraphQL, Test Driven Development, new C# language features, C# memory, Cypress UI Testing, and API Management. Here are some of the key takeaways they had throughout the conference.


Throughout the conference, I attended workshops that focused on .NET Core in Azure with Docker and Kubernetes, GraphQL in .NET Core, and Authentication and Authorization in .NET Core. 

The highlight of the conference for me was the two-day workshop on authentication and authorization. It was led by Brock Allen, one of the co-authors of IdentityServer. IdentityServer is a framework for .NET Core that plugs into an application's middleware pipeline and implements the OpenID Connect and OAuth 2.0 spec.

We focused on foundational concepts of identity management in web development during the first day of the workshop. We learned about cookies, sessions, roles, policies, and how .NET has handled these concepts throughout the years. Then, during the second day, we transitioned into the challenges that applications face with modern authentication requirements and how OpenID Connect and OAuth 2.0 have evolved to handle these scenarios. We learned about the different OIDC and OAuth flows and

how to setup IdentityServer4 in .NET Core. By the end, we had gained a solid understanding of how to architect distributed identity solutions.


This year's NDC was different than my previous experience. Usually, a conference is broken into two parts: pre-conference workshops and conference sessions. The workshops allow for a depth of knowledge in a narrow topic. The conference sessions allow for a breadth of knowledge across a range of topics. The sessions will enable you to get a view of trends within the industry.

Going to an all workshop format was an interesting change of pace, allowing me to deep dive into Test Driven Development, GraphQL, Docker, and Kubernetes. The Docker and Kubernetes workshop was easily my favorite as it was packed with information. I'd done some experimentation with Docker in the past and had grown frustrated with the command line errors and lack of documentation around solving them. This workshop was a refreshing re-introduction. Docker has made significant advances in the last few years, and the barrier the entry has gotten much lower with the new Linux Subsystem in Windows (WSL2).


 Professionalism and engineering were two major unspoken themes at NDC Minnesota 2020. Each talk I attended informed me on new technologies in our industry and gave me some pointers on when and why I might use them. Due to COVID-19, the conference was hosted online instead of in person. Though we couldn't walk around, see new places, and meet people in the same organic fashion, we could still learn many valuable things and meet some great people.

One of the most valuable workshops I attended was .NET Core as Cloud Native. The workshop was led by Brady Gaster (Senior Program Manager for the SignalR team at Microsoft) and Scott Hunter (Director of Program Management, .NET). We learned about the new unified plan for .NET coming with .NET 5 in November 2020 and the road map for .NET 6, which is planned for November 2021.  These updates included a demo Scott Hunter gave on a new tool from Microsoft called Tye that will aid in the process of deploying microservices, performance improvements that .NET 5 will bring, and new C# 9 language features.

In addition to the updates on Microsoft's development platform, we also had a workshop on integrating Docker and Kubernetes in Azure Kubernetes Service. The hands-on approach to this technology highlighted how powerful containers can be, but also the complexity of using a microservice architecture. There are many ways to configure Kubernetes and Brady said that even after a couple of years of working with it, it can still be confusing. He also insisted that "Kubernetes is not the destination." This started to resonate with me after seeing the simplicity of using Tye to deploy to Kubernetes. 

The sheer amount of topics that we dove into left me with a lot of excitement on the topics of Cloud, Containers, and .NET. I have many new subjects to research and watch out for in the coming year. The Omnitech team is always looking for new ways to improve and adapt to technology's changing world. We are constantly learning new things and feeding that knowledge back into our community. I am grateful for the opportunity to learn and connect at NDC, and I am excited to bring some nuggets of knowledge back to my team and clients. 


Due to the conference's virtual nature, we were able to get some in-depth and face-to-face conversations with people such as Roy Osherove, author of The Art of Unit Testing, in his Test-Driven Development (TDD) in Modern JavaScript workshop. Along with the TDD workshop, I attended workshops where we dove deep into topics concerning GraphQL and gRPC in .NET Core. I took a lot of new and useful information away from all of the workshops I attended, but one of my favorites of the week was TDD in Modern JavaScript. I thought I had practiced TDD in the past, and I felt that I had a pretty good grasp of what it was, but many of my misconceptions were cleared up throughout the day. One of my main takeaways was the reiteration by Mr. Osherove that just blindly doing TDD does not make your design and architecture good. He says it does hint at it but that you must be intentional about your design and how you are writing your tests. That's not to say that he thinks TDD is bad or that you shouldn't use it. You should use it but be intentional about TDD and be intentional about the design of your code and system too.