From 3aa0253614abea9db9789ceca2183b757cb98519 Mon Sep 17 00:00:00 2001 From: Dick van Hirtum Date: Mon, 16 Oct 2023 11:55:11 +0200 Subject: [PATCH] cleanup of old .net items --- .../.NET 6 - DateOnly & TimeOnly.txt | 1 - .../C# 10 - File-scoped namespace declarations.txt | 1 - .../C# 10 - Global using definitions.txt | 1 - .../C# 8 - Nullable reference types.txt | 3 --- items/Adopt/Languages & Frameworks/Minimal Api in .Net.txt | 5 +++++ items/Adopt/Tools/.NET 6 - Hot Reload.txt | 5 ----- .../Trial/Languages & Frameworks/.NET 6 - Minimal Api.txt | 5 ----- items/radar.csv | 7 +------ radar.csv | 7 +------ 9 files changed, 7 insertions(+), 28 deletions(-) delete mode 100644 items/Adopt/Languages & Frameworks/.NET 6 - DateOnly & TimeOnly.txt delete mode 100644 items/Adopt/Languages & Frameworks/C# 10 - File-scoped namespace declarations.txt delete mode 100644 items/Adopt/Languages & Frameworks/C# 10 - Global using definitions.txt delete mode 100644 items/Adopt/Languages & Frameworks/C# 8 - Nullable reference types.txt create mode 100644 items/Adopt/Languages & Frameworks/Minimal Api in .Net.txt delete mode 100644 items/Adopt/Tools/.NET 6 - Hot Reload.txt delete mode 100644 items/Trial/Languages & Frameworks/.NET 6 - Minimal Api.txt diff --git a/items/Adopt/Languages & Frameworks/.NET 6 - DateOnly & TimeOnly.txt b/items/Adopt/Languages & Frameworks/.NET 6 - DateOnly & TimeOnly.txt deleted file mode 100644 index b576cf9..0000000 --- a/items/Adopt/Languages & Frameworks/.NET 6 - DateOnly & TimeOnly.txt +++ /dev/null @@ -1 +0,0 @@ -.NET 6 introduces two new value types, DateOnly and TimeOnly, that represent either only the date or time portion of a DateTime. Both types are available in the System namespace and are built-in to .NET. These two types solve the unnecessary component of the DateTime type when we're only concerned about one portion. For example: When we want to save a date of birth we're probably not concerned about the time component of a DateTime, in this case the DateOnly type is more ideal. \ No newline at end of file diff --git a/items/Adopt/Languages & Frameworks/C# 10 - File-scoped namespace declarations.txt b/items/Adopt/Languages & Frameworks/C# 10 - File-scoped namespace declarations.txt deleted file mode 100644 index aa483b0..0000000 --- a/items/Adopt/Languages & Frameworks/C# 10 - File-scoped namespace declarations.txt +++ /dev/null @@ -1 +0,0 @@ -For better readability, code lines are limited to a maximum amount of characters, which becomes more limited by the number of nested scopes. File-scoped namespace declaration allows us to fill up the limited space we have with our beautiful code instead of whitespace. \ No newline at end of file diff --git a/items/Adopt/Languages & Frameworks/C# 10 - Global using definitions.txt b/items/Adopt/Languages & Frameworks/C# 10 - Global using definitions.txt deleted file mode 100644 index 2b6f316..0000000 --- a/items/Adopt/Languages & Frameworks/C# 10 - Global using definitions.txt +++ /dev/null @@ -1 +0,0 @@ -We believe in clean code and global using definitions introduced with C# 10 has given us some more control on cleaning a lot of boilerplate usings that are cluttering up the code files. By defining commonly used usings as global in a single code file, they no longer need to be defined in each single code file individually. \ No newline at end of file diff --git a/items/Adopt/Languages & Frameworks/C# 8 - Nullable reference types.txt b/items/Adopt/Languages & Frameworks/C# 8 - Nullable reference types.txt deleted file mode 100644 index 73bdf9b..0000000 --- a/items/Adopt/Languages & Frameworks/C# 8 - Nullable reference types.txt +++ /dev/null @@ -1,3 +0,0 @@ -Back in 1965 Tony Hoare introduced the null reference in ALGOL W and this was copied by a lot of languages. Later Tony called this his billion-dollar mistake and apologized for the problem this has caused. C# was one of the languages that copied this feature and its developers and users had to suffer for it. Starting with C# 8.0 developers finally have the option to get rid of this pain with Nullable reference types. Does this mean that null doesn't exist anymore? No but you have to be explicit about it. Reference types now behave like value types, for example bool, int, char, etc. - -We see this feature as a way to better declare the intent of our code and a good practice to prevent the dreaded Null Reference Exception. \ No newline at end of file diff --git a/items/Adopt/Languages & Frameworks/Minimal Api in .Net.txt b/items/Adopt/Languages & Frameworks/Minimal Api in .Net.txt new file mode 100644 index 0000000..d17c836 --- /dev/null +++ b/items/Adopt/Languages & Frameworks/Minimal Api in .Net.txt @@ -0,0 +1,5 @@ +Minimal APIs are a new feature since .NET 6 that allows you to create HTTP APIs with minimal dependencies. Minimal APIs are ideal for microservices and apps that only need minimal dependencies and features. If you are new to .NET, using Minimal APIs can be helpful, because you do not have to learn and understand the ASP.NET Core MVC framework first to create your HTTP API. + +With Minimal APIs you can create new HTTP APIs with just a few lines of code. At first, features like API versioning were not available yet, but as of .Net 7 we would have no problems using it for full featured APIs. Minimal APIs will not replace the traditional MVC framework, so there is no need to refactor existing applications, but it is a new possibility to create a HTTP API. + +We see Minimal APIs as an excellent choice for creating all kinds of new HTTP APIs and would consider using it when starting a new project. \ No newline at end of file diff --git a/items/Adopt/Tools/.NET 6 - Hot Reload.txt b/items/Adopt/Tools/.NET 6 - Hot Reload.txt deleted file mode 100644 index cdef7ee..0000000 --- a/items/Adopt/Tools/.NET 6 - Hot Reload.txt +++ /dev/null @@ -1,5 +0,0 @@ -.NET Hot Reload is a new feature in .NET 6 that allows developers to modify their source code while the application is running. Front-end developers who work with frameworks like Angular, React or Vue will be familiar with this feature, but it's new for .NET developers. - -This feature greatly improves the developer experience while working on .NET applications. Instead of having to rebuild and restart our application every time we make a change, we can now keep the application running and see the effect of our changes immediately. - -This has been a highly anticipated feature (as shown by the uproar that Microsoft triggered when they wanted to pull the feature from everything but Visual Studio just before the launch of .NET 6) and we see it as one of the main reasons for upgrading to .NET 6. \ No newline at end of file diff --git a/items/Trial/Languages & Frameworks/.NET 6 - Minimal Api.txt b/items/Trial/Languages & Frameworks/.NET 6 - Minimal Api.txt deleted file mode 100644 index 4ff6fd6..0000000 --- a/items/Trial/Languages & Frameworks/.NET 6 - Minimal Api.txt +++ /dev/null @@ -1,5 +0,0 @@ -Minimal APIs are a new feature in .NET 6 that allows you to create HTTP APIs with minimal dependencies. Minimal APIs are ideal for microservices and apps that only need minimal dependencies and features. If you are new to .NET, using Minimal APIs can be helpful, because you do not have to learn and understand the ASP.NET Core MVC framework first to create your HTTP API. - -With Minimal APIs you can create new HTTP APIs with just a few lines of code. Features like API versioning are not available yet, however the most common used features like authorization, dependency injection, routing and model binding are. This means Minimal APIs will not replace the traditional MVC framework yet, but it is a new possibility to create a HTTP API. - -We see Minimal APIs as an excellent choice for creating all kinds of new HTTP APIs and would consider using it when starting a new project. \ No newline at end of file diff --git a/items/radar.csv b/items/radar.csv index 0c5948d..9fa7cd7 100644 --- a/items/radar.csv +++ b/items/radar.csv @@ -1,11 +1,8 @@ quadrant,ring,name,description,isNew -Languages & Frameworks,Adopt,.NET 6 - DateOnly & TimeOnly,".NET 6 introduces two new value types, DateOnly and TimeOnly, that represent either only the date or time portion of a DateTime. Both types are available in the System namespace and are built-in to .NET. These two types solve the unnecessary component of the DateTime type when we're only concerned about one portion. For example: When we want to save a date of birth we're probably not concerned about the time component of a DateTime, in this case the DateOnly type is more ideal.",false Languages & Frameworks,Adopt,Blazor,"Blazor is a client-side UI framework that allows you to build interactive web UIs using C#. Blazor apps are composed of reusable web UI components implemented using C#, HTML, and CSS. Both client and server code are written in C#, allowing you to share code and libraries. Blazor can run directly in the browser using WebAsssembly, alternatively it can run client-side logic on the server by sending UI events to the server and receiving UI changes back using SignalR.

