A story about User Stories
My personal experiences while working with user stories for gathering, tracking and planning requirements
My personal experiences while working with user stories for gathering, tracking and planning requirements
Continuous what? Well, if you browse the internet regularly, you will encounter two different terms that are used rather inconsistently: Continuous Delivery and Continuous Deployment. In my words, Continuous Delivery is a collection of various techniques, principles and tools that allow you to d...
Solving the versioning problemIf you're building libraries, products or any other software system, versioning is usually a pretty big deal. It's the only way to determine what version of that library, product or system you're looking at. Before an organization settles on a versioning strategy, ma...
Last week, I was so fortunate to attend a marvelous talk by Donald Reinertsen on a amazingly effective approach for prioritizing projects within an agile organization (and which is part of SAFe). Most managers will tend to prioritize their projects based on non-quantifiable attributes such as the...
Is your inbox also filling up with loads of emails all part of some kind of discussion where each reply contains the entire history again? Do you also get all kinds of notification emails from build servers, source control systems, and other things to which somebody is supposed to react? Do you o...
After 50000 downloads and the recent final release of Visual Studio 2012 / C# 5.0 it was about time to do a thorough update of the C# Coding Guidelines. Although most of the guidelines have been preserved, I’ve tried to rewrite several of them using a less formal and less verbose writing style. I...
Yesterday I did a 2-hour talk on getting the most out of UI automation, particularly using SpecFlow and WaTiN. You can find the slides down here and the demo code at GitHub.<iframe allowfullscreen="" frameborder="0" height="356" marginheight="0" marginwidth="0" scrolling="no" src="http://www.s...
This week I completed reading a new book titled The Cucumber Book: Behaviour-Driven Development for Testers and Developers by Matt Wynne and Aslak Hellesoy. Aslak is the founder of the Cucumber project (which is what SpecFlow for .NET is based on), and Matt is one of its most active developers. T...
This is the fourth of several posts in which I’d like to share some of the things we learned throughout more than a year of Agile development using Scrum. Some of them might appear as open doors, but I wish I knew or thought about those before I started that project. Just by looking back at the m...
This is the third of several posts in which I’d like to share some of the things we learned throughout more than 14 sprints of Agile development using Scrum. Some of them might appear as open doors, but I wish I knew or thought about those before I started that project. Just by looking back at th...
This is the second of several posts in which I’d like to share some of the things we learned throughout more than 14 sprints of Agile development using Scrum. Some of them might appear as open doors, but I wish I knew or thought about those before I started that project. Just by looking back at t...
This is the first of several posts in which I’d like to share some of the things we decided throughout 14 sprint retrospective. Some of them might appear as open doors, but I wish I knew or thought about those before I started that project. Just by looking back at the mistakes a team of 9 develop...
I’m honored to have been selected to speak at my first event in the United Kingdom, Developer Developer Developer North, hosted at the University of Sunderland, near New Castle. Our job as a software developer seems to revolve mostly around programming languages, frameworks and Visual Studio. And...
Somebody recently asked me what sessions I was planning to attend at the upcoming 2011 edition of the Microsoft Developer Days in The Hague. To be honest, my primary reason for going to a Dutch conference is to chat with fellow .NET enthusiasts, and attending sessions is usually a side-effect of ...
I’m very happy that I’ll be speaking at a number of very nice local and international conferences. On Saturday March 26th, I’ll be joining the Dutch Code Camp event where I’ll be doing a chalk’n’talk on my Silverlight Cookbook initiative. <ul> <li>On Wednesday, April 27th, I will t...
So now that I’ve finished my multi-part post on getting the most out of user stories, it is time to provide a nice convenient overview of some essential practices that I’ve blogged about. I don’t have any additional parts planned, but if I come up with something new, I’ll make sure this list is u...
Well, QCon 2010 is over, so it is time to travel back to the Netherlands and finally see my wife and daughter again. However, after the previous post, the quotes have been coming in on Twitter space. So, to complete one of the most intense conferences ever, here are some more funny, inspiring and...
The 2nd day of QCon was not one where I chose wisely. My focus for this conference was everything Agile and anything from the well-known speakers. So I ignored most sessions that had words like REST, SQL or Java in it. How wrong I was…. But I did not discover that until I heard and read about all...
One of the funny things of this QCon is the many tweets that the attendees have been throwing into the world wide web. That's great for a speaker because now they get immediate feedback on their performance, both good and bad. These are some of the quotes I found funny, inspiring or refreshing: ...
A few weeks ago I had a chat with Paul Jansen, CEO of a small Eindhoven-based company named Tiobe. You might indirectly know Tiobe for its programming language index and their commercial code checker ClockSharp. But they have also been hosting a C# Coding Standard I co-wrote for Philips Medical S...
What is it? The Ubiquitous Language is a unified language consisting of verbs and nouns from the business domain of an enterprise system and should be used by all team members, stakeholders and other involved persons. Why would you do it? Because it creates a bridge of understanding between th...
What is it? An automatic build is a fully automated compilation of a specific version of your source code repository and which runs at regular intervals. More often than not, such a build includes additional steps such as running a static code analysis and code coverage, executing all automat...
What is it? A mindset and practice that requires you to continuously reevaluate a region of code each time you make a change. In essence, you need to look at the code related to your changes and reconsider whether the original solution is still the best solution accounting for the information you...
As promised earlier, you can now download the concept version of my new Coding Guidelines for C# 3.0 and C# 4.0 from a dedicated CodePlex site at www.csharpcodinguidelines.com. The list of changes is quite big, and includes new guidelines covering object-oriented design, design principles, C# 4.0...
What is it? Coding guidelines, or coding standards if you will, are documents consisting of rules and recommendations on the use of C# in enterprise systems. They deal with code layout, naming guidelines, the proper use of the .NET Framework, tips on writing useful comments and XML documentat...
I've recently finished the book The Inmates Are Running The Asylum by Alan Cooper, a well known proponent for interaction design. To be honest, I never really saw the purpose of interaction design in our projects. But after reading this book, I now know I didn't really understand what it was abou...
It has been only 6 weeks since I first released Fluent Assertions to the public, followed by version 1.1 a week later. In the weeks thereafter, I received some nice ideas from the community which caused me to start working on the next version. But it was not easy. I found that designing a small f...
What is it? An (online) list of verification tasks to sign off as part of the delivery process of a newly delivered unit of work. Usually these include things that are often forgotten, or aspects that require explicit verification. See an example of such a list here. Why would you do it? Becau...
In response to my posts on Peer Reviews, Unit Testing & TDD, and Common Code Layout, someone noticed that all these posts were part of my Team Foundation Server Development Practices series, but not every post actually mentioned TFS. Obviously, he was right. The reason for using the TFS prefi...
What is it? A collection of rules stating what a block of code should look like. These may include rules on where line breaks are required, how to place parentheses, how much whitespace to put before and after those parentheses, how many spaces to use when indenting and where to insert empty line...
My Dutch article on User Stories in Team Foundation Server 2010 is now available online at the SDN site. Read it over here. I will translate it to English soon.
What is it? In essence, Test Driven Development (TDD) is a practice in which the interface and the behavior of a component is designed while writing a unit test. In other words, you typically start writing a test case and define the exact members, behavior and names on the fly. In fact, the wor...
What is it? A formal review of all code and artifacts related to a requirement or task by another person than the original developer. Rework because of review comments must be revalidated afterwards. Why would you do that? Because the average developer introduces 10-50 bugs per 10...
Storyotypes are stereotypes for user stories that can help to define the right scope for your user stories. You can read more about these in the article Using Storyotypes to Split Bloated XP Stories and these slides. Team Foundation Server 2010 includes a new VSTS for Agile process template close...
As part of my many assignments, I’m compiling a bunch of Application Lifecycle Management practices into a set of development guidelines for bootstrapping our internal projects using Team Foundation Server. I’ve decided to share these with the community so that others may benefit from it as well....
During this week’s PDC 2008, I’ve been spending particular attention to sessions related to the new features of Visual Studio 2010 Team System and Team Foundation Server 2010. The one statement almost every session started with was that this release is huge, and I totally agree! I’ve not seen so ...
My personal experiences while working with user stories for gathering, tracking and planning requirements
So now that I’ve finished my multi-part post on getting the most out of user stories, it is time to provide a nice convenient overview of some essential practices that I’ve blogged about. I don’t have any additional parts planned, but if I come up with something new, I’ll make sure this list is u...
What is it? Technical Debt is every change to your code base that does not comply with the usual level of quality your team has agreed upon. Since this level of quality has been introduced to guarantee a healthy code base throughout the life time of the system, introducing technical debt essenti...
What is it? A domain model is typically depicted by a UML class diagram in which the classes and associations represent the business concepts and the relationships between them. Although you can use a piece of paper to draw up a domain model, in most cases a UML case tool is better suited for t...
What is it? Using Team Foundation Server’s User Story, Task and Bug work item types as the central unit of work for all the activities done within a project. Why would you do it? Because it adds traceability between the functional requirements and the way these requirements have been realized ...
What is it? The Ubiquitous Language is a unified language consisting of verbs and nouns from the business domain of an enterprise system and should be used by all team members, stakeholders and other involved persons. Why would you do it? Because it creates a bridge of understanding between th...
What is it? An automatic build is a fully automated compilation of a specific version of your source code repository and which runs at regular intervals. More often than not, such a build includes additional steps such as running a static code analysis and code coverage, executing all automat...
What is it? A mindset and practice that requires you to continuously reevaluate a region of code each time you make a change. In essence, you need to look at the code related to your changes and reconsider whether the original solution is still the best solution accounting for the information you...
What is it? Coding guidelines, or coding standards if you will, are documents consisting of rules and recommendations on the use of C# in enterprise systems. They deal with code layout, naming guidelines, the proper use of the .NET Framework, tips on writing useful comments and XML documentat...
What is it? An (online) list of verification tasks to sign off as part of the delivery process of a newly delivered unit of work. Usually these include things that are often forgotten, or aspects that require explicit verification. See an example of such a list here. Why would you do it? Becau...
What is it? A collection of rules stating what a block of code should look like. These may include rules on where line breaks are required, how to place parentheses, how much whitespace to put before and after those parentheses, how many spaces to use when indenting and where to insert empty line...
What is it? In essence, Test Driven Development (TDD) is a practice in which the interface and the behavior of a component is designed while writing a unit test. In other words, you typically start writing a test case and define the exact members, behavior and names on the fly. In fact, the wor...
What is it? A formal review of all code and artifacts related to a requirement or task by another person than the original developer. Rework because of review comments must be revalidated afterwards. Why would you do that? Because the average developer introduces 10-50 bugs per 10...
As part of my many assignments, I’m compiling a bunch of Application Lifecycle Management practices into a set of development guidelines for bootstrapping our internal projects using Team Foundation Server. I’ve decided to share these with the community so that others may benefit from it as well....
Continuous what? Well, if you browse the internet regularly, you will encounter two different terms that are used rather inconsistently: Continuous Delivery and Continuous Deployment. In my words, Continuous Delivery is a collection of various techniques, principles and tools that allow you to d...
The characteristics of a growing organizationDuring this year's QCon conference held in New York, I attended a full-day workshop on the scalability challenges a growing organization faces, hosted by Randy Shoup. Randy explained us how every start-up goes through several phases, each with a differ...
Somebody on Twitter recently posed the question whether innovation in software and agile development can co-exist or not. To remove any misinterpretation - something quite common for Twitter discussion - I asked him to clarify what he meant with the word 'innovation'. In short, any kind of softwa...
Suppose you're in the following situation.You and your team are supposed to start working on some important architectural changes that were long due.Your team is then asked by your manager to help build an important feature that requires the unique skills of your team, and ...
I think that the gist of this post should be pretty clear. Unfortunately I've fallen in that same trap myself many times. So often, I had to refrain myself from pulling somebody's keyboard from under their hands, just because I thought I could fix the problem at hand myself much faster. But with ...
Solving the versioning problemIf you're building libraries, products or any other software system, versioning is usually a pretty big deal. It's the only way to determine what version of that library, product or system you're looking at. Before an organization settles on a versioning strategy, ma...
Last week, I was so fortunate to attend a marvelous talk by Donald Reinertsen on a amazingly effective approach for prioritizing projects within an agile organization (and which is part of SAFe). Most managers will tend to prioritize their projects based on non-quantifiable attributes such as the...
Over the last year or two I attended numerous sprint demos, product demos and technical talks hosted by technical teams and individuals. Although I can definitely improve as a speaker myself, standing at the side-line and observing other speakers have made me pretty opinionated. I also get bored ...
Lets be honest here. For a very long time, if I had to choose between an averagely skilled but well-spoken developer and a very skilled and experienced introvert, I would probably choose the first. And yes, I do realize that these are two extremes and that most people have characteristics of both...
Hey architect! Building a complex system with four talented developers is one thing. Building one with 40 developers is a whole different league. The quote above is closer to the truth than you might expect. Many large organizations develop software systems with hundreds of software developers. ...
If there’s one term next to agile that’s so overloaded nobody knows what to expect, then it must be architect. Yes, you can specialize it by prefixing it with software, as in software architect. And with that, you would be able to determine that he or she is probably designing some kind software ...
As long as I can remember, I've been using an automatic build system to regularly verify the quality of the code based I've been working on. First using Team Foundation Server, but since a year or so, Jetbrains' Team City. In my current project we use continuous integration builds for running the...
I’m a big fan of just-in-time architecture (a.k.a. agile architecture) because it prevents me from trying to predict the future which, frankly, I suck at. So, although I generally start out with a reference architecture, a lot of changes happen after that point, when the functional requirements g...
More or less since the start of my assignment at my current client, four years ago, we have had some form of a cross-team stand-up at 10:00 every day (often named Scrum-of-Scrums). But now that we have around 10 teams, we started to notice some issues lately. People joined too late or didn't even...
Is your inbox also filling up with loads of emails all part of some kind of discussion where each reply contains the entire history again? Do you also get all kinds of notification emails from build servers, source control systems, and other things to which somebody is supposed to react? Do you o...
After six weeks of beta testing, it is time to remove the beta mark from Fluent Assertions 2.0. Since the beta was released, we fixed several little bugs that you won’t notice, but the original release notes still apply. Release 2.0 adds a lot of new features and improvements, most noticeably the...
This week I completed reading a new book titled The Cucumber Book: Behaviour-Driven Development for Testers and Developers by Matt Wynne and Aslak Hellesoy. Aslak is the founder of the Cucumber project (which is what SpecFlow for .NET is based on), and Matt is one of its most active developers. T...
Since I was already collecting the better articles that I read during the month for sharing with my colleagues and client’s coworkers, I might just as well share them here. Have fun reading them. Virtual Panel: Code-to-Test Ratios, TDD and BDD A great discussion by the authorities on TDD, B...
This is the fourth of several posts in which I’d like to share some of the things we learned throughout more than a year of Agile development using Scrum. Some of them might appear as open doors, but I wish I knew or thought about those before I started that project. Just by looking back at the m...
How applying the SOLID principles on package design can help prevent the dependency hell
During this year's QCon conference held in New York, I attended a full-day workshop on the scalability challenges a growing organization faces, hosted by Randy Shoup. In my previous two posts I discussed a model to understand the needs of an organization in its different life phases, as well as a...
During this year's QCon conference held in New York, I attended a full-day workshop on the scalability challenges a growing organization faces, hosted by Randy Shoup. In my previous post, I elaborated on Randy's classification system to illustrate the phases of a growing organization and how that...
Welcome to the dependency hell While working on a little open-source demo project, I ran into that well-known challenge of NuGet dependency management again. This little project results in a NuGet package, that on itself also relies on other packages. Now, if I would just add those dependencies ...
For a very VERY long time I've been convinced that aggressively refactoring your code in such a way that every piece of logic is repeated only once is a good thing. This practice, often referred to as DRY, or Don't Repeat Yourself, has been one of the many of my tools of choice and goes hand in h...
As you might have read, I've been refactoring some example code for a multi-threaded cache that I got from CodeProject into a source-only NuGet package which will soon be published as FluidCaching. Since this cache has been built to be very performant, the internal algorithms are not trivial to g...
In a previous project, I observed a typical communication mismatch. One team was demonstrating the technical details of architecture that, on first glance, was supposed to be a replacement for an existing architecture. The team demonstrated all kinds of technical solutions and showed us how much ...
If there’s one term next to agile that’s so overloaded nobody knows what to expect, then it must be architect. Yes, you can specialize it by prefixing it with software, as in software architect. And with that, you would be able to determine that he or she is probably designing some kind software ...
I’m a big fan of just-in-time architecture (a.k.a. agile architecture) because it prevents me from trying to predict the future which, frankly, I suck at. So, although I generally start out with a reference architecture, a lot of changes happen after that point, when the functional requirements g...
It has been almost two years since I've last compared NHibernate and Entity Framework, so with the recent alpha version of EF 6, it's about time to look at the current state of affair. I've been using NHibernate for more than 6 years so obviously I'm a bit biased. But I can't ignore that EF's fea...
I'm currently at Microsoft's Build conference and we're all receiving a Surface RT tablet. That means it's a great moment to talk about my plans for the Windows 8 Cookbook. I know, I know, it's a cheesy name so just be aware that I'm open to better suggestions. Since Silverlight is mostly dead, I...
Since I was already collecting the better articles that I read during the month for sharing with my colleagues and client’s coworkers, I might just as well share them here. Have fun reading them. Virtual Panel: Code-to-Test Ratios, TDD and BDD A great discussion by the authorities on TDD, B...
I spend a majority of my private time reading articles and blog posts, having discussions on Twitter, or engaging in conversations on conferences and community events. I'm realistic enough to understand that my opinions are not necessarily the truth, so I use those opportunities to challenge my o...
Since my first blog post on the Silverlight Cookbook in September 2010, I’ve invested a lot of private time in sharing my best practices on building line-of-business application in Silverlight. I shared my code on CodePlex, wrote an entire series of blog posts, and talked about the Cookbook at se...
The Rationale As long as I have been using the Dependency Inversion Principle, Microsoft Unity has always been my preferred Inversion-of-Control framework. So it’s not strange that the Silverlight Cookbook has been using Unity 2 in both its WCF/REST layer as well as within the Silverlight client....
In the 2nd half of 2010 I was so fortunate to get the chance to build my first enterprise-class line-of-business application written in Silverlight 4. And although I designed my original reference architecture earlier that year, actually building it is a completely different thing. I learned a lo...
Well, QCon 2010 is over, so it is time to travel back to the Netherlands and finally see my wife and daughter again. However, after the previous post, the quotes have been coming in on Twitter space. So, to complete one of the most intense conferences ever, here are some more funny, inspiring and...
One of the funny things of this QCon is the many tweets that the attendees have been throwing into the world wide web. That's great for a speaker because now they get immediate feedback on their performance, both good and bad. These are some of the quotes I found funny, inspiring or refreshing: ...
Updated on March 3rd 2012 with a PDF of Dan North’s mind map On the first day of the QCon conference in San Francisco, I attended a full-day tutorial titled "Secrets of Agile Architecture" hosted by Dan North. I didn't really know what to expect, but I was hoping for some refreshingly new insight...
This post is part of a series of blog posts detailing various aspects of the Silverlight Cookbook, an initiative to demonstrate proper design choices for building enterprise-class line-of-business applications with Silverlight (and WPF if you will). It currently consists out of the following part...
What is it? Technical Debt is every change to your code base that does not comply with the usual level of quality your team has agreed upon. Since this level of quality has been introduced to guarantee a healthy code base throughout the life time of the system, introducing technical debt essenti...
The Domain Model is roughly designed according to the DDD principles where cross-aggregate logic is handled by the command handlers instead of the more traditional domain services. One thing that I changed after I attended Greg Young's DDD/CQRS training is that I no longer allow my domain entitie...
After having put the introduction and the commanding part behind us, let me explain how I deal with querying. Consider the following slice of the reference architecture. My original intention was to use WCF Data Services combined with NHibernate on the query side. For one, because it allo...
<p $1=”$1”></p> <p $1=”$1”>After sharing my thoughts on unit testing in Silverlight and the combination of NHibernate and WCF Data Services, it is time to discuss the updated version of the Silverlight reference architecture from one of my posts of last year. To put the discu...
<p $1=”$1”></p> <p $1=”$1”></p> <p $1=”$1”></p> <p $1=”$1”></p> <p $1=”$1”></p> <p>This post is part of a series of blog posts detailing various aspects of the Silverlight Cookbook, an initiative to demonstrate prope...
Yesterday evening I did a talk on building a .NET-based system using Command Query Responsibility Segregation and Event Sourcing. We had a lot of awesome discussions on its applicability, and as usual, I ran out of time again. I could have easily spend a full day on this subject, but unfortunatel...
Update October 2010: I’ve started a new in-depth series on my current Silverlight 4 Reference Architecture. Recently I've been catching up on Silverlight by reading Pro Silverlight 2 in C# and the many blogs and articles on Silverlight 3 and I'm seriously impressed. The reason for this sudden in...
A while ago, some business man from the US who travels a lot throughout the US as part of his job, was sitting in his airline's business lounge for a drink. Right after finishing his 2nd, an attractive women approached him and offered him a drink in exchange for somebody to talk to. Somewhere hal...
This week I completed reading a new book titled The Cucumber Book: Behaviour-Driven Development for Testers and Developers by Matt Wynne and Aslak Hellesoy. Aslak is the founder of the Cucumber project (which is what SpecFlow for .NET is based on), and Matt is one of its most active developers. T...
Here we are at the fourth and last day of Microsoft Build 2012. That so many people showed up at the first session is quite surprising considering the attendee party that went on until midnight in downtown Seattle. It was a typical attendee party; free food and drinks and live music. Since being ...
So at this 3rd day here at Microsoft Build 2012, I'm actually getting lucky. Three great sessions in a row is obviously not something I've seen before. Hey, maybe I'll get to see four great sessions tomorrow. Anyway, with some of the technical debt from last night's Beerfest and a Halloween party...
Because day 2 of the Build conference wasn't any different, it seems that I must learn to accept that a maximum of two good sessions per day is going to be the standard. Fortunately the keynote was top notch with both Scott Hanselman and Scott Guthrie taking stage. They showed some of the power t...
Day 1 of Microsoft Build was in some way disappointing and at the same time exhilarating. To be honest, I was expecting to be updated on the new stuff Microsoft plans for the near future. The fact that the session list was not disclosed until a day ahead also helped reinforce that expectation. Bu...
It has been almost two years since I've last compared NHibernate and Entity Framework, so with the recent alpha version of EF 6, it's about time to look at the current state of affair. I've been using NHibernate for more than 6 years so obviously I'm a bit biased. But I can't ignore that EF's fea...
After 50000 downloads and the recent final release of Visual Studio 2012 / C# 5.0 it was about time to do a thorough update of the C# Coding Guidelines. Although most of the guidelines have been preserved, I’ve tried to rewrite several of them using a less formal and less verbose writing style. I...
It has barely been more than two months ago, but the number of downloads through CodePlex and Nuget combined has exceeded 2000. Me and co-author Martin Opdam thought that to be a nice reason for releasing a new version of Fluent Assertions. This isn't a big release, but since we are following sem...
Yesterday I ended up being part of a discussion about using the ‘new’ keyword to hide base-class members. A colleague of mine used it to alter a base-class property in a derived class with the purpose of making it more strongly typed. I’ve always rationalized guideline AV1010 (Don’t hide inherit...
Indeed it is, in particular within the part of the .NET community that believes test-first development is non-negotiable. We receive more and more suggestions, contributions and questions, and we’ve started to notice some blog posts here and there. It’s not that it is being downloaded thousands ...
Last updated on September 22nd Unfortunately, the Microsoft Build conference conflicted with our company's 5-year anniversary and the associated sailing trip in Greece. Fortunately, the blogosphere and twitter-space provided plenty of opportunities for trying to grasp what the stuff Sinofsky and...
A few weeks ago I read The value of open-source is the vision not the source code and that made me think about my own reasons for starting Fluent Assertions, now more than a year ago. In the light of that article, lets briefly go over my own goals for Fluent Assertions. The intention of a unit te...
In the last couple of months, me and colleague Martin Opdam have spent a considerable amount of time on both improving the reporting capabilities of Fluent Assertions as well as fixing and incorporating various community contributions. Because of the many changes required, a very busy client proj...
It’s only February, but I’ve received so many requests from the community that another release of Fluent Assertions was easily warranted. New Features Somebody working under the name of CtrlAltDel pointed me at the little-known fact that floating point variables are inheritably inaccurate and...
Christmas usually means a week off and a whole lot of free time between the social obligations and spending some quality time with my wife and daughter. That’s why I decided to get rid of some of the backlog items for the next version of Fluent Assertions. And I’m done, version 1.3.0 is a fact. N...
I finally found some time to update the coding guidelines with some feedback I received since it’s original release in June this year. I’ve removed the following guidelines because I found that they were either very exotic or not general enough for most developers: Avoid side-effects when...
<p $1=”$1”></p> <p $1=”$1”>After sharing my thoughts on unit testing in Silverlight and the combination of NHibernate and WCF Data Services, it is time to discuss the updated version of the Silverlight reference architecture from one of my posts of last year. To put the discu...
Yesterday evening I did a talk on building a .NET-based system using Command Query Responsibility Segregation and Event Sourcing. We had a lot of awesome discussions on its applicability, and as usual, I ran out of time again. I could have easily spend a full day on this subject, but unfortunatel...
After 50000 downloads and the recent final release of Visual Studio 2012 / C# 5.0 it was about time to do a thorough update of the C# Coding Guidelines. Although most of the guidelines have been preserved, I’ve tried to rewrite several of them using a less formal and less verbose writing style. I...
Yesterday I ended up being part of a discussion about using the ‘new’ keyword to hide base-class members. A colleague of mine used it to alter a base-class property in a derived class with the purpose of making it more strongly typed. I’ve always rationalized guideline AV1010 (Don’t hide inherit...
Somebody on Twitter recently posed the question whether innovation in software and agile development can co-exist or not. To remove any misinterpretation - something quite common for Twitter discussion - I asked him to clarify what he meant with the word 'innovation'. In short, any kind of softwa...
Two weeks ago, I talked about Flowdock, an online tool to aggregate multiple sources into a single environment where agile teams can work together. I also promised to look at an alternative service named Slack. When we introduced Flowdock, somewhere in November 2013, Slack was still in its very e...
Is your inbox also filling up with loads of emails all part of some kind of discussion where each reply contains the entire history again? Do you also get all kinds of notification emails from build servers, source control systems, and other things to which somebody is supposed to react? Do you o...
I'm currently at Microsoft's Build conference and we're all receiving a Surface RT tablet. That means it's a great moment to talk about my plans for the Windows 8 Cookbook. I know, I know, it's a cheesy name so just be aware that I'm open to better suggestions. Since Silverlight is mostly dead, I...
Since my first blog post on the Silverlight Cookbook in September 2010, I’ve invested a lot of private time in sharing my best practices on building line-of-business application in Silverlight. I shared my code on CodePlex, wrote an entire series of blog posts, and talked about the Cookbook at se...
Why? Because even though think I have a reasonable idea of when a user interface is consistent and user friendly, I suck at the raw design skills. Just check out the current ‘design’ if you don’t believe me. I’m actually looking for something that resembles the Cosmopolitan theme or MetroTwit: ...
The Rationale As long as I have been using the Dependency Inversion Principle, Microsoft Unity has always been my preferred Inversion-of-Control framework. So it’s not strange that the Silverlight Cookbook has been using Unity 2 in both its WCF/REST layer as well as within the Silverlight client....
Although it might not seem like that, I am still working on the Silverlight Cookbook. However, I’ve just moved to a new house, so I ran out of time recently. Fortunately, since my colleague Martin Opdam is actively working on Fluent Assertions, so I only have to divide my free time between the co...
In the 2nd half of 2010 I was so fortunate to get the chance to build my first enterprise-class line-of-business application written in Silverlight 4. And although I designed my original reference architecture earlier that year, actually building it is a completely different thing. I learned a lo...
This post is part of a series of blog posts detailing various aspects of the Silverlight Cookbook, an initiative to demonstrate proper design choices for building enterprise-class line-of-business applications with Silverlight (and WPF if you will). It currently consists out of the following part...
<p $1=”$1”></p> <p $1=”$1”></p> <p $1=”$1”></p> <p $1=”$1”></p> <p $1=”$1”></p> <p>This post is part of a series of blog posts detailing various aspects of the Silverlight Cookbook, an initiative to demonstrate prope...
Many attempts have been made to improve the overal quality of our software development efforts, but if there’s one I’d like to put some attention on, it’s Test Driven Development. It’s design-first, test-first approach has proved significant increases in overal quality. However, TDD is not easy a...
Patterns & Practices has just finished compiling a list of candidate features and improvements for the next installment of the Enterprise Library. Grigori Melnik, the Enterprise Library’s product manager has opened an online survey and invites the .NET community to share their priorities and,...
This morning, on the Developer Days 2010, I did a talk on the current state of affairs of the 4.0 version of the Entity Framework, including a rough comparison with NHibernate 2.1. Apparently this is something that’s on the mind of many people. The room was supposed to accommodate a maximum of 80...
Some of you who have been visiting the Dutch Developer Days 2010 in The Hague today may have noticed the flyers and banners for promoting the new online version of the .NET Magazine. Those who already know me may have noticed that it’s me on those banners. Since the photographer spe...
Let's be honest here. Since Microsoft has been shipping technical previews of Windows 10, I've been repaving my laptop a couple of times and then reverted to Windows 8.1. I didn't like the intermediate touch experience and stability was also not its greatest strengths. In fact, I reverted to 8.1 ...
That was the weirdest conference party ever. No music, no dancing, just free food and beer. Well, our of me, two Austrian guys and a fellow from Dakota had plenty of great stories to share. And did I mention the free beer? Freeing people and optimizing the tools As any good professional would do...
So here I am in New York, all alone and looking for something fun to do during a rainy day preceding QCon New York. The Empire State Building was covered in clouds so what can you do? Well, you go to meetup.com and browse the many events that happen in a big city like this. Country dancing and ro...
Sometimes you run into a workshop that you didn't have any particular expectations for and then your mind is completely blown. That happened to me on the first day of tutorials here at QCon San Francisco. "By whom?" I hear you asking. Well, by Steve Peha and Amr Elssamadisy and heavily supported ...
As with any conference, speakers and attendees tend to make a lot of interesting, inspiring or funny statements. QCon 2013 was no different. Some key takeaways: “Can't tune until you have real users.” (Stephen Rylander) "If someone comes in suggesting that we move a release date… we mock t...
Man, it really feels like we've been around for ages, but this is just the 3rd day of QCon San Francisco. After a quick breakfast at the local Starbucks we dropped in on another keynote, right after the daily introduction by all track owners. The keynote was done by Brendan Eich, the inventor of ...
Although I did get the feeling that QCon isn't at the same quality level as the last time I was here, I did manage to pick up a considerable amount of new ideas and insights on the first day. Not anything mind blowing, but still worth the trip. So let's see what the 2nd day did bring us. The day...
So after all that fun during the first weekend (and about which I’ll blog separately), now it's the time to finally shift our attention to the reason for which we're in San Francisco in the first place; InfoQ's highly rated internal software conference QCon. Since my previous visit to QCon was su...
A question which was asked many times during the week was whether or not this trip to Build 2012 in Redmond was worth the time and money. Even after four days of raw content, there is no short answer here. As Dennis Vroegop clearly illustrated, the organization was definitely not up to the task...
Here we are at the fourth and last day of Microsoft Build 2012. That so many people showed up at the first session is quite surprising considering the attendee party that went on until midnight in downtown Seattle. It was a typical attendee party; free food and drinks and live music. Since being ...
So at this 3rd day here at Microsoft Build 2012, I'm actually getting lucky. Three great sessions in a row is obviously not something I've seen before. Hey, maybe I'll get to see four great sessions tomorrow. Anyway, with some of the technical debt from last night's Beerfest and a Halloween party...
Because day 2 of the Build conference wasn't any different, it seems that I must learn to accept that a maximum of two good sessions per day is going to be the standard. Fortunately the keynote was top notch with both Scott Hanselman and Scott Guthrie taking stage. They showed some of the power t...
Day 1 of Microsoft Build was in some way disappointing and at the same time exhilarating. To be honest, I was expecting to be updated on the new stuff Microsoft plans for the near future. The fact that the session list was not disclosed until a day ahead also helped reinforce that expectation. Bu...
This week is Microsoft Build 2012. For those who don’t know what that is, it’s Microsoft largest and most important annual event for sharing the future of the company’s plans around Windows, Windows Phone and their development platforms. Since with most trips to the US, it’s usually cheaper to ta...
Yesterday I did a 2-hour talk on getting the most out of UI automation, particularly using SpecFlow and WaTiN. You can find the slides down here and the demo code at GitHub.<iframe allowfullscreen="" frameborder="0" height="356" marginheight="0" marginwidth="0" scrolling="no" src="http://www.s...
Just to be clear, I didn’t actually attend QCon New York this year. But after the experience of attending QCon San Francisco in 2010, I never forget the many great quotes you’ll find on Twitter. This time was no different. "Distributed objects failed; for very good reasons. Values rule on the w...
Last updated on September 22nd Unfortunately, the Microsoft Build conference conflicted with our company's 5-year anniversary and the associated sailing trip in Greece. Fortunately, the blogosphere and twitter-space provided plenty of opportunities for trying to grasp what the stuff Sinofsky and...
I’m honored to have been selected to speak at my first event in the United Kingdom, Developer Developer Developer North, hosted at the University of Sunderland, near New Castle. Our job as a software developer seems to revolve mostly around programming languages, frameworks and Visual Studio. And...
Somebody recently asked me what sessions I was planning to attend at the upcoming 2011 edition of the Microsoft Developer Days in The Hague. To be honest, my primary reason for going to a Dutch conference is to chat with fellow .NET enthusiasts, and attending sessions is usually a side-effect of ...
I’m very happy that I’ll be speaking at a number of very nice local and international conferences. On Saturday March 26th, I’ll be joining the Dutch Code Camp event where I’ll be doing a chalk’n’talk on my Silverlight Cookbook initiative. <ul> <li>On Wednesday, April 27th, I will t...
Although the Dutch Microsoft Developer Days is mostly about foreign speakers, the organization has a recurring event called the wildcard sessions. This allowed me to speak at the biggest Dutch conference of the year for two years in a row. Unfortunately, the number of proposals has exploded this ...
Last Thursday, me and my employer Aviva Solutions hosted the December edition of the DotNED user group in Leiden. And yesterday a shared my Silverlight reference architecture on this year’s last SDN Event. I gave two talks that evening and one last night and wanted to share my slides and example ...
Well, QCon 2010 is over, so it is time to travel back to the Netherlands and finally see my wife and daughter again. However, after the previous post, the quotes have been coming in on Twitter space. So, to complete one of the most intense conferences ever, here are some more funny, inspiring and...
The 2nd day of QCon was not one where I chose wisely. My focus for this conference was everything Agile and anything from the well-known speakers. So I ignored most sessions that had words like REST, SQL or Java in it. How wrong I was…. But I did not discover that until I heard and read about all...
The compression ratio of the content versus the timing available is quite high here at QCon. Already at the first official day, I attended 7 (!) talks. That's quite a lot of information to process. Unfortunately, the difference in quality is really noticeable. Some talks were absolutely awesome a...
One of the funny things of this QCon is the many tweets that the attendees have been throwing into the world wide web. That's great for a speaker because now they get immediate feedback on their performance, both good and bad. These are some of the quotes I found funny, inspiring or refreshing: ...
Updated on March 3rd 2012 with a PDF of Dan North’s mind map On the first day of the QCon conference in San Francisco, I attended a full-day tutorial titled "Secrets of Agile Architecture" hosted by Dan North. I didn't really know what to expect, but I was hoping for some refreshingly new insight...
This week I'll be attending QCON, an international conference on architecture and Agile held in San Francisco. Because a flight on Sunday was 400 euros more expensive than a flight on Saturday, I decided to rent a nice convertible and use the day off to take a nice road trip through the area to t...
Most of us will be familiar with the standard 3- or 4-layer architecture you often see in larger enterprise systems. Some are already practicing Domain Driven Design and work together with the business to clarify the domain concepts. Perhaps you’ve noticed that is difficult to get the intention o...
This morning, on the Developer Days 2010, I did a talk on the current state of affairs of the 4.0 version of the Entity Framework, including a rough comparison with NHibernate 2.1. Apparently this is something that’s on the mind of many people. The room was supposed to accommodate a maximum of 80...
Some of you who have been visiting the Dutch Developer Days 2010 in The Hague today may have noticed the flyers and banners for promoting the new online version of the .NET Magazine. Those who already know me may have noticed that it’s me on those banners. Since the photographer spe...
Some background In my recent post about the responsibilities of an open-source developer I said that the author of an open-source project is fully entitled to reject a contribution. In the case of Fluent Assertions, this is no different. Some things just aren't a good fit for a general purpose a...
The proudest moment anybody initiating an open-source project can experience is when that project finally gains the momentum to make a difference within the community it targets. When my colleague Martin and I published the first release of Fluent Assertions on CodePlex in 2011 (yeah, those were ...
Now that the number of downloads of Fluent Assertions is about to cross the magic number of 1 million downloads, and the library is quite feature complete, it is time to rethink the release strategy. Since its inception we’ve always used a separate branch for working on future features and improv...
With all credits going to Oren Novotny, Tommy Long, Stuart Blackler and some of the Microsoft folks behind the .NET Core projects, Fluent Assertions 4.0 introduces support for the new platforms .NET 4.6, CoreCLR and .NET Native. Since Fluent Assertions has adopted the Semantic Versioning scheme...
As part of stabilizing an upcoming release, I always dog food a beta package against the 12000 unit tests in one of our bigger projects. In the early days, that would surface all kinds of edge cases I never thought of. In every single case, the first thing I would do is to add a new unit test to ...
Just a quick post to let you all know that I’ve just published a new version of Fluent Assertions with a load of little improvements that will improve your life as a unit test developer a little bit. New features Added CompareEnumsAsString and CompareEnumsAsValue to the options taken byShouldBe...
Yesterday, much later than planned, Fluent Assertions 3.1 as well as its companion project Fluent Assertions for Xamarin were released on Github and NuGet. As is becoming quite common this year, the honors for most active contributors once again go to Adam Voss and Oren Novotny. Next to being the...
Boy do I love the .NET community. Since I moved Fluent Assertions to Github, people have been creating 32 forks and provided me with 37 pull requests. In fact, release 3.0 has been made possible by the likes of Adam Voss (who provided a lot of those pull requests), Maarten Balliauw (for setting u...
It has been way too long since I last released a new version of Fluent Assertions, but somehow my intention to deliver at least every three months has once again failed by the obligations a working husband and father of two has. Nonetheless, Fluent Assertions 2.1 is a fact. And although it isn't ...
I'm currently at Microsoft's Build conference and we're all receiving a Surface RT tablet. That means it's a great moment to talk about my plans for the Windows 8 Cookbook. I know, I know, it's a cheesy name so just be aware that I'm open to better suggestions. Since Silverlight is mostly dead, I...
After six weeks of beta testing, it is time to remove the beta mark from Fluent Assertions 2.0. Since the beta was released, we fixed several little bugs that you won’t notice, but the original release notes still apply. Release 2.0 adds a lot of new features and improvements, most noticeably the...
After many months of development, in particular during in evenings after work and in the weekends, we’re proud to present the first (and hopefully the only) beta of Fluent Assertions 2.0. Together with my good friend and coworker Martin Opdam, and supported by noticeable contributors like Oren No...
While we are working on the next major version of Fluent Assertions, we received several smaller bug reports that we bundled in release 1.7.1. Fixed a bug that occurs when two collections are compared for equality but the collection contains null. Fixed a stack overflow while formatting an obje...
It has barely been more than two months ago, but the number of downloads through CodePlex and Nuget combined has exceeded 2000. Me and co-author Martin Opdam thought that to be a nice reason for releasing a new version of Fluent Assertions. This isn't a big release, but since we are following sem...
Indeed it is, in particular within the part of the .NET community that believes test-first development is non-negotiable. We receive more and more suggestions, contributions and questions, and we’ve started to notice some blog posts here and there. It’s not that it is being downloaded thousands ...
A few weeks ago I read The value of open-source is the vision not the source code and that made me think about my own reasons for starting Fluent Assertions, now more than a year ago. In the light of that article, lets briefly go over my own goals for Fluent Assertions. The intention of a unit te...
In the last couple of months, me and colleague Martin Opdam have spent a considerable amount of time on both improving the reporting capabilities of Fluent Assertions as well as fixing and incorporating various community contributions. Because of the many changes required, a very busy client proj...
As of now you can download the latest version of Fluent Assertions directly from within Visual Studio 2010. Just install the NuGet package manager, select Add Library Package Reference from the project context menu and search for FluentAssertions.
Yesterday, I blogged about the newest release of Fluent Assertions for .NET and Silverlight and promised to demonstrate the new event monitoring syntax. Since I’m a Silverlight addict, I decided to show you an example of a MVVM unit test when using the traditional Assert class and the same exampl...
Christmas usually means a week off and a whole lot of free time between the social obligations and spending some quality time with my wife and daughter. That’s why I decided to get rid of some of the backlog items for the next version of Fluent Assertions. And I’m done, version 1.3.0 is a fact. N...
Did Visual Studio really get so much better since the last time I tried? Or is JetBrains Rider still years ahead of the competition. Let’s look at editing, debugging and refactoring.
Did Visual Studio really get so much better since the last time I tried? Or is JetBrains Rider still years ahead of the competition. Let’s look at general usability and code navigation
This is the fourth of several posts in which I’d like to share some of the things we learned throughout more than a year of Agile development using Scrum. Some of them might appear as open doors, but I wish I knew or thought about those before I started that project. Just by looking back at the m...
This is the third of several posts in which I’d like to share some of the things we learned throughout more than 14 sprints of Agile development using Scrum. Some of them might appear as open doors, but I wish I knew or thought about those before I started that project. Just by looking back at th...
This is the second of several posts in which I’d like to share some of the things we learned throughout more than 14 sprints of Agile development using Scrum. Some of them might appear as open doors, but I wish I knew or thought about those before I started that project. Just by looking back at t...
This is the first of several posts in which I’d like to share some of the things we decided throughout 14 sprint retrospective. Some of them might appear as open doors, but I wish I knew or thought about those before I started that project. Just by looking back at the mistakes a team of 9 develop...
Since my first blog post on the Silverlight Cookbook in September 2010, I’ve invested a lot of private time in sharing my best practices on building line-of-business application in Silverlight. I shared my code on CodePlex, wrote an entire series of blog posts, and talked about the Cookbook at se...
In the sixth post of this series I talked about how you can use Swagger to create real useful documentation for your API. In this seventh and probably last post, I'd like to present some spices to make that OWIN middleware component extra special. Spice 1: Automate your entire bu...
In the fifth post of this series I talked about some PowerShell tips to align the versions of all NuGet packages. In this sixth post, I'd like to show you how you can make your HTTP API much easier to use. Ingredient 7: Swagger-enabled documentation If your component exposes an HTTP API based o...
In the fourth installment of this series I proposed a pattern for postponing expensive operations from inside your middleware component until the OWIN pipeline has been constructed. In this post, I'm going to talk about aligning package dependency versions. Why? Well, in my experience a well-desi...
In my last post I talked about unit testing your OWIN pipeline and briefly mentioned that you shouldn't do any heavy lifting from inside your UseWhatever method. Examples of that include starting background tasks or connecting to other services (through that HttpMessageHandler). If you're lucky, ...
In my last post, I talked about decoupling the construction of the OWIN pipeline from the definition of the OWIN middleware component. In this post, I’m going to talk about the next ingredient, the testing story.Ingredient 4: Testing your entire HTTP pipelineIn most projects that are building ASP...
In my last post, I talked about naming conventions and reducing the number of public dependencies, the first two ingredients of a recipe for well-designed OWIN middleware components. In this post, I'm going to talk about separating the OWIN pipeline construction from the middleware defi...
My main focus the last couple of months has been on building components that offer HTTP-based services. This whole component-oriented focus is something we've been focusing on the last year or so because we wanted to actively trying move away from building monolithic systems. Tools like OWIN, NuG...
Did Visual Studio really get so much better since the last time I tried? Or is JetBrains Rider still years ahead of the competition. Let’s look at editing, debugging and refactoring.
Did Visual Studio really get so much better since the last time I tried? Or is JetBrains Rider still years ahead of the competition. Let’s look at general usability and code navigation
At Aviva Solutions, we’ve been using Git for a little of over two years now and I can wholeheartedly say that after having worked with TFS for years, we’ll never go back… ever. But with any new technology, practice or methodology, you need to go through several cycles before you find a way that w...
Somebody on Twitter recently posed the question whether innovation in software and agile development can co-exist or not. To remove any misinterpretation - something quite common for Twitter discussion - I asked him to clarify what he meant with the word 'innovation'. In short, any kind of softwa...
The proudest moment anybody initiating an open-source project can experience is when that project finally gains the momentum to make a difference within the community it targets. When my colleague Martin and I published the first release of Fluent Assertions on CodePlex in 2011 (yeah, those were ...
Suppose you're in the following situation.You and your team are supposed to start working on some important architectural changes that were long due.Your team is then asked by your manager to help build an important feature that requires the unique skills of your team, and ...
After 50000 downloads and the recent final release of Visual Studio 2012 / C# 5.0 it was about time to do a thorough update of the C# Coding Guidelines. Although most of the guidelines have been preserved, I’ve tried to rewrite several of them using a less formal and less verbose writing style. I...
This week I completed reading a new book titled The Cucumber Book: Behaviour-Driven Development for Testers and Developers by Matt Wynne and Aslak Hellesoy. Aslak is the founder of the Cucumber project (which is what SpecFlow for .NET is based on), and Matt is one of its most active developers. T...
This is the third of several posts in which I’d like to share some of the things we learned throughout more than 14 sprints of Agile development using Scrum. Some of them might appear as open doors, but I wish I knew or thought about those before I started that project. Just by looking back at th...
It’s only February, but I’ve received so many requests from the community that another release of Fluent Assertions was easily warranted. New Features Somebody working under the name of CtrlAltDel pointed me at the little-known fact that floating point variables are inheritably inaccurate and...
I finally found some time to update the coding guidelines with some feedback I received since it’s original release in June this year. I’ve removed the following guidelines because I found that they were either very exotic or not general enough for most developers: Avoid side-effects when...
Last Thursday, me and my employer Aviva Solutions hosted the December edition of the DotNED user group in Leiden. And yesterday a shared my Silverlight reference architecture on this year’s last SDN Event. I gave two talks that evening and one last night and wanted to share my slides and example ...
What is it? Technical Debt is every change to your code base that does not comply with the usual level of quality your team has agreed upon. Since this level of quality has been introduced to guarantee a healthy code base throughout the life time of the system, introducing technical debt essenti...
A few weeks ago I had a chat with Paul Jansen, CEO of a small Eindhoven-based company named Tiobe. You might indirectly know Tiobe for its programming language index and their commercial code checker ClockSharp. But they have also been hosting a C# Coding Standard I co-wrote for Philips Medical S...
What is it? A domain model is typically depicted by a UML class diagram in which the classes and associations represent the business concepts and the relationships between them. Although you can use a piece of paper to draw up a domain model, in most cases a UML case tool is better suited for t...
What is it? The Ubiquitous Language is a unified language consisting of verbs and nouns from the business domain of an enterprise system and should be used by all team members, stakeholders and other involved persons. Why would you do it? Because it creates a bridge of understanding between th...
What is it? A mindset and practice that requires you to continuously reevaluate a region of code each time you make a change. In essence, you need to look at the code related to your changes and reconsider whether the original solution is still the best solution accounting for the information you...
As promised earlier, you can now download the concept version of my new Coding Guidelines for C# 3.0 and C# 4.0 from a dedicated CodePlex site at www.csharpcodinguidelines.com. The list of changes is quite big, and includes new guidelines covering object-oriented design, design principles, C# 4.0...
What is it? Coding guidelines, or coding standards if you will, are documents consisting of rules and recommendations on the use of C# in enterprise systems. They deal with code layout, naming guidelines, the proper use of the .NET Framework, tips on writing useful comments and XML documentat...
It has been only 6 weeks since I first released Fluent Assertions to the public, followed by version 1.1 a week later. In the weeks thereafter, I received some nice ideas from the community which caused me to start working on the next version. But it was not easy. I found that designing a small f...
As part of my effort to improve the type-safety of Fluent Assertions, I’ve been investigating the possibility to use C# extension methods all the way. Unfortunately I think I’ve ran into the limitations of C# 3.0 (and C# 4.0 since it doesn’t add anything useful for this). Essentially, I’d like to...
What is it? A collection of rules stating what a block of code should look like. These may include rules on where line breaks are required, how to place parentheses, how much whitespace to put before and after those parentheses, how many spaces to use when indenting and where to insert empty line...
Since my first blog post on the Silverlight Cookbook in September 2010, I’ve invested a lot of private time in sharing my best practices on building line-of-business application in Silverlight. I shared my code on CodePlex, wrote an entire series of blog posts, and talked about the Cookbook at se...
Why? Because even though think I have a reasonable idea of when a user interface is consistent and user friendly, I suck at the raw design skills. Just check out the current ‘design’ if you don’t believe me. I’m actually looking for something that resembles the Cosmopolitan theme or MetroTwit: ...
The Rationale As long as I have been using the Dependency Inversion Principle, Microsoft Unity has always been my preferred Inversion-of-Control framework. So it’s not strange that the Silverlight Cookbook has been using Unity 2 in both its WCF/REST layer as well as within the Silverlight client....
Last updated on September 22nd Unfortunately, the Microsoft Build conference conflicted with our company's 5-year anniversary and the associated sailing trip in Greece. Fortunately, the blogosphere and twitter-space provided plenty of opportunities for trying to grasp what the stuff Sinofsky and...
Although it might not seem like that, I am still working on the Silverlight Cookbook. However, I’ve just moved to a new house, so I ran out of time recently. Fortunately, since my colleague Martin Opdam is actively working on Fluent Assertions, so I only have to divide my free time between the co...
Before I continue with the rest of this post, I first need to make a disclaimer. I'm in no way an expert on all things Microsoft has to offer in the web realm and have yet to complete a full-fledged ASP.NET MVC & JQuery project. However, I see myself as someone who quickly grasps the potenti...
Somebody recently asked me what sessions I was planning to attend at the upcoming 2011 edition of the Microsoft Developer Days in The Hague. To be honest, my primary reason for going to a Dutch conference is to chat with fellow .NET enthusiasts, and attending sessions is usually a side-effect of ...
In the 2nd half of 2010 I was so fortunate to get the chance to build my first enterprise-class line-of-business application written in Silverlight 4. And although I designed my original reference architecture earlier that year, actually building it is a completely different thing. I learned a lo...
It’s only February, but I’ve received so many requests from the community that another release of Fluent Assertions was easily warranted. New Features Somebody working under the name of CtrlAltDel pointed me at the little-known fact that floating point variables are inheritably inaccurate and...
Although the Dutch Microsoft Developer Days is mostly about foreign speakers, the organization has a recurring event called the wildcard sessions. This allowed me to speak at the biggest Dutch conference of the year for two years in a row. Unfortunately, the number of proposals has exploded this ...
Yesterday, I blogged about the newest release of Fluent Assertions for .NET and Silverlight and promised to demonstrate the new event monitoring syntax. Since I’m a Silverlight addict, I decided to show you an example of a MVVM unit test when using the traditional Assert class and the same exampl...
Last Thursday, me and my employer Aviva Solutions hosted the December edition of the DotNED user group in Leiden. And yesterday a shared my Silverlight reference architecture on this year’s last SDN Event. I gave two talks that evening and one last night and wanted to share my slides and example ...
Last week we put our first full-blown Silverlight 4 line-of-business application into production, and just yesterday, we’ve run into our first production issue. Consider the width specifications of the DataGrid columns in this XAML fragment: This XAML file was generated by Expression Blend and h...
This post is part of a series of blog posts detailing various aspects of the Silverlight Cookbook, an initiative to demonstrate proper design choices for building enterprise-class line-of-business applications with Silverlight (and WPF if you will). It currently consists out of the following part...
The Domain Model is roughly designed according to the DDD principles where cross-aggregate logic is handled by the command handlers instead of the more traditional domain services. One thing that I changed after I attended Greg Young's DDD/CQRS training is that I no longer allow my domain entitie...
After having put the introduction and the commanding part behind us, let me explain how I deal with querying. Consider the following slice of the reference architecture. My original intention was to use WCF Data Services combined with NHibernate on the query side. For one, because it allo...
<p $1=”$1”></p> <p $1=”$1”>After sharing my thoughts on unit testing in Silverlight and the combination of NHibernate and WCF Data Services, it is time to discuss the updated version of the Silverlight reference architecture from one of my posts of last year. To put the discu...
As I already mentioned in my previous post, we're building a line-of-business app using Silverlight 4 and WCF Data Services. I really think Silverlight is great for those kind of systems, but since it is based on a different run-time as the full .NET framework, you may wonder what you'll run into...
<p $1=”$1”></p> <p $1=”$1”></p> <p $1=”$1”></p> <p $1=”$1”></p> <p $1=”$1”></p> <p>This post is part of a series of blog posts detailing various aspects of the Silverlight Cookbook, an initiative to demonstrate prope...
While working on my demo code for my full-day talk on Software Development Practices in Practice I was a bit ambitious and introduced both Silverlight 4 and WCF RIA Services. Apart from the fact that the preparation caused a bit too much of my social live, I ran in some things I don’t really like...
Update October 2010: I’ve started a new in-depth series on my current Silverlight 4 Reference Architecture. In July I posted about my considerations for a Silverlight Reference Architecture, and in December I talked about it in my chalk’n’talk session on architecture, WCF RIA Services and Silver...
Update October 2010: I’ve started a new in-depth series on my current Silverlight 4 Reference Architecture. Recently I've been catching up on Silverlight by reading Pro Silverlight 2 in C# and the many blogs and articles on Silverlight 3 and I'm seriously impressed. The reason for this sudden in...
During last weeks' Git Like a Pro talk I tried to convey the message that switching to Git is much more than introducing a new source control system. It will affect not just the way you commit source code, branch or merge, it changes the entire development workflow. In fact, I'm willing to claim ...
Almost every time I do some kind of talk somewhere, people ask me for advice on how to convince their management that they should drop Microsoft Team Foundation Server's source control system and move over to Git. In this post, I'll be talking about the source control system only. Both Visual Stu...
What is it? Using Team Foundation Server’s User Story, Task and Bug work item types as the central unit of work for all the activities done within a project. Why would you do it? Because it adds traceability between the functional requirements and the way these requirements have been realized ...
What is it? An automatic build is a fully automated compilation of a specific version of your source code repository and which runs at regular intervals. More often than not, such a build includes additional steps such as running a static code analysis and code coverage, executing all automat...
What is it? Coding guidelines, or coding standards if you will, are documents consisting of rules and recommendations on the use of C# in enterprise systems. They deal with code layout, naming guidelines, the proper use of the .NET Framework, tips on writing useful comments and XML documentat...
What is it? An (online) list of verification tasks to sign off as part of the delivery process of a newly delivered unit of work. Usually these include things that are often forgotten, or aspects that require explicit verification. See an example of such a list here. Why would you do it? Becau...
In response to my posts on Peer Reviews, Unit Testing & TDD, and Common Code Layout, someone noticed that all these posts were part of my Team Foundation Server Development Practices series, but not every post actually mentioned TFS. Obviously, he was right. The reason for using the TFS prefi...
Yesterday, a colleague of mine asked for some guidance on how to partition a Visual Studio solution into individual projects. Instead of simply answering his email I thought that blogging about it may be useful for others as well, so here are my rules: In general, have as few projects as possi...
What is it? A formal review of all code and artifacts related to a requirement or task by another person than the original developer. Rework because of review comments must be revalidated afterwards. Why would you do that? Because the average developer introduces 10-50 bugs per 10...
Storyotypes are stereotypes for user stories that can help to define the right scope for your user stories. You can read more about these in the article Using Storyotypes to Split Bloated XP Stories and these slides. Team Foundation Server 2010 includes a new VSTS for Agile process template close...
As part of my many assignments, I’m compiling a bunch of Application Lifecycle Management practices into a set of development guidelines for bootstrapping our internal projects using Team Foundation Server. I’ve decided to share these with the community so that others may benefit from it as well....
As you might have read, I've been refactoring some example code for a multi-threaded cache that I got from CodeProject into a source-only NuGet package which will soon be published as FluidCaching. Since this cache has been built to be very performant, the internal algorithms are not trivial to g...
After six weeks of beta testing, it is time to remove the beta mark from Fluent Assertions 2.0. Since the beta was released, we fixed several little bugs that you won’t notice, but the original release notes still apply. Release 2.0 adds a lot of new features and improvements, most noticeably the...
Yesterday I did a 2-hour talk on getting the most out of UI automation, particularly using SpecFlow and WaTiN. You can find the slides down here and the demo code at GitHub.<iframe allowfullscreen="" frameborder="0" height="356" marginheight="0" marginwidth="0" scrolling="no" src="http://www.s...
I spend a majority of my private time reading articles and blog posts, having discussions on Twitter, or engaging in conversations on conferences and community events. I'm realistic enough to understand that my opinions are not necessarily the truth, so I use those opportunities to challenge my o...
While we are working on the next major version of Fluent Assertions, we received several smaller bug reports that we bundled in release 1.7.1. Fixed a bug that occurs when two collections are compared for equality but the collection contains null. Fixed a stack overflow while formatting an obje...
It has barely been more than two months ago, but the number of downloads through CodePlex and Nuget combined has exceeded 2000. Me and co-author Martin Opdam thought that to be a nice reason for releasing a new version of Fluent Assertions. This isn't a big release, but since we are following sem...
Indeed it is, in particular within the part of the .NET community that believes test-first development is non-negotiable. We receive more and more suggestions, contributions and questions, and we’ve started to notice some blog posts here and there. It’s not that it is being downloaded thousands ...
A few weeks ago I read The value of open-source is the vision not the source code and that made me think about my own reasons for starting Fluent Assertions, now more than a year ago. In the light of that article, lets briefly go over my own goals for Fluent Assertions. The intention of a unit te...
In the last couple of months, me and colleague Martin Opdam have spent a considerable amount of time on both improving the reporting capabilities of Fluent Assertions as well as fixing and incorporating various community contributions. Because of the many changes required, a very busy client proj...
It’s only February, but I’ve received so many requests from the community that another release of Fluent Assertions was easily warranted. New Features Somebody working under the name of CtrlAltDel pointed me at the little-known fact that floating point variables are inheritably inaccurate and...
As of now you can download the latest version of Fluent Assertions directly from within Visual Studio 2010. Just install the NuGet package manager, select Add Library Package Reference from the project context menu and search for FluentAssertions.
Yesterday, I blogged about the newest release of Fluent Assertions for .NET and Silverlight and promised to demonstrate the new event monitoring syntax. Since I’m a Silverlight addict, I decided to show you an example of a MVVM unit test when using the traditional Assert class and the same exampl...
Christmas usually means a week off and a whole lot of free time between the social obligations and spending some quality time with my wife and daughter. That’s why I decided to get rid of some of the backlog items for the next version of Fluent Assertions. And I’m done, version 1.3.0 is a fact. N...
Last Thursday, me and my employer Aviva Solutions hosted the December edition of the DotNED user group in Leiden. And yesterday a shared my Silverlight reference architecture on this year’s last SDN Event. I gave two talks that evening and one last night and wanted to share my slides and example ...
As I already mentioned in my previous post, we're building a line-of-business app using Silverlight 4 and WCF Data Services. I really think Silverlight is great for those kind of systems, but since it is based on a different run-time as the full .NET framework, you may wonder what you'll run into...
It has been only 6 weeks since I first released Fluent Assertions to the public, followed by version 1.1 a week later. In the weeks thereafter, I received some nice ideas from the community which caused me to start working on the next version. But it was not easy. I found that designing a small f...
As part of my effort to improve the type-safety of Fluent Assertions, I’ve been investigating the possibility to use C# extension methods all the way. Unfortunately I think I’ve ran into the limitations of C# 3.0 (and C# 4.0 since it doesn’t add anything useful for this). Essentially, I’d like to...
What is it? An (online) list of verification tasks to sign off as part of the delivery process of a newly delivered unit of work. Usually these include things that are often forgotten, or aspects that require explicit verification. See an example of such a list here. Why would you do it? Becau...
About a year ago, me and some other colleagues started to create a simple framework for verifying the outcome of unit tests in a more natural way. Martin Opdam already blogged about this in June and since then we have been adding some minor features. A few weeks ago I discovered the much more po...
Many attempts have been made to improve the overal quality of our software development efforts, but if there’s one I’d like to put some attention on, it’s Test Driven Development. It’s design-first, test-first approach has proved significant increases in overal quality. However, TDD is not easy a...
Did Visual Studio really get so much better since the last time I tried? Or is JetBrains Rider still years ahead of the competition. Let’s look at editing, debugging and refactoring.
Did Visual Studio really get so much better since the last time I tried? Or is JetBrains Rider still years ahead of the competition. Let’s look at general usability and code navigation
It has been almost two years since I've last compared NHibernate and Entity Framework, so with the recent alpha version of EF 6, it's about time to look at the current state of affair. I've been using NHibernate for more than 6 years so obviously I'm a bit biased. But I can't ignore that EF's fea...
After 50000 downloads and the recent final release of Visual Studio 2012 / C# 5.0 it was about time to do a thorough update of the C# Coding Guidelines. Although most of the guidelines have been preserved, I’ve tried to rewrite several of them using a less formal and less verbose writing style. I...
Although it might not seem like that, I am still working on the Silverlight Cookbook. However, I’ve just moved to a new house, so I ran out of time recently. Fortunately, since my colleague Martin Opdam is actively working on Fluent Assertions, so I only have to divide my free time between the co...
Before I continue with the rest of this post, I first need to make a disclaimer. I'm in no way an expert on all things Microsoft has to offer in the web realm and have yet to complete a full-fledged ASP.NET MVC & JQuery project. However, I see myself as someone who quickly grasps the potenti...
Somebody recently asked me what sessions I was planning to attend at the upcoming 2011 edition of the Microsoft Developer Days in The Hague. To be honest, my primary reason for going to a Dutch conference is to chat with fellow .NET enthusiasts, and attending sessions is usually a side-effect of ...
In the 2nd half of 2010 I was so fortunate to get the chance to build my first enterprise-class line-of-business application written in Silverlight 4. And although I designed my original reference architecture earlier that year, actually building it is a completely different thing. I learned a lo...
As of now you can download the latest version of Fluent Assertions directly from within Visual Studio 2010. Just install the NuGet package manager, select Add Library Package Reference from the project context menu and search for FluentAssertions.
I've been a very long-time and very happy user of ReSharper, and I’ve become very dependent of it. I wouldn't know what to do with a plain Visual Studio 2010 installation. However, I also heard many great things about the combination of DevExpress's CodeRush and their Refactor! Pro products. Appa...
It has been only 6 weeks since I first released Fluent Assertions to the public, followed by version 1.1 a week later. In the weeks thereafter, I received some nice ideas from the community which caused me to start working on the next version. But it was not easy. I found that designing a small f...
This morning, on the Developer Days 2010, I did a talk on the current state of affairs of the 4.0 version of the Entity Framework, including a rough comparison with NHibernate 2.1. Apparently this is something that’s on the mind of many people. The room was supposed to accommodate a maximum of 80...
What is it? A collection of rules stating what a block of code should look like. These may include rules on where line breaks are required, how to place parentheses, how much whitespace to put before and after those parentheses, how many spaces to use when indenting and where to insert empty line...
Yesterday, a colleague of mine asked for some guidance on how to partition a Visual Studio solution into individual projects. Instead of simply answering his email I thought that blogging about it may be useful for others as well, so here are my rules: In general, have as few projects as possi...
During this week’s PDC 2008, I’ve been spending particular attention to sessions related to the new features of Visual Studio 2010 Team System and Team Foundation Server 2010. The one statement almost every session started with was that this release is huge, and I totally agree! I’ve not seen so ...
After having put the introduction and the commanding part behind us, let me explain how I deal with querying. Consider the following slice of the reference architecture. My original intention was to use WCF Data Services combined with NHibernate on the query side. For one, because it allo...
<p $1=”$1”></p> <p $1=”$1”></p> <p $1=”$1”></p> <p $1=”$1”></p> <p $1=”$1”></p> <p>This post is part of a series of blog posts detailing various aspects of the Silverlight Cookbook, an initiative to demonstrate prope...
While working on my demo code for my full-day talk on Software Development Practices in Practice I was a bit ambitious and introduced both Silverlight 4 and WCF RIA Services. Apart from the fact that the preparation caused a bit too much of my social live, I ran in some things I don’t really like...
Let's be honest here. Since Microsoft has been shipping technical previews of Windows 10, I've been repaving my laptop a couple of times and then reverted to Windows 8.1. I didn't like the intermediate touch experience and stability was also not its greatest strengths. In fact, I reverted to 8.1 ...
A question which was asked many times during the week was whether or not this trip to Build 2012 in Redmond was worth the time and money. Even after four days of raw content, there is no short answer here. As Dennis Vroegop clearly illustrated, the organization was definitely not up to the task...
Here we are at the fourth and last day of Microsoft Build 2012. That so many people showed up at the first session is quite surprising considering the attendee party that went on until midnight in downtown Seattle. It was a typical attendee party; free food and drinks and live music. Since being ...
So at this 3rd day here at Microsoft Build 2012, I'm actually getting lucky. Three great sessions in a row is obviously not something I've seen before. Hey, maybe I'll get to see four great sessions tomorrow. Anyway, with some of the technical debt from last night's Beerfest and a Halloween party...
Because day 2 of the Build conference wasn't any different, it seems that I must learn to accept that a maximum of two good sessions per day is going to be the standard. Fortunately the keynote was top notch with both Scott Hanselman and Scott Guthrie taking stage. They showed some of the power t...
Day 1 of Microsoft Build was in some way disappointing and at the same time exhilarating. To be honest, I was expecting to be updated on the new stuff Microsoft plans for the near future. The fact that the session list was not disclosed until a day ahead also helped reinforce that expectation. Bu...
I'm currently at Microsoft's Build conference and we're all receiving a Surface RT tablet. That means it's a great moment to talk about my plans for the Windows 8 Cookbook. I know, I know, it's a cheesy name so just be aware that I'm open to better suggestions. Since Silverlight is mostly dead, I...
Welcome to the dependency hell While working on a little open-source demo project, I ran into that well-known challenge of NuGet dependency management again. This little project results in a NuGet package, that on itself also relies on other packages. Now, if I would just add those dependencies ...
In this final post of this series, I’m going to change direction and talk about the predictability and maturity of your development team(s)
I’ve seen a lot of prior attempts to out-source work to remote teams fail, have always wondered what was the main reason for this. Is it a culture thing? Is it the time difference. In this post, I describe the things we do ourselves that have made our remote team endeavors pretty successful for t...
It may be coincidence, but the two best tutorials I attended at Agile DevOps East both ran on the same day. The first one focused mostly on agile transformation, but briefly touched on the leadership topic. This one, let by Jennifer Bonine, took this further by focusing on being a better leader b...
For my annual conference trip, I decided to skip the always-great QCon conference for once and instead attend Agile DevOps East in Orlando, Florida. In addition to the typical conference schedule, I also registered for some of the half-day and full day tutorials. One of them, How to lead high-per...
When your project, product or component gets sufficiently big that it has a large impact on the rest of the organization, you’ll automatically get faced with lots of internal and external distractions. Other teams might want to get that pull request merged as soon as possible, all kinds of questi...
Should architects make decisions with the constraints of available capacity in mind? Or should they strive to ignore the reality and pursue only the best solutions?
SonarQube always had a bad reputation when it comes to repositories that contain both the front-end as well as the back-end code. Here are two approaches.
The route, the headers and the specific JSON returned by an HTTP API are the contract, and thus should be treated as such
For a very VERY long time I've been convinced that aggressively refactoring your code in such a way that every piece of logic is repeated only once is a good thing. This practice, often referred to as DRY, or Don't Repeat Yourself, has been one of the many of my tools of choice and goes hand in h...
I’ve been reflecting on common issues that make it hard for the developers to understand the architecture
In this fourth post of the series, I’ll share some of the (red) flags I might raise while measuring the maturity of testing.
In this third post of the series, I’ll share my perspective on how architectural constraints and decisions can hamper productivity.
In this first post of a series, I’d like to focus on the challenges companies are facing while controlling their technical complexity.
I’ve written many posts about the strengths and weaknesses of Event Sourcing, but I still thought it might be useful to provide you with a list of the most important practical guidelines and heuristics that I think are needed to be successful with Event Sourcing
Do you often forget to await an awaitable method in C#? Here’s an elegant solution.
It has been more than two years since we switched from Microsoft Unity to Autofac and we haven’t regretted this a single day. Not only is the resolution performance much better than Unity, but it’s the feature set, in particular the relation types, that makes a world of difference. In terms of co...
It’s 2023, so what if you could run SQL Server in a Linux docker container just before your tests start?
Het was januari 1997. Ik was net afgestudeerd van de HTS Electrotechniek. Trots als een pauw op mijn ingenieurstitel én die dikke 9 voor mijn afstudeeropdracht bij - toen nog - Philips Semiconductors, ging ik op zoek naar een job. Maar dat viel nog niet mee. Philips had een aannamestop en van rec...
An in-depth evaluation of SharePoint, Azure DevOps Wikis and Atlassian Confluence as a documentation and collaboration platform
I’ve been reflecting on common issues that make it hard for the developers to understand the architecture
A little story about the typical adoption process of TDD and how that works for other tools, principles and practices
Another thing I realized last year is that I really love working on legacy code bases and making them rock solid.
How Nuke solves all of the problems of PSake, Cake and BullsEye and should become your build automation tool of your choice.
SonarQube always had a bad reputation when it comes to repositories that contain both the front-end as well as the back-end code. Here are two approaches.
Here we are again. After a little detour to QCon San Francisco and New Yorkin 2013 and 2014, we thought it to be about time to rejoin our fellow Microsoft developers here at Microsoft Build 2015 at the Moscone Center in San Francisco. Since we couldn't get a direct flight from Amsterdam to San Fr...
With a bit of Git magic, it’s quite easy to merge the commits of one repository into a specific folder of another without losing the Git history
If I can’t clone your repository and get the application running in under 5 minutes, you’re doing something wrong
Use the right tool for the right problem A very common sentiment I'm getting from the .NET community is the aversion against object-relational mappers like NHibernate and Entity Framework. Granted, if I could, I would use an (embeddable) NoSQL solution like RavenDB myself. They remove the object-...
At the beginning of this year, I reported on my endeavors to use RavenDB as a projection store for an event sourced system. One of the things I tried to speed up RavenDB's projection speed was to use the Least Recently Used cache developed by Brian Agnes a couple of years ago. This cache gave us ...
How Nuke solves all of the problems of PSake, Cake and BullsEye and should become your build automation tool of your choice.
Het was januari 1997. Ik was net afgestudeerd van de HTS Electrotechniek. Trots als een pauw op mijn ingenieurstitel én die dikke 9 voor mijn afstudeeropdracht bij - toen nog - Philips Semiconductors, ging ik op zoek naar een job. Maar dat viel nog niet mee. Philips had een aannamestop en van rec...
Consider a fantasy game that must track a collection of items, each having a certain amount of quality (or value) that increases or decreases after time passes. This collection contains the following six items:
How modern engineering practices contribute to readability, testability, isolation, tracebility and discoverability.
I’ve been looking for a better way to explain the difference between a developer complaining about quality and a product owner or manager.
How Azure DevOps is holding back the teams I work with to collaborate efficiently and commit code that has a high level of traceability, and how GitHub fixes that
An in-depth evaluation of SharePoint, Azure DevOps Wikis and Atlassian Confluence as a documentation and collaboration platform
In this second post of the series, I’ll discuss the opportunities organizations miss to improve the productivity of their teams.
After a discussion with some folks on what being a software architect really means, I decided to capture the many hats you have to wear
Given the signs that this working-from-home isn’t going to change for another six months or so, let me share some of the things that have helped me to stay sane
When your project, product or component gets sufficiently big that it has a large impact on the rest of the organization, you’ll automatically get faced with lots of internal and external distractions. Other teams might want to get that pull request merged as soon as possible, all kinds of questi...
In this first post of a series, I’d like to focus on the challenges companies are facing while controlling their technical complexity.
How applying the SOLID principles on package design can help prevent the dependency hell
Welcome to the dependency hell While working on a little open-source demo project, I ran into that well-known challenge of NuGet dependency management again. This little project results in a NuGet package, that on itself also relies on other packages. Now, if I would just add those dependencies ...
It may be coincidence, but the two best tutorials I attended at Agile DevOps East both ran on the same day. The first one focused mostly on agile transformation, but briefly touched on the leadership topic. This one, let by Jennifer Bonine, took this further by focusing on being a better leader b...
For my annual conference trip, I decided to skip the always-great QCon conference for once and instead attend Agile DevOps East in Orlando, Florida. In addition to the typical conference schedule, I also registered for some of the half-day and full day tutorials. One of them, How to lead high-per...
An in-depth evaluation of SharePoint, Azure DevOps Wikis and Atlassian Confluence as a documentation and collaboration platform
Transient vs non-transient exceptions If I have to name the single biggest flaw in adopting Event Sourcing, it must be our decision to rely on the synchronous dispatching pipeline of NEventStore. It is based on the idea that every event will be processed by all projectors in a synchronous manner....
The characteristics of a great projection implementation Over the course of the last two years I’ve written numerous articles on the good, the bad and the ugly of Event Sourcing as well as on our experiences building and maintaining a distributed enterprise-class based on this increasingly popula...
Do you often forget to await an awaitable method in C#? Here’s an elegant solution.
Coding conventions never cease to be a great source for heated debates. However, within the C# realm, two specific topics tend to reappear occasionally. The first one is about whether or not to use underscores for class fields (but I'm not going to discuss that here). The other one is the usage o...
The open-space format gives you a chance to hear about other people’s challenges and how other experienced folks respond to that. I attended one on building high-performance teams.
Ownership is not an all-or-nothing concept, so Netflix acknowledges up to five levels that each give a leader and its people a tool to clarify the expected/accept level of autonomy
About passion, grace and fire as ingredients in a recipe for fully formed mature adults and high-performance teams as presented by Josh Evans at QCon San Francisco
As I work as a consultant for Aviva Solutions, and the nature of my job is to be involved in moderately long-running client projects, I don't get to come to the office that often. And if I do, it's on different days of the week. Over the last year so, our locations in Koudekerk aan de Rijn and Ei...
At the first day of QCon New York, I attended several talks and open-spaces that had some relation with culture, be it about improving the efficiency of developers, handling disagreement in respectful way, and creating an environment that embraces the learning experience. For instance, one of th...
Over the last couple of months I’ve heard and read quite a few statements that say that Dependency Injection frameworks are bad things that you should avoid like the plague. In my opinion that’s just a result of rejecting something because it has been misused too long. Don’t get me wrong. I’ve be...
Over the last couple of months I’ve heard and read quite a few statements that say that Dependency Injection frameworks are bad things that you should avoid like the plague. In my opinion that’s just a result of rejecting something because it has been misused too long. Don’t get me wrong. I’ve be...
Over the last couple of months I’ve heard and read quite a few statements that say that Dependency Injection frameworks are bad things that you should avoid like the plague. In my opinion that’s just a result of rejecting something because it has been misused too long. Don’t get me wrong. I’ve be...
When your project, product or component gets sufficiently big that it has a large impact on the rest of the organization, you’ll automatically get faced with lots of internal and external distractions. Other teams might want to get that pull request merged as soon as possible, all kinds of questi...
I’ve seen a lot of prior attempts to out-source work to remote teams fail, have always wondered what was the main reason for this. Is it a culture thing? Is it the time difference. In this post, I describe the things we do ourselves that have made our remote team endeavors pretty successful for t...
It’s 2023, so what if you could run SQL Server in a Linux docker container just before your tests start?
An in-depth evaluation of SharePoint, Azure DevOps Wikis and Atlassian Confluence as a documentation and collaboration platform
A recurring topic in every software project I've been involved with is what to document, when to do that, and where to store it. So it wasn't a big surprise that at a recent event, somebody asked me how we track and communicate design decisions. I initially pointed him to an article I wrote in Fe...
Event Sourcing is a beautiful solution for high-performance or complex business systems, but you need to be aware that this also introduces challenges most people don’t tell you about. After having dedicated a post on the challenges of dealing with projection migrations and how to optimize that, ...
While visiting QCon New York this year, I realized that a lot of the architectural problems that were discussed there could benefit from the Event Sourcing architecture style. Since I've been in charge of architecting such a system for several years now, I started to reflect on the work we've don...
While visiting QCon New York this year, I realized that a lot of the architectural problems that were discussed there could benefit from the Event Sourcing architecture style. Since I've been in charge of architecting such a system for several years now, I started to reflect on the work we've don...
While visiting QCon New York this year, I realized that a lot of the architectural problems that were discussed there, could benefit from the Event Sourcing architecture style. Since I've been in charge of architecting such a system for several years now, I started to reflect on the work we've do...
While visiting QCon New York this year, I realized that a lot of the architectural problems that were discussed there could benefit from the Event Sourcing architecture style. Since I've been in charge of architecting such a system for several years now, I started to reflect on the work we've don...
Do you often forget to await an awaitable method in C#? Here’s an elegant solution.
My personal experiences while working with user stories for gathering, tracking and planning requirements
A while ago, some business man from the US who travels a lot throughout the US as part of his job, was sitting in his airline's business lounge for a drink. Right after finishing his 2nd, an attractive women approached him and offered him a drink in exchange for somebody to talk to. Somewhere hal...
After 50000 downloads and the recent final release of Visual Studio 2012 / C# 5.0 it was about time to do a thorough update of the C# Coding Guidelines. Although most of the guidelines have been preserved, I’ve tried to rewrite several of them using a less formal and less verbose writing style. I...
A question which was asked many times during the week was whether or not this trip to Build 2012 in Redmond was worth the time and money. Even after four days of raw content, there is no short answer here. As Dennis Vroegop clearly illustrated, the organization was definitely not up to the task...
Here we are at the fourth and last day of Microsoft Build 2012. That so many people showed up at the first session is quite surprising considering the attendee party that went on until midnight in downtown Seattle. It was a typical attendee party; free food and drinks and live music. Since being ...
So at this 3rd day here at Microsoft Build 2012, I'm actually getting lucky. Three great sessions in a row is obviously not something I've seen before. Hey, maybe I'll get to see four great sessions tomorrow. Anyway, with some of the technical debt from last night's Beerfest and a Halloween party...
Because day 2 of the Build conference wasn't any different, it seems that I must learn to accept that a maximum of two good sessions per day is going to be the standard. Fortunately the keynote was top notch with both Scott Hanselman and Scott Guthrie taking stage. They showed some of the power t...
Day 1 of Microsoft Build was in some way disappointing and at the same time exhilarating. To be honest, I was expecting to be updated on the new stuff Microsoft plans for the near future. The fact that the session list was not disclosed until a day ahead also helped reinforce that expectation. Bu...
After six weeks of beta testing, it is time to remove the beta mark from Fluent Assertions 2.0. Since the beta was released, we fixed several little bugs that you won’t notice, but the original release notes still apply. Release 2.0 adds a lot of new features and improvements, most noticeably the...
Here are some of the highlights of the blog posts, articles and whitepapers I’ve read this month. In two short blog posts, Jimmy Bogard explains seven misconceptions of CQRS and Event Sourcing, and also warns us of the impact of eventual consistency on the user experience. Read about the many ...
This week I completed reading a new book titled The Cucumber Book: Behaviour-Driven Development for Testers and Developers by Matt Wynne and Aslak Hellesoy. Aslak is the founder of the Cucumber project (which is what SpecFlow for .NET is based on), and Matt is one of its most active developers. T...
Just to be clear, I didn’t actually attend QCon New York this year. But after the experience of attending QCon San Francisco in 2010, I never forget the many great quotes you’ll find on Twitter. This time was no different. "Distributed objects failed; for very good reasons. Values rule on the w...
I spend a majority of my private time reading articles and blog posts, having discussions on Twitter, or engaging in conversations on conferences and community events. I'm realistic enough to understand that my opinions are not necessarily the truth, so I use those opportunities to challenge my o...
While we are working on the next major version of Fluent Assertions, we received several smaller bug reports that we bundled in release 1.7.1. Fixed a bug that occurs when two collections are compared for equality but the collection contains null. Fixed a stack overflow while formatting an obje...
Yesterday I ended up being part of a discussion about using the ‘new’ keyword to hide base-class members. A colleague of mine used it to alter a base-class property in a derived class with the purpose of making it more strongly typed. I’ve always rationalized guideline AV1010 (Don’t hide inherit...
I know, I know, I’m still 3 months away from it. But without doubt, on the 1st of February, I will be celebrating my first 5-year anniversary in the 15 years of my professional career. That might sound silly, but I’ve always had a problem of getting restless after a few years . It never was a pro...
This is the third of several posts in which I’d like to share some of the things we learned throughout more than 14 sprints of Agile development using Scrum. Some of them might appear as open doors, but I wish I knew or thought about those before I started that project. Just by looking back at th...
This is the second of several posts in which I’d like to share some of the things we learned throughout more than 14 sprints of Agile development using Scrum. Some of them might appear as open doors, but I wish I knew or thought about those before I started that project. Just by looking back at t...
The Rationale As long as I have been using the Dependency Inversion Principle, Microsoft Unity has always been my preferred Inversion-of-Control framework. So it’s not strange that the Silverlight Cookbook has been using Unity 2 in both its WCF/REST layer as well as within the Silverlight client....
This is the first of several posts in which I’d like to share some of the things we decided throughout 14 sprint retrospective. Some of them might appear as open doors, but I wish I knew or thought about those before I started that project. Just by looking back at the mistakes a team of 9 develop...
Last updated on September 22nd Unfortunately, the Microsoft Build conference conflicted with our company's 5-year anniversary and the associated sailing trip in Greece. Fortunately, the blogosphere and twitter-space provided plenty of opportunities for trying to grasp what the stuff Sinofsky and...
Although it might not seem like that, I am still working on the Silverlight Cookbook. However, I’ve just moved to a new house, so I ran out of time recently. Fortunately, since my colleague Martin Opdam is actively working on Fluent Assertions, so I only have to divide my free time between the co...
I’m honored to have been selected to speak at my first event in the United Kingdom, Developer Developer Developer North, hosted at the University of Sunderland, near New Castle. Our job as a software developer seems to revolve mostly around programming languages, frameworks and Visual Studio. And...
A few weeks ago I read The value of open-source is the vision not the source code and that made me think about my own reasons for starting Fluent Assertions, now more than a year ago. In the light of that article, lets briefly go over my own goals for Fluent Assertions. The intention of a unit te...
In the last couple of months, me and colleague Martin Opdam have spent a considerable amount of time on both improving the reporting capabilities of Fluent Assertions as well as fixing and incorporating various community contributions. Because of the many changes required, a very busy client proj...
Before I continue with the rest of this post, I first need to make a disclaimer. I'm in no way an expert on all things Microsoft has to offer in the web realm and have yet to complete a full-fledged ASP.NET MVC & JQuery project. However, I see myself as someone who quickly grasps the potenti...
Somebody recently asked me what sessions I was planning to attend at the upcoming 2011 edition of the Microsoft Developer Days in The Hague. To be honest, my primary reason for going to a Dutch conference is to chat with fellow .NET enthusiasts, and attending sessions is usually a side-effect of ...
In the 2nd half of 2010 I was so fortunate to get the chance to build my first enterprise-class line-of-business application written in Silverlight 4. And although I designed my original reference architecture earlier that year, actually building it is a completely different thing. I learned a lo...
It’s only February, but I’ve received so many requests from the community that another release of Fluent Assertions was easily warranted. New Features Somebody working under the name of CtrlAltDel pointed me at the little-known fact that floating point variables are inheritably inaccurate and...
So now that I’ve finished my multi-part post on getting the most out of user stories, it is time to provide a nice convenient overview of some essential practices that I’ve blogged about. I don’t have any additional parts planned, but if I come up with something new, I’ll make sure this list is u...
As of now you can download the latest version of Fluent Assertions directly from within Visual Studio 2010. Just install the NuGet package manager, select Add Library Package Reference from the project context menu and search for FluentAssertions.
Yesterday, I blogged about the newest release of Fluent Assertions for .NET and Silverlight and promised to demonstrate the new event monitoring syntax. Since I’m a Silverlight addict, I decided to show you an example of a MVVM unit test when using the traditional Assert class and the same exampl...
Christmas usually means a week off and a whole lot of free time between the social obligations and spending some quality time with my wife and daughter. That’s why I decided to get rid of some of the backlog items for the next version of Fluent Assertions. And I’m done, version 1.3.0 is a fact. N...
I finally found some time to update the coding guidelines with some feedback I received since it’s original release in June this year. I’ve removed the following guidelines because I found that they were either very exotic or not general enough for most developers: Avoid side-effects when...
Last Thursday, me and my employer Aviva Solutions hosted the December edition of the DotNED user group in Leiden. And yesterday a shared my Silverlight reference architecture on this year’s last SDN Event. I gave two talks that evening and one last night and wanted to share my slides and example ...
I've been a very long-time and very happy user of ReSharper, and I’ve become very dependent of it. I wouldn't know what to do with a plain Visual Studio 2010 installation. However, I also heard many great things about the combination of DevExpress's CodeRush and their Refactor! Pro products. Appa...
Last week we put our first full-blown Silverlight 4 line-of-business application into production, and just yesterday, we’ve run into our first production issue. Consider the width specifications of the DataGrid columns in this XAML fragment: This XAML file was generated by Expression Blend and h...
The 2nd day of QCon was not one where I chose wisely. My focus for this conference was everything Agile and anything from the well-known speakers. So I ignored most sessions that had words like REST, SQL or Java in it. How wrong I was…. But I did not discover that until I heard and read about all...
The compression ratio of the content versus the timing available is quite high here at QCon. Already at the first official day, I attended 7 (!) talks. That's quite a lot of information to process. Unfortunately, the difference in quality is really noticeable. Some talks were absolutely awesome a...
One of the funny things of this QCon is the many tweets that the attendees have been throwing into the world wide web. That's great for a speaker because now they get immediate feedback on their performance, both good and bad. These are some of the quotes I found funny, inspiring or refreshing: ...
Updated on March 3rd 2012 with a PDF of Dan North’s mind map On the first day of the QCon conference in San Francisco, I attended a full-day tutorial titled "Secrets of Agile Architecture" hosted by Dan North. I didn't really know what to expect, but I was hoping for some refreshingly new insight...
This post is part of a series of blog posts detailing various aspects of the Silverlight Cookbook, an initiative to demonstrate proper design choices for building enterprise-class line-of-business applications with Silverlight (and WPF if you will). It currently consists out of the following part...
What is it? Technical Debt is every change to your code base that does not comply with the usual level of quality your team has agreed upon. Since this level of quality has been introduced to guarantee a healthy code base throughout the life time of the system, introducing technical debt essenti...
The Domain Model is roughly designed according to the DDD principles where cross-aggregate logic is handled by the command handlers instead of the more traditional domain services. One thing that I changed after I attended Greg Young's DDD/CQRS training is that I no longer allow my domain entitie...
After having put the introduction and the commanding part behind us, let me explain how I deal with querying. Consider the following slice of the reference architecture. My original intention was to use WCF Data Services combined with NHibernate on the query side. For one, because it allo...
<p $1=”$1”></p> <p $1=”$1”>After sharing my thoughts on unit testing in Silverlight and the combination of NHibernate and WCF Data Services, it is time to discuss the updated version of the Silverlight reference architecture from one of my posts of last year. To put the discu...
What is it? A domain model is typically depicted by a UML class diagram in which the classes and associations represent the business concepts and the relationships between them. Although you can use a piece of paper to draw up a domain model, in most cases a UML case tool is better suited for t...
As promised earlier, you can now download the concept version of my new Coding Guidelines for C# 3.0 and C# 4.0 from a dedicated CodePlex site at www.csharpcodinguidelines.com. The list of changes is quite big, and includes new guidelines covering object-oriented design, design principles, C# 4.0...
Now that my CQRS/Event Sourcing talk for DotNED is done, the pressure on the free hours between work and family has been reduced significantly. That doesn’t mean I’m going to sit back and relax. Oh no, I’m full of ideas. so let’s see some of my plans. I’m still going to continue developing The...
Yesterday evening I did a talk on building a .NET-based system using Command Query Responsibility Segregation and Event Sourcing. We had a lot of awesome discussions on its applicability, and as usual, I ran out of time again. I could have easily spend a full day on this subject, but unfortunatel...
Most of us will be familiar with the standard 3- or 4-layer architecture you often see in larger enterprise systems. Some are already practicing Domain Driven Design and work together with the business to clarify the domain concepts. Perhaps you’ve noticed that is difficult to get the intention o...
What is it? Coding guidelines, or coding standards if you will, are documents consisting of rules and recommendations on the use of C# in enterprise systems. They deal with code layout, naming guidelines, the proper use of the .NET Framework, tips on writing useful comments and XML documentat...
I've recently finished the book The Inmates Are Running The Asylum by Alan Cooper, a well known proponent for interaction design. To be honest, I never really saw the purpose of interaction design in our projects. But after reading this book, I now know I didn't really understand what it was abou...
It has been only 6 weeks since I first released Fluent Assertions to the public, followed by version 1.1 a week later. In the weeks thereafter, I received some nice ideas from the community which caused me to start working on the next version. But it was not easy. I found that designing a small f...
This morning, on the Developer Days 2010, I did a talk on the current state of affairs of the 4.0 version of the Entity Framework, including a rough comparison with NHibernate 2.1. Apparently this is something that’s on the mind of many people. The room was supposed to accommodate a maximum of 80...
Some of you who have been visiting the Dutch Developer Days 2010 in The Hague today may have noticed the flyers and banners for promoting the new online version of the .NET Magazine. Those who already know me may have noticed that it’s me on those banners. Since the photographer spe...
As part of my effort to improve the type-safety of Fluent Assertions, I’ve been investigating the possibility to use C# extension methods all the way. Unfortunately I think I’ve ran into the limitations of C# 3.0 (and C# 4.0 since it doesn’t add anything useful for this). Essentially, I’d like to...
What is it? An (online) list of verification tasks to sign off as part of the delivery process of a newly delivered unit of work. Usually these include things that are often forgotten, or aspects that require explicit verification. See an example of such a list here. Why would you do it? Becau...
In response to my posts on Peer Reviews, Unit Testing & TDD, and Common Code Layout, someone noticed that all these posts were part of my Team Foundation Server Development Practices series, but not every post actually mentioned TFS. Obviously, he was right. The reason for using the TFS prefi...
What is it? A collection of rules stating what a block of code should look like. These may include rules on where line breaks are required, how to place parentheses, how much whitespace to put before and after those parentheses, how many spaces to use when indenting and where to insert empty line...
Thanks to all the voters who voted for my wildcard proposal on Entity Framework 4.0, I will be speaking at the Microsoft Developer Days 2010, again. Last year, the whole wildcard thingy was a bit fuzzy, but this year, the organization has gone through great lengths to seriously include us wildcar...
It’s only a few days ago since we released the first version of Fluent Assertions, and we already have a new release. The reason for this is that the first release was just the public release of an internal set of classes that we’ve been using for a year or so. But this week, we've worked hard t...
My Dutch article on User Stories in Team Foundation Server 2010 is now available online at the SDN site. Read it over here. I will translate it to English soon.
During this week’s PDC 2008, I’ve been spending particular attention to sessions related to the new features of Visual Studio 2010 Team System and Team Foundation Server 2010. The one statement almost every session started with was that this release is huge, and I totally agree! I’ve not seen so ...
About passion, grace and fire as ingredients in a recipe for fully formed mature adults and high-performance teams as presented by Josh Evans at QCon San Francisco
After years of working with legacy code, I’ve learned to value the past and will do what I can to deliver well-focused and organized pull requests
Estimates are almost always wrong and that’s fine. Just deal with that and prioritize accordingly.
Transient vs non-transient exceptions If I have to name the single biggest flaw in adopting Event Sourcing, it must be our decision to rely on the synchronous dispatching pipeline of NEventStore. It is based on the idea that every event will be processed by all projectors in a synchronous manner....
I thought we didn’t need OR/Ms anymore? A common advantage of adopting Event Sourcing is that it solves the impedance mismatch between object oriented code and the relation database model. And because of that, Object/Relational Mappers (OR/Ms) have become obsolete. While I agree with the first st...
The characteristics of a great projection implementation Over the course of the last two years I’ve written numerous articles on the good, the bad and the ugly of Event Sourcing as well as on our experiences building and maintaining a distributed enterprise-class based on this increasingly popula...
Just a small post to provide an overview of all the posts in this series.
Event Sourcing is a beautiful solution for high-performance or complex business systems, but you need to be aware that this also introduces challenges most people don’t tell you about. After having dedicated a post on the challenges of dealing with projection migrations and how to optimize that, ...
Event Sourcing is a beautiful solution for high-performance or complex business systems, but you need to be aware that this also introduces challenges most people don't tell you about. Last year, I already blogged about the things I would do differently next time. But after attending another intr...
Event Sourcing is a brilliant solution for high-performance or complex business systems, but you need to be aware that this also introduces challenges most people don't tell you about. In June, I already blogged about the things I would do differently next time. But after attending another introd...
Event Sourcing is a brilliant solution for high-performance or complex business systems, but you need to be aware that this also introduces challenges most people don't tell you about. In @June, I already blogged about the things I would do differently next time. But after attending another intro...
It was in 2009 in Utrecht, The Netherlands, when I first learned about Event Sourcing and the Command Query Responsibility Segregation (CQRS) patterns at a training Greg Young gave there. I remembered to be awed by the scalability and architectural simplicity those styles provided. However, I als...
While visiting QCon New York this year, I realized that a lot of the architectural problems that were discussed there could benefit from the Event Sourcing architecture style. Since I've been in charge of architecting such a system for several years now, I started to reflect on the work we've don...
While visiting QCon New York this year, I realized that a lot of the architectural problems that were discussed there could benefit from the Event Sourcing architecture style. Since I've been in charge of architecting such a system for several years now, I started to reflect on the work we've don...
While visiting QCon New York this year, I realized that a lot of the architectural problems that were discussed there, could benefit from the Event Sourcing architecture style. Since I've been in charge of architecting such a system for several years now, I started to reflect on the work we've do...
While visiting QCon New York this year, I realized that a lot of the architectural problems that were discussed there could benefit from the Event Sourcing architecture style. Since I've been in charge of architecting such a system for several years now, I started to reflect on the work we've don...
I started thinking about the typical problems where I would use Event Sourcing. I came up with a couple of them, some more functional and some more technical.
if you need Event Sourcing, and you have an existing, more traditional (a.k.a. CRUD) application, there are roughly three strategies you can follow.
I’ve written many posts about the strengths and weaknesses of Event Sourcing, but I still thought it might be useful to provide you with a list of the most important practical guidelines and heuristics that I think are needed to be successful with Event Sourcing
Some thoughts on how we could convince companies to support the open-source community.
Some examples on how to use the new WithMapping API to compare objects with differently named properties or fields
Do you often forget to await an awaitable method in C#? Here’s an elegant solution.
Now, after two alphas and three betas, it’s time to let Fluent Assertions 6 enter the real-world. Let me provide you with the highlights of this release.
It has been almost a year since version 4.19, the last functional release of Fluent Assertions was shipped. Not because of a lack of feature requests, but simply because this new version has cost me all the private time I had. My main goal of this release was to repair some of the design mistakes...
As you might have read, I've been refactoring some example code for a multi-threaded cache that I got from CodeProject into a source-only NuGet package which will soon be published as FluidCaching. Since this cache has been built to be very performant, the internal algorithms are not trivial to g...
At the beginning of this year, I reported on my endeavors to use RavenDB as a projection store for an event sourced system. One of the things I tried to speed up RavenDB's projection speed was to use the Least Recently Used cache developed by Brian Agnes a couple of years ago. This cache gave us ...
How Azure DevOps is holding back the teams I work with to collaborate efficiently and commit code that has a high level of traceability, and how GitHub fixes that
With a bit of Git magic, it’s quite easy to merge the commits of one repository into a specific folder of another without losing the Git history
After years of working with legacy code, I’ve learned to value the past and will do what I can to deliver well-focused and organized pull requests
At Aviva Solutions, we’ve been using Git for a little of over two years now and I can wholeheartedly say that after having worked with TFS for years, we’ll never go back… ever. But with any new technology, practice or methodology, you need to go through several cycles before you find a way that w...
During last weeks' Git Like a Pro talk I tried to convey the message that switching to Git is much more than introducing a new source control system. It will affect not just the way you commit source code, branch or merge, it changes the entire development workflow. In fact, I'm willing to claim ...
Almost every time I do some kind of talk somewhere, people ask me for advice on how to convince their management that they should drop Microsoft Team Foundation Server's source control system and move over to Git. In this post, I'll be talking about the source control system only. Both Visual Stu...
Solving the versioning problemIf you're building libraries, products or any other software system, versioning is usually a pretty big deal. It's the only way to determine what version of that library, product or system you're looking at. Before an organization settles on a versioning strategy, ma...
How combining the clarity of Semantic Versioning, a release strategy like GitFlow or GithubFlow and GitVersion gives you sensible and automatic artifact numbering
How Azure DevOps is holding back the teams I work with to collaborate efficiently and commit code that has a high level of traceability, and how GitHub fixes that
At Aviva Solutions, we’ve been using Git for a little of over two years now and I can wholeheartedly say that after having worked with TFS for years, we’ll never go back… ever. But with any new technology, practice or methodology, you need to go through several cycles before you find a way that w...
At the beginning of this year, I reported on my endeavors to use RavenDB as a projection store for an event sourced system. One of the things I tried to speed up RavenDB's projection speed was to use the Least Recently Used cache developed by Brian Agnes a couple of years ago. This cache gave us ...
After years of working with legacy code, I’ve learned to value the past and will do what I can to deliver well-focused and organized pull requests
How combining the clarity of Semantic Versioning, a release strategy like GitFlow or GithubFlow and GitVersion gives you sensible and automatic artifact numbering
Another thing I realized last year is that I really love working on legacy code bases and making them rock solid.
How Azure DevOps is holding back the teams I work with to collaborate efficiently and commit code that has a high level of traceability, and how GitHub fixes that
During the same C# code reviews that triggered last week’s blog post about writing great unit tests, another discussion tends to pop-up, in particularly with new joiners (both experienced and junior):
Over the last couple of months I’ve heard and read quite a few statements that say that Dependency Injection frameworks are bad things that you should avoid like the plague. In my opinion that’s just a result of rejecting something because it has been misused too long. Don’t get me wrong. I’ve be...
Did Visual Studio really get so much better since the last time I tried? Or is JetBrains Rider still years ahead of the competition. Let’s look at editing, debugging and refactoring.
Did Visual Studio really get so much better since the last time I tried? Or is JetBrains Rider still years ahead of the competition. Let’s look at general usability and code navigation
It may be coincidence, but the two best tutorials I attended at Agile DevOps East both ran on the same day. The first one focused mostly on agile transformation, but briefly touched on the leadership topic. This one, let by Jennifer Bonine, took this further by focusing on being a better leader b...
For my annual conference trip, I decided to skip the always-great QCon conference for once and instead attend Agile DevOps East in Orlando, Florida. In addition to the typical conference schedule, I also registered for some of the half-day and full day tutorials. One of them, How to lead high-per...
I don’t believe somebody can be really proficient in multiple platforms and programming languages, so invest in knowledge wisely.
If I can’t clone your repository and get the application running in under 5 minutes, you’re doing something wrong
Another thing I realized last year is that I really love working on legacy code bases and making them rock solid.
Transient vs non-transient exceptions If I have to name the single biggest flaw in adopting Event Sourcing, it must be our decision to rely on the synchronous dispatching pipeline of NEventStore. It is based on the idea that every event will be processed by all projectors in a synchronous manner....
I thought we didn’t need OR/Ms anymore? A common advantage of adopting Event Sourcing is that it solves the impedance mismatch between object oriented code and the relation database model. And because of that, Object/Relational Mappers (OR/Ms) have become obsolete. While I agree with the first st...
The characteristics of a great projection implementation Over the course of the last two years I’ve written numerous articles on the good, the bad and the ugly of Event Sourcing as well as on our experiences building and maintaining a distributed enterprise-class based on this increasingly popula...
Another part of what I call internal quality is the traceability of decisions, choices and considerations in software development..
How modern engineering practices contribute to readability, testability, isolation, tracebility and discoverability.
I’ve been looking for a better way to explain the difference between a developer complaining about quality and a product owner or manager.
Consider a fantasy game that must track a collection of items, each having a certain amount of quality (or value) that increases or decreases after time passes. This collection contains the following six items:
If I can’t clone your repository and get the application running in under 5 minutes, you’re doing something wrong
Another thing I realized last year is that I really love working on legacy code bases and making them rock solid.
I don’t believe somebody can be really proficient in multiple platforms and programming languages, so invest in knowledge wisely.
How modern engineering practices contribute to readability, testability, isolation, tracebility and discoverability.
I’ve been looking for a better way to explain the difference between a developer complaining about quality and a product owner or manager.
During this year's QCon conference held in New York, I attended a full-day workshop on the scalability challenges a growing organization faces, hosted by Randy Shoup. In my previous post, I elaborated on Randy's classification system to illustrate the phases of a growing organization and how that...
After attending a full-day track with multiple sessions and open-spaces on microservices at QCon New York, it is clear that this technique took flight since I first heard about that at the same conference in 2014. A lot of companies made the jump to solve their technical and organizational scalin...
Some thoughts on how we could convince companies to support the open-source community.
Code that may be readable but which purpose is unclear doesn’t make anybody happy
Naming in software is hard, so here’s how I name and group my automated tests to use them as documentation
Use the right tool for the right problem A very common sentiment I'm getting from the .NET community is the aversion against object-relational mappers like NHibernate and Entity Framework. Granted, if I could, I would use an (embeddable) NoSQL solution like RavenDB myself. They remove the object-...
Transient vs non-transient exceptions If I have to name the single biggest flaw in adopting Event Sourcing, it must be our decision to rely on the synchronous dispatching pipeline of NEventStore. It is based on the idea that every event will be processed by all projectors in a synchronous manner....
I thought we didn’t need OR/Ms anymore? A common advantage of adopting Event Sourcing is that it solves the impedance mismatch between object oriented code and the relation database model. And because of that, Object/Relational Mappers (OR/Ms) have become obsolete. While I agree with the first st...
How applying the SOLID principles on package design can help prevent the dependency hell
Welcome to the dependency hell While working on a little open-source demo project, I ran into that well-known challenge of NuGet dependency management again. This little project results in a NuGet package, that on itself also relies on other packages. Now, if I would just add those dependencies ...
How combining the clarity of Semantic Versioning, a release strategy like GitFlow or GithubFlow and GitVersion gives you sensible and automatic artifact numbering
How Nuke solves all of the problems of PSake, Cake and BullsEye and should become your build automation tool of your choice.
I thought we didn’t need OR/Ms anymore? A common advantage of adopting Event Sourcing is that it solves the impedance mismatch between object oriented code and the relation database model. And because of that, Object/Relational Mappers (OR/Ms) have become obsolete. While I agree with the first st...
Some thoughts on how we could convince companies to support the open-source community.
The proudest moment anybody initiating an open-source project can experience is when that project finally gains the momentum to make a difference within the community it targets. When my colleague Martin and I published the first release of Fluent Assertions on CodePlex in 2011 (yeah, those were ...
At the beginning of this year, I reported on my endeavors to use RavenDB as a projection store for an event sourced system. One of the things I tried to speed up RavenDB's projection speed was to use the Least Recently Used cache developed by Brian Agnes a couple of years ago. This cache gave us ...
I’ve seen a lot of prior attempts to out-source work to remote teams fail, have always wondered what was the main reason for this. Is it a culture thing? Is it the time difference. In this post, I describe the things we do ourselves that have made our remote team endeavors pretty successful for t...
The open-space format gives you a chance to hear about other people’s challenges and how other experienced folks respond to that. I attended one on building high-performance teams.
Ownership is not an all-or-nothing concept, so Netflix acknowledges up to five levels that each give a leader and its people a tool to clarify the expected/accept level of autonomy
How applying the SOLID principles on package design can help prevent the dependency hell
This year, for the third time since I joined Aviva Solutions, I attended the New York edition of the famous QCon conference organized by InfoQ. As always, this was a very inspiring week with topics on large-scale distributed architecture, microservices, security, APIs, organizational culture and ...
Learn about the functional and technical challenges of achieving realistic and useful performance tests.
Use the right tool for the right problem A very common sentiment I'm getting from the .NET community is the aversion against object-relational mappers like NHibernate and Entity Framework. Granted, if I could, I would use an (embeddable) NoSQL solution like RavenDB myself. They remove the object-...
In this final post of this series, I’m going to change direction and talk about the predictability and maturity of your development team(s)
Estimates are almost always wrong and that’s fine. Just deal with that and prioritize accordingly.
Solving the versioning problemIf you're building libraries, products or any other software system, versioning is usually a pretty big deal. It's the only way to determine what version of that library, product or system you're looking at. Before an organization settles on a versioning strategy, ma...
If you look back at the last couple of years, you’ll notice an increasing attention for best practices that should make us more professional software developers. We design our classes using Test Driven Development, we review our code in pairs, and we apply all kinds of architectural principles su...
Estimates are almost always wrong and that’s fine. Just deal with that and prioritize accordingly.
In this third post of the series, I’ll share my perspective on how architectural constraints and decisions can hamper productivity.
In this second post of the series, I’ll discuss the opportunities organizations miss to improve the productivity of their teams.
In this second post of the series, I’ll discuss the opportunities organizations miss to improve the productivity of their teams.
I’ve written many posts about the strengths and weaknesses of Event Sourcing, but I still thought it might be useful to provide you with a list of the most important practical guidelines and heuristics that I think are needed to be successful with Event Sourcing
Transient vs non-transient exceptions If I have to name the single biggest flaw in adopting Event Sourcing, it must be our decision to rely on the synchronous dispatching pipeline of NEventStore. It is based on the idea that every event will be processed by all projectors in a synchronous manner....
I thought we didn’t need OR/Ms anymore? A common advantage of adopting Event Sourcing is that it solves the impedance mismatch between object oriented code and the relation database model. And because of that, Object/Relational Mappers (OR/Ms) have become obsolete. While I agree with the first st...
The characteristics of a great projection implementation Over the course of the last two years I’ve written numerous articles on the good, the bad and the ugly of Event Sourcing as well as on our experiences building and maintaining a distributed enterprise-class based on this increasingly popula...
How Nuke solves all of the problems of PSake, Cake and BullsEye and should become your build automation tool of your choice.
If you look back at the last couple of years, you’ll notice an increasing attention for best practices that should make us more professional software developers. We design our classes using Test Driven Development, we review our code in pairs, and we apply all kinds of architectural principles su...
The open-space format gives you a chance to hear about other people’s challenges and how other experienced folks respond to that. I attended one on building high-performance teams.
Ownership is not an all-or-nothing concept, so Netflix acknowledges up to five levels that each give a leader and its people a tool to clarify the expected/accept level of autonomy
About passion, grace and fire as ingredients in a recipe for fully formed mature adults and high-performance teams as presented by Josh Evans at QCon San Francisco
This year, for the third time since I joined Aviva Solutions, I attended the New York edition of the famous QCon conference organized by InfoQ. As always, this was a very inspiring week with topics on large-scale distributed architecture, microservices, security, APIs, organizational culture and ...
This year, for the third time since I joined Aviva Solutions, I attended the New York edition of the famous QCon conference organized by InfoQ. As always, this was a very inspiring week with topics on large-scale distributed architecture, microservices, security, APIs, organizational culture and ...
During this year's QCon conference held in New York, I attended a full-day workshop on the scalability challenges a growing organization faces, hosted by Randy Shoup. In my previous two posts I discussed a model to understand the needs of an organization in its different life phases, as well as a...
During this year's QCon conference held in New York, I attended a full-day workshop on the scalability challenges a growing organization faces, hosted by Randy Shoup. In my previous post, I elaborated on Randy's classification system to illustrate the phases of a growing organization and how that...
The characteristics of a growing organizationDuring this year's QCon conference held in New York, I attended a full-day workshop on the scalability challenges a growing organization faces, hosted by Randy Shoup. Randy explained us how every start-up goes through several phases, each with a differ...
After attending a full-day track with multiple sessions and open-spaces on microservices at QCon New York, it is clear that this technique took flight since I first heard about that at the same conference in 2014. A lot of companies made the jump to solve their technical and organizational scalin...
At the first day of QCon New York, I attended several talks and open-spaces that had some relation with culture, be it about improving the efficiency of developers, handling disagreement in respectful way, and creating an environment that embraces the learning experience. For instance, one of th...
At the beginning of this year, I reported on my endeavors to use RavenDB as a projection store for an event sourced system. One of the things I tried to speed up RavenDB's projection speed was to use the Least Recently Used cache developed by Brian Agnes a couple of years ago. This cache gave us ...
Het was januari 1997. Ik was net afgestudeerd van de HTS Electrotechniek. Trots als een pauw op mijn ingenieurstitel én die dikke 9 voor mijn afstudeeropdracht bij - toen nog - Philips Semiconductors, ging ik op zoek naar een job. Maar dat viel nog niet mee. Philips had een aannamestop en van rec...
In this second post of the series, I’ll discuss the opportunities organizations miss to improve the productivity of their teams.
I’ve seen a lot of prior attempts to out-source work to remote teams fail, have always wondered what was the main reason for this. Is it a culture thing? Is it the time difference. In this post, I describe the things we do ourselves that have made our remote team endeavors pretty successful for t...
Given the signs that this working-from-home isn’t going to change for another six months or so, let me share some of the things that have helped me to stay sane
Did Visual Studio really get so much better since the last time I tried? Or is JetBrains Rider still years ahead of the competition. Let’s look at editing, debugging and refactoring.
Did Visual Studio really get so much better since the last time I tried? Or is JetBrains Rider still years ahead of the competition. Let’s look at general usability and code navigation
It was in 2009 in Utrecht, The Netherlands, when I first learned about Event Sourcing and the Command Query Responsibility Segregation (CQRS) patterns at a training Greg Young gave there. I remembered to be awed by the scalability and architectural simplicity those styles provided. However, I als...
Did Visual Studio really get so much better since the last time I tried? Or is JetBrains Rider still years ahead of the competition. Let’s look at editing, debugging and refactoring.
Did Visual Studio really get so much better since the last time I tried? Or is JetBrains Rider still years ahead of the competition. Let’s look at general usability and code navigation
Estimates are almost always wrong and that’s fine. Just deal with that and prioritize accordingly.
Do you often forget to await an awaitable method in C#? Here’s an elegant solution.
During this year's QCon conference held in New York, I attended a full-day workshop on the scalability challenges a growing organization faces, hosted by Randy Shoup. In my previous two posts I discussed a model to understand the needs of an organization in its different life phases, as well as a...
During this year's QCon conference held in New York, I attended a full-day workshop on the scalability challenges a growing organization faces, hosted by Randy Shoup. In my previous post, I elaborated on Randy's classification system to illustrate the phases of a growing organization and how that...
The characteristics of a growing organizationDuring this year's QCon conference held in New York, I attended a full-day workshop on the scalability challenges a growing organization faces, hosted by Randy Shoup. Randy explained us how every start-up goes through several phases, each with a differ...
How combining the clarity of Semantic Versioning, a release strategy like GitFlow or GithubFlow and GitVersion gives you sensible and automatic artifact numbering
Another part of what I call internal quality is the traceability of decisions, choices and considerations in software development..
As part of stabilizing an upcoming release, I always dog food a beta package against the 12000 unit tests in one of our bigger projects. In the early days, that would surface all kinds of edge cases I never thought of. In every single case, the first thing I would do is to add a new unit test to ...
An in-depth evaluation of SharePoint, Azure DevOps Wikis and Atlassian Confluence as a documentation and collaboration platform
In this third post of the series, I’ll share my perspective on how architectural constraints and decisions can hamper productivity.
In this second post of the series, I’ll discuss the opportunities organizations miss to improve the productivity of their teams.
Another part of what I call internal quality is the traceability of decisions, choices and considerations in software development..
After a discussion with some folks on what being a software architect really means, I decided to capture the many hats you have to wear
I’ve been reflecting on common issues that make it hard for the developers to understand the architecture
A little story about the typical adoption process of TDD and how that works for other tools, principles and practices
SonarQube always had a bad reputation when it comes to repositories that contain both the front-end as well as the back-end code. Here are two approaches.
How Azure DevOps is holding back the teams I work with to collaborate efficiently and commit code that has a high level of traceability, and how GitHub fixes that
How combining the clarity of Semantic Versioning, a release strategy like GitFlow or GithubFlow and GitVersion gives you sensible and automatic artifact numbering
Another part of what I call internal quality is the traceability of decisions, choices and considerations in software development..
After years of working with legacy code, I’ve learned to value the past and will do what I can to deliver well-focused and organized pull requests
Should architects make decisions with the constraints of available capacity in mind? Or should they strive to ignore the reality and pursue only the best solutions?
When your project, product or component gets sufficiently big that it has a large impact on the rest of the organization, you’ll automatically get faced with lots of internal and external distractions. Other teams might want to get that pull request merged as soon as possible, all kinds of questi...
This year, for the third time since I joined Aviva Solutions, I attended the New York edition of the famous QCon conference organized by InfoQ. As always, this was a very inspiring week with topics on large-scale distributed architecture, microservices, security, APIs, organizational culture and ...
During this year's QCon conference held in New York, I attended a full-day workshop on the scalability challenges a growing organization faces, hosted by Randy Shoup. In my previous two posts I discussed a model to understand the needs of an organization in its different life phases, as well as a...
At the first day of QCon New York, I attended several talks and open-spaces that had some relation with culture, be it about improving the efficiency of developers, handling disagreement in respectful way, and creating an environment that embraces the learning experience. For instance, one of th...
At Aviva Solutions, we’ve been using Git for a little of over two years now and I can wholeheartedly say that after having worked with TFS for years, we’ll never go back… ever. But with any new technology, practice or methodology, you need to go through several cycles before you find a way that w...
Somebody on Twitter recently posed the question whether innovation in software and agile development can co-exist or not. To remove any misinterpretation - something quite common for Twitter discussion - I asked him to clarify what he meant with the word 'innovation'. In short, any kind of softwa...
A recurring topic in every software project I've been involved with is what to document, when to do that, and where to store it. So it wasn't a big surprise that at a recent event, somebody asked me how we track and communicate design decisions. I initially pointed him to an article I wrote in Fe...
I think that the gist of this post should be pretty clear. Unfortunately I've fallen in that same trap myself many times. So often, I had to refrain myself from pulling somebody's keyboard from under their hands, just because I thought I could fix the problem at hand myself much faster. But with ...
In a recent post, I concluded that I have a strong tendency towards tactical architecture. From that perspective, I try to avoid big-design-upfront. I have a built-in allergy for rebuilding stuff that is already out there. I would never consider building my own message bus or event sourcing frame...
Lets be honest here. For a very long time, if I had to choose between an averagely skilled but well-spoken developer and a very skilled and experienced introvert, I would probably choose the first. And yes, I do realize that these are two extremes and that most people have characteristics of both...
Two weeks ago, I talked about Flowdock, an online tool to aggregate multiple sources into a single environment where agile teams can work together. I also promised to look at an alternative service named Slack. When we introduced Flowdock, somewhere in November 2013, Slack was still in its very e...
More or less since the start of my assignment at my current client, four years ago, we have had some form of a cross-team stand-up at 10:00 every day (often named Scrum-of-Scrums). But now that we have around 10 teams, we started to notice some issues lately. People joined too late or didn't even...
An in-depth evaluation of SharePoint, Azure DevOps Wikis and Atlassian Confluence as a documentation and collaboration platform
The open-space format gives you a chance to hear about other people’s challenges and how other experienced folks respond to that. I attended one on building high-performance teams.
Ownership is not an all-or-nothing concept, so Netflix acknowledges up to five levels that each give a leader and its people a tool to clarify the expected/accept level of autonomy
About passion, grace and fire as ingredients in a recipe for fully formed mature adults and high-performance teams as presented by Josh Evans at QCon San Francisco
As long as I can remember, I've been using an automatic build system to regularly verify the quality of the code based I've been working on. First using Team Foundation Server, but since a year or so, Jetbrains' Team City. In my current project we use continuous integration builds for running the...
In this final post of this series, I’m going to change direction and talk about the predictability and maturity of your development team(s)
Given the signs that this working-from-home isn’t going to change for another six months or so, let me share some of the things that have helped me to stay sane
I’ve seen a lot of prior attempts to out-source work to remote teams fail, have always wondered what was the main reason for this. Is it a culture thing? Is it the time difference. In this post, I describe the things we do ourselves that have made our remote team endeavors pretty successful for t...
In this first post of a series, I’d like to focus on the challenges companies are facing while controlling their technical complexity.
These are the practices and principles that have helped me avoid shooting myself in my own foot while practicing Test Driven Development.
In this fourth post of the series, I’ll share some of the (red) flags I might raise while measuring the maturity of testing.
The other day, while pairing up on some unit test, I started to realize that I generally have three modes of looking at my unit tests.
During the same C# code reviews that triggered last week’s blog post about writing great unit tests, another discussion tends to pop-up, in particularly with new joiners (both experienced and junior):
Over the last months, I’ve been involved in more and more code reviews, mostly because we’ve increased the level of quality required for code changes to our code base. While doing that, I started to track my most frequently used review comments intended to improve.
If you choose the wrong unit testing scope, you’ll regret adopting unit testing and TDD in the first place
A little story about the typical adoption process of TDD and how that works for other tools, principles and practices
Code that may be readable but which purpose is unclear doesn’t make anybody happy
Naming in software is hard, so here’s how I name and group my automated tests to use them as documentation
The route, the headers and the specific JSON returned by an HTTP API are the contract, and thus should be treated as such
These are the practices and principles that have helped me avoid shooting myself in my own foot while practicing Test Driven Development.
In this fourth post of the series, I’ll share some of the (red) flags I might raise while measuring the maturity of testing.
Learn about the functional and technical challenges of achieving realistic and useful performance tests.
It has been more than two years since we switched from Microsoft Unity to Autofac and we haven’t regretted this a single day. Not only is the resolution performance much better than Unity, but it’s the feature set, in particular the relation types, that makes a world of difference. In terms of co...
SonarQube always had a bad reputation when it comes to repositories that contain both the front-end as well as the back-end code. Here are two approaches.
How Azure DevOps is holding back the teams I work with to collaborate efficiently and commit code that has a high level of traceability, and how GitHub fixes that
An in-depth evaluation of SharePoint, Azure DevOps Wikis and Atlassian Confluence as a documentation and collaboration platform
Another part of what I call internal quality is the traceability of decisions, choices and considerations in software development..
The other day, while pairing up on some unit test, I started to realize that I generally have three modes of looking at my unit tests.
Over the last months, I’ve been involved in more and more code reviews, mostly because we’ve increased the level of quality required for code changes to our code base. While doing that, I started to track my most frequently used review comments intended to improve.
During the same C# code reviews that triggered last week’s blog post about writing great unit tests, another discussion tends to pop-up, in particularly with new joiners (both experienced and junior):
If you choose the wrong unit testing scope, you’ll regret adopting unit testing and TDD in the first place
Code that may be readable but which purpose is unclear doesn’t make anybody happy
Naming in software is hard, so here’s how I name and group my automated tests to use them as documentation
The route, the headers and the specific JSON returned by an HTTP API are the contract, and thus should be treated as such
It’s 2023, so what if you could run SQL Server in a Linux docker container just before your tests start?
Do you often forget to await an awaitable method in C#? Here’s an elegant solution.
Now, after two alphas and three betas, it’s time to let Fluent Assertions 6 enter the real-world. Let me provide you with the highlights of this release.
My personal experiences while working with user stories for gathering, tracking and planning requirements
Somebody on Twitter recently posed the question whether innovation in software and agile development can co-exist or not. To remove any misinterpretation - something quite common for Twitter discussion - I asked him to clarify what he meant with the word 'innovation'. In short, any kind of softwa...
As part of stabilizing an upcoming release, I always dog food a beta package against the 12000 unit tests in one of our bigger projects. In the early days, that would surface all kinds of edge cases I never thought of. In every single case, the first thing I would do is to add a new unit test to ...