Software development

Jobs and workflows

I have recently changed my job and there’s a lot to wrap my head around now. My new employer is about 250 times larger than my previous one, and apparently, there comes a lot of change with that size. For starters, I am now officially called a software architect. I did successfully complete a software architecture program in 2018 with my old employer, where I was also certified as a software architect, but my designation didn’t change, and I kept being an ordinary software developer. To be fair, this never even bothered me, since my job didn’t change at all with the certificate. If you work on client projects in a mid-size software house, you’re doing the full stack of the job anyway, and every one of your… Continue Reading…

Software development

Making mistakes: Part 4

There can only ever be one common assembly, and it isn’t yours. This is my favourite, and it can be found in almost every bigger project. I’ve seen it with every single client without exception, and I’ve done it myself until a few years ago. Most of us know it as that dreadful assembly called Common, Core, Base, Internal or similar (I’ll use Common for the rest of this article). It’s also known as the dark spot in a project, that everybody is required to use and that nobody wants to touch. A place for coding horrors that just keeps on growing into a swamp of nightmares. Too graphical and exaggerated? It’s the place where developers like to put all the code that multiple components of a project… Continue Reading…

Software development

Making mistakes: Part 3

Never underestimate a coder’s pride. I did that a few years back, when I joined a project with a new customer. The team consisted of four developers on site, led by a senior software architect and a group manager. Three more developers were also hired from another country to help create highly encapsulated features. This was the first customer project where I was presented with continuous integration, gated check ins, automated tests and code analysis tools like SonarQube. The software architect – let’s call him Stephen – had put a lot of effort into this development process, and he had done a really great job with it. Naturally, I was very enthusiastic about the project and I immediately felt that this was going to be great fun. We… Continue Reading…

Software developmentVisual Studio

Making mistakes: Part 2

Delete all your binaries before a release build. An incredibly easy way to mess up your project is forgetting to delete all your own binaries before building and testing a release candidate. It’s so easy to miss that most companies run dedicated build and test systems that enforce a clean environment before any meaningful action is taken. Not all developers can enjoy that kind of safety at work, and even less of us at home. But first, let’s go ahead and dig a little deeper into how Visual Studio treats assembly references, and why this is so important. There are three kinds of assembly references that I am aware of and each one has its specific behaviour. There is the project reference that we get a lot in… Continue Reading…

Software developmentWPF

Value conversion in WPF

WPF is the top-notch UI technology from Microsoft, that finally enables us to properly separate business logic and UI from each other. There is plenty of material and documentation about it on the internet, so I won’t bother giving a general overview in this article. If you know WPF, then you already know what it is. You may have noticed that the initial learning curve of WPF is crazy steep, since it’s such a huge and powerful framework. Especially the part where backend and frontend are separated cleanly is very hard to get right in the beginning. The concept behind this is called MVVM, where the goal is to design the entire UI in XAML, using as little code-behind as possible. One of the techniques that WPF offers… Continue Reading…

Software development

Weapons of mass construction

Last time I wrote about how to use interfaces to their full potential, but I never really mentioned factories beyond the fact, that we probably need them. This is going to be another chapter to the previous post with a more in-depth look into the matter of encapsulated object creation in C#. Again I will start with what I usually find in a client’s project, and then I will move in small steps towards a progressively more mature implementation. Every step will include a bit of code to demonstrate the changes that were made. Making up a good example to demonstrate factories is surprisingly hard. There is a multitude of possible scenarios available, but most are too complex to be useful in a blog post. I have settled… Continue Reading…

Software development

Interfacing in style

I tend to give the same talks to clients whenever I enter another project, mostly to get everybody up to speed when there are deficits. In writing everything down, I hope to make the knowledge transfer a little easier, so that I can refer to this and other similar articles in the future. Interfaces are a very useful and important construct in C#, and I believe that any developer worth their salt is going to agree. But they can also be one of the biggest flaws behind an error-prone architecture or a hard to maintain code base. I will start by describing the two basic kinds of interfaces and then describe the typical situation in the code base of most clients. The focus will be on how to… Continue Reading…

Software developmentSoftware testing

Nuclear testing done right

This is a post that I had hoped to write for almost a year and that has been burning under my finger nails. It’s about the latest release of my test platform Nuclear.Test, that I uploaded a few days ago. I’m talking about that magic version 2.0, the very first product grade release. Version 1.0 was made available to the public last summer, but that wasn’t much more than a documented prototype. There were bugs and quirks, and it was a quick and dirty state that I just wanted to get out the door quickly before my son was born. But the first public version of a software is hardly ever any good. It’s there to give the project some traction and for getting to know it a… Continue Reading…

Software developmentVisual Studio

Resolving cached NuGet packages at runtime

Roughly seven months ago I came across an odd behaviour of Visual Studio that I thought wasn’t possible and that broke my code at runtime. I asked on Stack Overflow hoping that someone could point me in the right direction, but that didn’t happen and Google wasn’t very helpful either. Curiosity finally made me tackle the issue myself once I found the time for it. This article is basically Helmuth von Moltke’s theory of war set in a programming scenario, and it serves as a good example of how important it is to adapt your design during development. No design or architecture extends with certainty beyond the first encounter with a user or a working prototype. Helmuth von Moltke the Elder (if he had been a nerd) Before… Continue Reading…

CryptographySoftware developmentVisual Studio

A kingdom for a strong name

We all have become increasingly paranoid when dealing with computers and software in any way and most of us run some kind of firewall and antivirus software to feel safer on the internet. I won’t go into details on this very wide subject, but I want to elaborate on what we as the developers of software can do about it. I’ll stick to my little .NET world to demonstrate how we can achieve higher security with applications. As already hinted at by the title, today’s topic is strong name signing. Quick refresher on strong-naming A good resource is the Microsoft page on strong-named assemblies, and you should definitely read that. But I’m going to outline the matter any ways so read on if you wish. Strong-naming an assembly… Continue Reading…