In modern web development where there's already an oversaturation of Javascript frameworks, Blazor offers .NET developers a new alternative to write client-side code without having to learn a new or unfamiliar language or framework.",false -Languages & Frameworks,Adopt,C# 10 - File-scoped namespace declarations,"For better readability, code lines are limited to a maximum amount of characters, which becomes more limited by the number of nested scopes. File-scoped namespace declaration allows us to fill up the limited space we have with our beautiful code instead of whitespace.",false -Languages & Frameworks,Adopt,C# 10 - Global using definitions,"We believe in clean code and global using definitions introduced with C# 10 has given us some more control on cleaning a lot of boilerplate usings that are cluttering up the code files. By defining commonly used usings as global in a single code file, they no longer need to be defined in each single code file individually.",false -Languages & Frameworks,Adopt,C# 8 - Nullable reference types,"Back in 1965 Tony Hoare introduced the null reference in ALGOL W and this was copied by a lot of languages. Later Tony called this his billion-dollar mistake and apologized for the problem this has caused. C# was one of the languages that copied this feature and its developers and users had to suffer for it. Starting with C# 8.0 developers finally have the option to get rid of this pain with Nullable reference types. Does this mean that null doesn't exist anymore? No but you have to be explicit about it. Reference types now behave like value types, for example bool, int, char, etc.

