Tools for building a modern software platform in Azure
You know how some projects never seem to find their strides? A promising start shows quick progress, but work quickly gets mired down in building "all the other things" that a good piece of software needs but which aren't directly related to the problem which the software is intended to solve. Every little piece of this type of functionality that doesn't have to be built (either bespoke or integrated) is more time left for you to focus on your product. Here are some things that I've found can help take your software infrastructure to the next level.
1. Azure Durable Functions (serverless computing)
Serverless computing is so cool. Forget about the days of fiddling with IIS and various other OS and framework settings - just code and go! Durable functions take this to the next level by allowing long-running, stateful orchestrations to "just work" without additional management on your part. Part of the magic is how Durable Functions make use of Event Sourcing to do their thing. Your costs are easier to keep under control with Consumption-based pricing, while traditional App Service Plans can still be leveraged to offer consistency in performance and pricing. You can pretty much use the programming language of your choice to work in, whether it's C#, JavaScript, or even Powershell! Iteration can be quite rapid when working with CSX (C# script) or other non-precompiled language options.
Azure Functions
2. Azure Active Directory (AAD)
If you're developing a solution, service, or software that requires authentication and authorization functionality, what are you waiting for? Azure Active Directory has a whole host of features and capabilities that incorporate seamlessly with most Azure resources. Role-based access controls (RBAC) give a consistent and powerful way to control access levels at a very atomic level, whether the user is a human making use of 2FA or a service storing secrets in an Azure Key Vault. App Services, in particular, use something called easy auth to make federated identity and claims across multiple identity providers (e.g., AAD, Google, Facebook, Twitter, etc.) well, easy. Tight integration with the Office 365 suite of products seals the deal for anyone looking to connect different sets of building blocks into a functional whole.
Azure Active Directory
3. Office 365 with Flow
This entry could just as easily have been entirely about the O365 suite and that would have been enough. The Office 365 product suite is comprised of far, far more than just the traditional Word, Powerpoint, etc. applications. Flow is the real game-changer here, with hundreds of connectors to different apps and services, it's never been easier to "automate all the things". Not confined to only integrating with other O365 apps, Flow is one of the best attempts at realizing true, generic consumer-level workflow software that is quite eminently usable by almost anyone with any degree of technical competence.
Office365
Microsoft Flow
4. Docker and Docker for Windows
For many developers, their knowledge regarding Docker and containerization technologies starts and ends with knowledge of their existence. Don't even have that base? Here's an overview. If you're one of those developers, I would highly recommend putting some time into learning about Docker, containers, and related technologies - I can guarantee that it will not only you more valuable as an employee, you will find ways that it can ease your day-to-day aches and pains on the job. Feature support for Windows Containers increases on a regular basis, but there's still some work to be done (follow the team's progress) when it comes to running Windows and Linux -based containers side-by-side.
Docker for Windows
5. Container orchestration with Kubernetes
Kubernetes puts the Ops into DevOps. An easy way to think about it is that Kubernetes (or k8's for those in the know) is the macro- to the Docker container's micro-. As an orchestrator, Kubernetes manages the lifecycles of groups of containers and their dependent infrastructure. Groups of containers work together to comprise a multi-variate, highly available, scalable, and robust microservices application infrastructure for your code. The advantage of this is that you write more code relevant to the business domain (and less housekeeping types of logic). The disadvantage is that Kubernetes and microservices orchestration can be a fiendishly complex topic, giving it a bit of a high learning curve.
Kubernetes
Summary
Right now is a very cool time to be in the business of making software. I don't think there's any other time in my professional career where I've felt more empowered by the available tools and services. So many of the tedious, fault-prone, and risky components involved but not directly related to the software's core goal used to have to be built, bespoke, every time a new software project was launched[1]. The latest set of tools are more powerful and accessible than ever, allowing more people than ever before the power to make their dreams a reality.
I used to call these types of things orthogonal concerns, but I stopped using that phrase once I realized that nobody I used it in front of seemed to know what it meant. ↩︎