We see this feature as a way to better declare the intent of our code and a good practice to prevent the dreaded Null Reference Exception.",false Languages & Frameworks,Adopt,GraphQL,"GraphQL is a query language for API's where the client of the API determines exactly what he wants to receive.

In most API's when you execute an action you're stuck with whatever object that action returns. If you only needed a portion of the result you've just received way more information than was necessary. Another common scenario is that you need to combine resources from multiple sources. Traditionally, this means you would have to query all sources separately and combine the data yourself.

With GraphQL, you can specify only the data that you need, even if it's across multiple sources. This cleans up the client-side because you don't need to create a lot of mappings to change what you receive from the API to what you actually need and it also reduces both the amount of API calls and the amount of wasted bandwidth sending data the client doesn't need.",false Languages & Frameworks,Adopt,gRPC,"With gRPC it is possible to communicate with remote services in a modern high perforce manner. gRPC is a Remote Procedure Call (RPC) framework where services have clear interfaces and structured messages for requests and responses. It uses Protobuf to serialize the messages to a binary message format, making the payload significant smaller compared to JSON. It supports both HTTP and HTTP2.

Most web backend developers switched from SOAP to JSON (REST) / OpenAPI services past decade, and this is in many cases the best solution. However, when you have massive numbers of remote calls, milliseconds matter and both sides could be changed, gRPC should definitely be considered as a good alternative.

We prefer using gRPC in Microservice architecture environments where low latency is required.",false +Languages & Frameworks,Adopt,Minimal Api in .Net,"Minimal APIs are a new feature since .NET 6 that allows you to create HTTP APIs with minimal dependencies. Minimal APIs are ideal for microservices and apps that only need minimal dependencies and features. If you are new to .NET, using Minimal APIs can be helpful, because you do not have to learn and understand the ASP.NET Core MVC framework first to create your HTTP API.

With Minimal APIs you can create new HTTP APIs with just a few lines of code. At first, features like API versioning were not available yet, but as of .Net 7 we would have no problems using it for full featured APIs. Minimal APIs will not replace the traditional MVC framework, so there is no need to refactor existing applications, but it is a new possibility to create a HTTP API.

We see Minimal APIs as an excellent choice for creating all kinds of new HTTP APIs and would consider using it when starting a new project.",true Platforms,Adopt,Azure Cosmos DB,"Azure Cosmos DB is a fully managed NoSQL database that excels in high performance reads, automatic scaling across multiple global regions and above most other document databases also the option to use SQL-like queries.

We have adopted Cosmos DB because it fits our needs in a lot of projects and is easy to use while developing. When relational integrity is not necessary, we like the benefits of NoSQL databases and Cosmos DB specifically. Only when it comes to heavy relational datasets, we would revert to an actual SQL database.",false Platforms,Adopt,Azure Functions,"Azure Functions is Microsoft's serverless computing offering and it allows us to further eliminate infrastructural code as it lives an abstraction level higher than container technology. This enables us to focus our developing efforts on the business logic of an application. Azure Functions can also be a cost-effective platform for low usage or highly fluctuating usage patterns.",false Platforms,Adopt,Azure Kubernetes Service,"Azure Kubernetes Service (AKS) is a cloud service for hosting and maintaining container applications on Microsoft Azure, using Kubernetes.

Kubernetes has quickly become the de-facto standard for orchestrating container applications. With AKS we have an easy-to-use tool for working with Kubernetes in the Azure cloud. Since we, as .NET developers, have a lot of experience and affinity with Microsoft Azure, AKS is the logical tool we reach for when building container applications.",false @@ -16,14 +13,12 @@ Techniques,Adopt,Event-driven architecture,"With Infrastructure as Code (IaC).

By automating all management of the infrastructure we can both reduce the risk of environments getting out of sync (because we forget to install some updates on one of them) and increase the speed of scaling our environments in our out (because we don't have to go through a length manual process to provision a new environment, it's just an automated script).",false Techniques,Adopt,Microservice Architecture,"Ask 10 different developers to define Microservice Architecture and you'll probably get 10 different responses. But at their core, microservices are just a way to design your software into independently deployable services that are loosely coupled.

Most developers with some years of experience have encountered applications where all systems are tightly coupled together so that it's impossible to make or deploy changes to one system without having to change other systems as well. Or at the very least having to deploy everything all at once.

By splitting the application into independent services, it becomes possible to work on and deploy every service without having to wait on all other services. This means we can deploy more frequently (delivering more value to our customers) and make the deployments smaller (reducing the risk of mistakes or making them easier to find and fix).",false Techniques,Adopt,Progressive Web App,"Progressive Web Apps are web apps that use emerging web browser APIs and features along with traditional progressive enhancement strategy to bring a native app-like user experience to cross-platform web applications. By utilizing service workers that allow intercepting and control of how a web browser handles its network requests and asset caching, the user has reliable fast web pages and offline experience. One of our projects that uses a PWA is field worker application that allows its workers in the field to have a reliable web app experience while having to cope with unstable mobile connection. A beginner''s tutorial for setting up a PWA can be started here",false -Tools,Adopt,.NET 6 - Hot Reload,".NET Hot Reload is a new feature in .NET 6 that allows developers to modify their source code while the application is running. Front-end developers who work with frameworks like Angular, React or Vue will be familiar with this feature, but it's new for .NET developers.

This feature greatly improves the developer experience while working on .NET applications. Instead of having to rebuild and restart our application every time we make a change, we can now keep the application running and see the effect of our changes immediately.

This has been a highly anticipated feature (as shown by the uproar that Microsoft triggered when they wanted to pull the feature from everything but Visual Studio just before the launch of .NET 6) and we see it as one of the main reasons for upgrading to .NET 6.",false Tools,Adopt,AutoFixture,"With AutoFixture you can easily create test fixures. While writing tests you want to focus on the test case and not be burdened by all the boring setup that is required. When initializing test objects with AutoFixture, only test relevant parts are specified, non-relevant parts are automatically filled with dummy data. Now your test case is focused on the essentials instead of object initialization.

We use this when writing unit tests. It makes Test-Driven Development a step easier and our lives as developers happier. There are alternatives such as Bogus, which also generates fake data in test objects. An advantage of AutoFixture is the initialization of all properties with data.Bogus only sets properties that are filled. It's more which flavour you prefer. Our choice is AutoFixture!",false Tools,Adopt,Azure Pipelines,"Azure Pipelines automatically builds and tests code projects to make them available to others. It works with just about any language or project type. Azure Pipelines combine continuous integration (CI) and continuous delivery (CD) to constantly and consistently test and build your code and ship it to any target.",false Tools,Adopt,DevToys,"A Swiss Army knife for developers, including converters, encoders, generators; on top of that it's open source so feel free to add your own additional tools. It can automatically apply the desired action based on the latest clipboard content. So, if you open the tool after copying a JWT token onto the clipboard, it will show the decoded token in the JWT decoder tool. An additional benefit over various online tools is the offline availability and security by removing the need to send private / confidential data to potential malicious websites.",false Tools,Adopt,FakeItEasy,"With FakeItEasy, the unit under test can be isolated from dependencies on the rest of the system. Each external dependency is replaced with a dummy, mock, stub or fake, which in FakeItEasy are all the same, are created the same, only the usage determines what they are. The framework has an intuitive fluent syntax to setup each dependency and can manage and verify each of its calls including the parameters and return values with the same ease.

Other mocking/isolation frameworks such as NSubstitute and Moq do the same job, but FakeItEasy makes it really, yes, easy.",false Tools,Adopt,Fluent Assertions,"Fluent Assertions is an extensive set of extension methods that allow you to more naturally specify the expected outcome of a TDD or BDD-style unit tests. Many of our XPRTZ colleagues have FluentAssertions in their standard set of tools that are used for each project.",false Tools,Adopt,Terraform,"Terraform is an infrastructure-as-code (IaC) tool for provisioning and maintaining cloud services.

Infrastructure-as-code allows us to create and maintain the server configurations that we need to host our applications in an unambiguous and repeatable way. This increases the quality of our code because it eliminates any chance of differences between our development, test, acceptance and production environments.

One of the features of Terraform that we particularly like is its declarative syntax. This enables us to simply declare what the environment we want Terraform to create should look like, without needing to specify every single step that needs to be executed to create it. This also means that we can see exactly what is configured on each environment without having to parse dozens of install scripts.",false -Languages & Frameworks,Trial,.NET 6 - Minimal Api,"Minimal APIs are a new feature in .NET 6 that allows you to create HTTP APIs with minimal dependencies. Minimal APIs are ideal for microservices and apps that only need minimal dependencies and features. If you are new to .NET, using Minimal APIs can be helpful, because you do not have to learn and understand the ASP.NET Core MVC framework first to create your HTTP API.

With Minimal APIs you can create new HTTP APIs with just a few lines of code. Features like API versioning are not available yet, however the most common used features like authorization, dependency injection, routing and model binding are. This means Minimal APIs will not replace the traditional MVC framework yet, but it is a new possibility to create a HTTP API.

We see Minimal APIs as an excellent choice for creating all kinds of new HTTP APIs and would consider using it when starting a new project.",false Tools,Trial,Cypress,"Cypress is the next generation E2E testing tool that made itself famous by building its own architecture instead of using Selenium like most testing frameworks do. It's an all-in-one test suite that is blazing fast, easy to setup and a delight to develop with. That's what we like at XPRTZ so more than enough reason to assess it!",false Tools,Trial,Dependabot,"Dependabot is a Github tool used to automatically keep your project dependencies up to date. Dependabot first checks your project dependencies for any updates and if there are any a pull request is created. You can review and run the necessary tests on the pull request before merging it.

With Dependabot you spend less time updating your project dependencies and have more time to build.",false Tools,Trial,Github Copilot,"GitHub Copilot is an AI pair programmer, it will give you autocomplete suggestions while writing new code. GitHub Copilot can give suggestions based on natural language comments or based on the code you have written. GitHub Copilot analyzes the context in the files you are working with and based on that it will offer suggestions. GitHub Copilot supports multiple languages; Python, JavaScript, TypeScript, Ruby, Go, C#, or C++. GitHub Copilot is available as an extension in Visual Studio Code, Visual Studio, Neovim and the JetBrains suite of IDEs. Some final notes; we are interested in the possibilities of GitHub CoPilot but we have also read about some events where GitHub CoPilot is infringing copyright.",false diff --git a/radar.csv b/radar.csv index 0c5948d..9fa7cd7 100644 --- a/radar.csv +++ b/radar.csv @@ -1,11 +1,8 @@ quadrant,ring,name,description,isNew -Languages & Frameworks,Adopt,.NET 6 - DateOnly & TimeOnly,".NET 6 introduces two new value types, DateOnly and TimeOnly, that represent either only the date or time portion of a DateTime. Both types are available in the System namespace and are built-in to .NET. These two types solve the unnecessary component of the DateTime type when we're only concerned about one portion. For example: When we want to save a date of birth we're probably not concerned about the time component of a DateTime, in this case the DateOnly type is more ideal.",false Languages & Frameworks,Adopt,Blazor,"Blazor is a client-side UI framework that allows you to build interactive web UIs using C#. Blazor apps are composed of reusable web UI components implemented using C#, HTML, and CSS. Both client and server code are written in C#, allowing you to share code and libraries. Blazor can run directly in the browser using WebAsssembly, alternatively it can run client-side logic on the server by sending UI events to the server and receiving UI changes back using SignalR.

In modern web development where there's already an oversaturation of Javascript frameworks, Blazor offers .NET developers a new alternative to write client-side code without having to learn a new or unfamiliar language or framework.",false -Languages & Frameworks,Adopt,C# 10 - File-scoped namespace declarations,"For better readability, code lines are limited to a maximum amount of characters, which becomes more limited by the number of nested scopes. File-scoped namespace declaration allows us to fill up the limited space we have with our beautiful code instead of whitespace.",false -Languages & Frameworks,Adopt,C# 10 - Global using definitions,"We believe in clean code and global using definitions introduced with C# 10 has given us some more control on cleaning a lot of boilerplate usings that are cluttering up the code files. By defining commonly used usings as global in a single code file, they no longer need to be defined in each single code file individually.",false -Languages & Frameworks,Adopt,C# 8 - Nullable reference types,"Back in 1965 Tony Hoare introduced the null reference in ALGOL W and this was copied by a lot of languages. Later Tony called this his billion-dollar mistake and apologized for the problem this has caused. C# was one of the languages that copied this feature and its developers and users had to suffer for it. Starting with C# 8.0 developers finally have the option to get rid of this pain with Nullable reference types. Does this mean that null doesn't exist anymore? No but you have to be explicit about it. Reference types now behave like value types, for example bool, int, char, etc.

We see this feature as a way to better declare the intent of our code and a good practice to prevent the dreaded Null Reference Exception.",false Languages & Frameworks,Adopt,GraphQL,"GraphQL is a query language for API's where the client of the API determines exactly what he wants to receive.

In most API's when you execute an action you're stuck with whatever object that action returns. If you only needed a portion of the result you've just received way more information than was necessary. Another common scenario is that you need to combine resources from multiple sources. Traditionally, this means you would have to query all sources separately and combine the data yourself.

With GraphQL, you can specify only the data that you need, even if it's across multiple sources. This cleans up the client-side because you don't need to create a lot of mappings to change what you receive from the API to what you actually need and it also reduces both the amount of API calls and the amount of wasted bandwidth sending data the client doesn't need.",false Languages & Frameworks,Adopt,gRPC,"With gRPC it is possible to communicate with remote services in a modern high perforce manner. gRPC is a Remote Procedure Call (RPC) framework where services have clear interfaces and structured messages for requests and responses. It uses Protobuf to serialize the messages to a binary message format, making the payload significant smaller compared to JSON. It supports both HTTP and HTTP2.

Most web backend developers switched from SOAP to JSON (REST) / OpenAPI services past decade, and this is in many cases the best solution. However, when you have massive numbers of remote calls, milliseconds matter and both sides could be changed, gRPC should definitely be considered as a good alternative.

We prefer using gRPC in Microservice architecture environments where low latency is required.",false +Languages & Frameworks,Adopt,Minimal Api in .Net,"Minimal APIs are a new feature since .NET 6 that allows you to create HTTP APIs with minimal dependencies. Minimal APIs are ideal for microservices and apps that only need minimal dependencies and features. If you are new to .NET, using Minimal APIs can be helpful, because you do not have to learn and understand the ASP.NET Core MVC framework first to create your HTTP API.

With Minimal APIs you can create new HTTP APIs with just a few lines of code. At first, features like API versioning were not available yet, but as of .Net 7 we would have no problems using it for full featured APIs. Minimal APIs will not replace the traditional MVC framework, so there is no need to refactor existing applications, but it is a new possibility to create a HTTP API.

We see Minimal APIs as an excellent choice for creating all kinds of new HTTP APIs and would consider using it when starting a new project.",true Platforms,Adopt,Azure Cosmos DB,"Azure Cosmos DB is a fully managed NoSQL database that excels in high performance reads, automatic scaling across multiple global regions and above most other document databases also the option to use SQL-like queries.

We have adopted Cosmos DB because it fits our needs in a lot of projects and is easy to use while developing. When relational integrity is not necessary, we like the benefits of NoSQL databases and Cosmos DB specifically. Only when it comes to heavy relational datasets, we would revert to an actual SQL database.",false Platforms,Adopt,Azure Functions,"Azure Functions is Microsoft's serverless computing offering and it allows us to further eliminate infrastructural code as it lives an abstraction level higher than container technology. This enables us to focus our developing efforts on the business logic of an application. Azure Functions can also be a cost-effective platform for low usage or highly fluctuating usage patterns.",false Platforms,Adopt,Azure Kubernetes Service,"Azure Kubernetes Service (AKS) is a cloud service for hosting and maintaining container applications on Microsoft Azure, using Kubernetes.

Kubernetes has quickly become the de-facto standard for orchestrating container applications. With AKS we have an easy-to-use tool for working with Kubernetes in the Azure cloud. Since we, as .NET developers, have a lot of experience and affinity with Microsoft Azure, AKS is the logical tool we reach for when building container applications.",false @@ -16,14 +13,12 @@ Techniques,Adopt,Event-driven architecture,"With Infrastructure as Code (IaC).

By automating all management of the infrastructure we can both reduce the risk of environments getting out of sync (because we forget to install some updates on one of them) and increase the speed of scaling our environments in our out (because we don't have to go through a length manual process to provision a new environment, it's just an automated script).",false Techniques,Adopt,Microservice Architecture,"Ask 10 different developers to define Microservice Architecture and you'll probably get 10 different responses. But at their core, microservices are just a way to design your software into independently deployable services that are loosely coupled.

Most developers with some years of experience have encountered applications where all systems are tightly coupled together so that it's impossible to make or deploy changes to one system without having to change other systems as well. Or at the very least having to deploy everything all at once.

By splitting the application into independent services, it becomes possible to work on and deploy every service without having to wait on all other services. This means we can deploy more frequently (delivering more value to our customers) and make the deployments smaller (reducing the risk of mistakes or making them easier to find and fix).",false Techniques,Adopt,Progressive Web App,"Progressive Web Apps are web apps that use emerging web browser APIs and features along with traditional progressive enhancement strategy to bring a native app-like user experience to cross-platform web applications. By utilizing service workers that allow intercepting and control of how a web browser handles its network requests and asset caching, the user has reliable fast web pages and offline experience. One of our projects that uses a PWA is field worker application that allows its workers in the field to have a reliable web app experience while having to cope with unstable mobile connection. A beginner''s tutorial for setting up a PWA can be started here",false -Tools,Adopt,.NET 6 - Hot Reload,".NET Hot Reload is a new feature in .NET 6 that allows developers to modify their source code while the application is running. Front-end developers who work with frameworks like Angular, React or Vue will be familiar with this feature, but it's new for .NET developers.

This feature greatly improves the developer experience while working on .NET applications. Instead of having to rebuild and restart our application every time we make a change, we can now keep the application running and see the effect of our changes immediately.

This has been a highly anticipated feature (as shown by the uproar that Microsoft triggered when they wanted to pull the feature from everything but Visual Studio just before the launch of .NET 6) and we see it as one of the main reasons for upgrading to .NET 6.",false Tools,Adopt,AutoFixture,"With AutoFixture you can easily create test fixures. While writing tests you want to focus on the test case and not be burdened by all the boring setup that is required. When initializing test objects with AutoFixture, only test relevant parts are specified, non-relevant parts are automatically filled with dummy data. Now your test case is focused on the essentials instead of object initialization.

We use this when writing unit tests. It makes Test-Driven Development a step easier and our lives as developers happier. There are alternatives such as Bogus, which also generates fake data in test objects. An advantage of AutoFixture is the initialization of all properties with data.Bogus only sets properties that are filled. It's more which flavour you prefer. Our choice is AutoFixture!",false Tools,Adopt,Azure Pipelines,"Azure Pipelines automatically builds and tests code projects to make them available to others. It works with just about any language or project type. Azure Pipelines combine continuous integration (CI) and continuous delivery (CD) to constantly and consistently test and build your code and ship it to any target.",false Tools,Adopt,DevToys,"A Swiss Army knife for developers, including converters, encoders, generators; on top of that it's open source so feel free to add your own additional tools. It can automatically apply the desired action based on the latest clipboard content. So, if you open the tool after copying a JWT token onto the clipboard, it will show the decoded token in the JWT decoder tool. An additional benefit over various online tools is the offline availability and security by removing the need to send private / confidential data to potential malicious websites.",false Tools,Adopt,FakeItEasy,"With FakeItEasy, the unit under test can be isolated from dependencies on the rest of the system. Each external dependency is replaced with a dummy, mock, stub or fake, which in FakeItEasy are all the same, are created the same, only the usage determines what they are. The framework has an intuitive fluent syntax to setup each dependency and can manage and verify each of its calls including the parameters and return values with the same ease.

Other mocking/isolation frameworks such as NSubstitute and Moq do the same job, but FakeItEasy makes it really, yes, easy.",false Tools,Adopt,Fluent Assertions,"Fluent Assertions is an extensive set of extension methods that allow you to more naturally specify the expected outcome of a TDD or BDD-style unit tests. Many of our XPRTZ colleagues have FluentAssertions in their standard set of tools that are used for each project.",false Tools,Adopt,Terraform,"Terraform is an infrastructure-as-code (IaC) tool for provisioning and maintaining cloud services.

Infrastructure-as-code allows us to create and maintain the server configurations that we need to host our applications in an unambiguous and repeatable way. This increases the quality of our code because it eliminates any chance of differences between our development, test, acceptance and production environments.

One of the features of Terraform that we particularly like is its declarative syntax. This enables us to simply declare what the environment we want Terraform to create should look like, without needing to specify every single step that needs to be executed to create it. This also means that we can see exactly what is configured on each environment without having to parse dozens of install scripts.",false -Languages & Frameworks,Trial,.NET 6 - Minimal Api,"Minimal APIs are a new feature in .NET 6 that allows you to create HTTP APIs with minimal dependencies. Minimal APIs are ideal for microservices and apps that only need minimal dependencies and features. If you are new to .NET, using Minimal APIs can be helpful, because you do not have to learn and understand the ASP.NET Core MVC framework first to create your HTTP API.

With Minimal APIs you can create new HTTP APIs with just a few lines of code. Features like API versioning are not available yet, however the most common used features like authorization, dependency injection, routing and model binding are. This means Minimal APIs will not replace the traditional MVC framework yet, but it is a new possibility to create a HTTP API.

We see Minimal APIs as an excellent choice for creating all kinds of new HTTP APIs and would consider using it when starting a new project.",false Tools,Trial,Cypress,"Cypress is the next generation E2E testing tool that made itself famous by building its own architecture instead of using Selenium like most testing frameworks do. It's an all-in-one test suite that is blazing fast, easy to setup and a delight to develop with. That's what we like at XPRTZ so more than enough reason to assess it!",false Tools,Trial,Dependabot,"Dependabot is a Github tool used to automatically keep your project dependencies up to date. Dependabot first checks your project dependencies for any updates and if there are any a pull request is created. You can review and run the necessary tests on the pull request before merging it.

With Dependabot you spend less time updating your project dependencies and have more time to build.",false Tools,Trial,Github Copilot,"GitHub Copilot is an AI pair programmer, it will give you autocomplete suggestions while writing new code. GitHub Copilot can give suggestions based on natural language comments or based on the code you have written. GitHub Copilot analyzes the context in the files you are working with and based on that it will offer suggestions. GitHub Copilot supports multiple languages; Python, JavaScript, TypeScript, Ruby, Go, C#, or C++. GitHub Copilot is available as an extension in Visual Studio Code, Visual Studio, Neovim and the JetBrains suite of IDEs. Some final notes; we are interested in the possibilities of GitHub CoPilot but we have also read about some events where GitHub CoPilot is infringing copyright.",false