• NSBCon 2015: Decomposing the Domain

    In his presentation at NSBCon 2015, Gary Stonerock II talks about transforming a tightly-coupled synchronous process into an SOA/messaging-based solution using NServiceBus. Gary's team recently finished a rebuild of their clinical trial platform, and he shares with us some of the challenges, such as establishing stronger encapsulation and isolation, that they faced and how they overcame them.

    Read more →
  • NSBCon 2015: All about Transports

    Knowing which NServiceBus transport is best for your application is not easy. There are many factors involved in selecting a message transport; distributed transactions, legacy integration, cross-platform capabilities, and cloud deployments are a few that might be considered. At NSBCon 2015 Andreas Öhlund outlines the different transports that are available for NServiceBus. He covers the highlights and lowlights of each. Rather than telling you which transport is the right one, Andreas provides you with the tools to make that decision yourself, within the context of your project.

    Read more →
  • Dish washing and the chain of responsibility

    In our house, cleaning out the dishwasher is a shared chore. My son starts the unloading process by removing a dish or utensil from the dishwasher. If he can put it away, then he does. If the proper location for the dish is out of his reach, then he passes it to his mother. She then goes through the same process; put the dish away if she can, or pass it off to the next person in line, which is me. When I get handed a dish I will put it away and, since I'm 6'4" (1.92m) tall, I can reach all of our cupboard space which means that the process ends with me.

    Read more →
  • But all my errors are severe!

    I can't draw to save my life, but I love comics, especially ones that capture the essence of what it's like to be a software developer. They capture the shared pain we all go through and temper it with humor. Luckily, I no longer work for large corporations, so it's easier now to read Dilbert and laugh without also wincing.

    Read more →
  • The Slippery Slope - Love your job, Live your life... Lose your mind

    It all began so innocently. Through a friend, I found a job at a small, young, high-tech company. It was a perfect fit for work-life balance—work from home and flexible hours. This job was completely in English, which was a major plus for one who chose to move overseas and, 10 years later, still struggles with a new language! As a bonus, there was a growing human resources component to the job, tapping into my original career choice years ago before I stepped off the corporate ladder to be home with my kids.

    Read more →
  • Beyond ServiceMatrix

    When we originally started developing ServiceMatrix, our vision was to develop a tool that could help design distributed systems. One of our main goals was to enable architects to graphically design an immediately executable solution so they could quickly iterate on their designs. We also wanted to help developers who were new to NServiceBus to get started more quickly and avoid many common pitfalls with messaging. Unfortunately, even after years of effort, we just could not find the right balance between the "it just works" code generation experience and leaving developers enough control over how their solution was built. Although we were aware of many other companies who had struggled with this very issue, we also fell into that well-worn trap of thinking "this time will be different". We haven't given up though, and have started down a different path instead - one that doesn't rely on code generation and is more integrated with the rest of the platform.

    Read more →
  • The dangers of ThreadLocal

    Languages and frameworks evolve. We as developers have to learn new things constantly and unlearn already-learned knowledge. Speaking for myself, unlearning is the most difficult part of continuous learning. When I first came into contact with multi-threaded applications in .NET, I stumbled over the ThreadStatic attribute. I made a mental note that this attribute is particularly helpful when you have static fields that should not be shared between threads. At the time that the .NET Framework 4.0 was released, I discovered the ThreadLocal<T> class and how it does a better job assigning default values to thread-specific data. So I unlearned the ThreadStaticAttribute, favoring instead ThreadLocal<T>. Fast forward to some time later, when I started digging into async/await. I fell victim to a belief that thread-specific data still worked. So I was wrong, again, and had to unlearn, again! If only I had known about AsyncLocal earlier. Let's learn and unlearn together!

    Read more →
  • The day I tried to make cookies and learned something about writing documentation

    Have you ever wondered what it might feel like to read product documentation without the benefit of being an expert in the product? It’s a frustrating exercise, but it's usually something I can work around once I figure out the gap between what I know and what the reader knows. It’s never been brought home so completely as it was the other day. I had a hankering for some home-baked cookies and, perhaps stupidly, I figured I’d cook them myself. After all, how hard can it be to follow a bunch of simple instructions to bake some cookies, right?

    Read more →
  • An organization deconstructed

    It’s safe to say I knew next to nothing about the challenges of a software development company when I joined the Operations department at Particular Software two years ago. My background is in Human Resources, and that part of me was intrigued by the little I knew about the company – just past the start-up stage, 100% dispersed, flexible hours, growing fast. As a passionate planner, it rocked my boat a bit that there was no master plan for the company. Three things were clear, though. One, I was part of a team passionate about our culture, organization, and products. Two, we wanted to build tools that developers were equally passionate about. And three, we wanted to build the kind of company where we all wanted to work.

    Read more →
  • Encouraging an "I don't know" culture

    I recently started as a software engineer with Particular. Being new means I've had plenty of opportunities to realize what I know and what I don't know. With every new role, project, or technology, I've always found there is a lot to learn. I look at the team around me and see their good qualities, how they have it all together, and I realize how far I have to grow. They are experts, and I am supposed to know what I'm doing as well. You respect the knowledge of your peers, and you want them to respect yours, too. Admitting that you don't know something is scary. Will you lose a bit of that respect? What if you admit not knowing something that was obvious to everyone else?

    Read more →
  • Goodbye microservices, hello right-sized services

    If you follow industry news, you have probably heard about microservices. They are everywhere. More and more companies are exploring this architectural style, sharing their successes and their failures. The landscape is changing and advancing rapidly. Much has been learned recently from these real-life implementations. However, one of the most frequent and controversial questions remains the same: so how big should each microservice be?

    Read more →
  • Productivity power-ups in the August Platform release

    This month, we released an update to our platform, designed primarily to give you a much better user experience. If you have been frustrated by having to deal with large numbers of failed messages, or if you routinely deal with relatively large messages, we have included new features specifically to address your pain points. We've also added multiple productivity enhancements across the platform, so there's sure to be something in it for everybody.

    Read more →
  • TransactionScope and Async/Await. Be one with the flow!

    You might not know this, but the 4.5.0 version of the .NET Framework contains a serious bug regarding System.Transactions.TransactionScope and how it behaves with async/await. Because of this bug, a TransactionScope can't flow through into your asynchronous continuations. This potentially changes the threading context of the transaction, causing exceptions to be thrown when the transaction scope is disposed. This is a big problem, as it makes writing asynchronous code involving transactions extremely error-prone.

    Read more →
  • On the importance of auditing

    Any good accountant will tell you how important it is to keep receipts. I never imagined that advice was applicable outside of accounting and finance. For example, I once worked on an ordering system, and one day, it was clear that something was broken. Orders that were expected to come from a well-known region on the globe weren't coming in as usual. The incoming rate was exactly zero; definitely not the same rate as the week before. Something was …

    Read more →
  • Async/Await: It’s time!

    Async/Await is a language feature introduced in C# 5.0 together with Visual Studio 2012 and the .NET 4.5 runtime. With Visual Studio 2015 almost ready to be shipped to end-users, we can see that async/await has been around for quite some time now. Yet NServiceBus hasn't been exposing asynchronous APIs to its users. Why the await? We have been carefully observing the adoption of async/await in the market and weighing its benefits against its perceived …

    Read more →
  • Inside the fishbowl at NDC Oslo

    With a record breaking 1,900 attendees, 160 speakers, 20 workshops and 170 talks spread over 9 tracks, NDC Oslo last week again asserted itself as a cornerstone of the developer conference calendar. And it doesn't stop there. Furthering the expansion that started in 2013 with the creation of NDC London, it was announced that the NDC will be coming to Australia's Gold Coast in 2016. We were proud to be an official sponsor of NDC Oslo 2015, which ran from 1 …

    Read more →
  • Death to the batch job

    There's something dangerous lurking in your software. Not just the general lurking, murky, ickiness you might expect. Oh no, it's much worse than that. It's something specific. Something big; something ugly. There might even be more than one. It can't decide if it's angry or hungry or both. All it knows is it's having a very bad day. And it's going to eat you. Maybe it won't literally eat you, but it will come after your family time, your sleep, and …

    Read more →
  • Mining for gold in your log files

    Once you've already learned the ins and outs of a library, it may seem obvious how it should be used (and which parts should be avoided). The thing is that, from one project to the next, we often make use of new and different libraries and frameworks and may not appreciate some of the more subtle differences among those technologies. The better frameworks out there will log all kinds of information, often telling you when you're using them incorrectly. …

    Read more →
  • Empires fall: Decentralize your code to avoid total collapse

    Ruling the world is hard. Alexander the Great1 may arguably have been the person to come closest to being "Emperor of the World". In 334 BC, his armies left his home in Macedon (modern-day Greece) and conquered a swath of territory to Egypt and halfway across Asia to northwest India - most of the known world at that point, but ultimately failed in ruling all of humanity when he died at the age of 32 under somewhat suspicious circumstances2. Of course, …

    Read more →
  • It's official: we are now cool

    We are pleased to announce that we have been selected as a Gartner “Cool Vendor in Web-Scale Platforms” for 2015. This is an accomplishment for us and it goes beyond simply getting a vote of confidence from an influential IT reporting organization. Danny Cohen, Director of Product Development at Particular Software, accepts Cool Vendor recognition from Gartner associates If you walk through the halls of a sufficiently large enterprise and hang around …

    Read more →
  • Protect your software with the Circuit Breaker design pattern

    Life as a software developer is definitely lived in the fast lane. After weeks and hours of cranking out the code to get the features developed, and after the builds and tests are green and QA stamps its seal of approval, the code is deployed to Production. And then the most dreaded thing happens, the deployed software fails in production in a bad sort of way. In a Murphy's law sort of way. As the saying goes, "Anything that can go wrong, will go wrong". …

    Read more →
  • OMG! They Killed My Stacktrace!

    I can't get that flashing red light on my desktop out of my mind. It's nagging me. What is it? Oh my... I just killed the build! How embarrassing -- only a few weeks on the team and I'm already a trouble-maker. Resistance is futile. The flashing red light got me. Five acceptance tests are failing on the build server. Hold on -- those tests are working on my machine! Can't I just add a works on my machine badge and carry on with the other things I have …

    Read more →
  • The secret of better UI composition

    I was at a customer site, and we were analyzing their business processes with the intent of building a new component of their system. The customer is basically a logistics company, whose responsibility is to deliver goods on behalf of their customers and, when applicable, to charge the recipient of the goods for the delivery and handling process. During this discussion, the accounting manager raised an interesting issue. One of the internal …

    Read more →
  • The day we almost lost an invoice

    The day started like any other day working as a solutions architect for a healthcare invoice processing system. When I came into the office I didn't anticipate that this was going to be a special day. I only realized it when a customer called in and asked for a specific invoice that should have been processed in our system. We couldn't find it! It just wasn't there at all. Sweat was dripping down my neck. Did we just lose an invoice -- and therefore …

    Read more →
  • Microservices: the future or empty hype?

    As is common with the advent of new technology, there currently exists a lot of hype around the concept of microservices. Hype does not necessarily equate with superiority, and blindly following the hype can easily result in us making all of the same old mistakes in completely new and different ways. In order to be more effective at software development, we need to take a step back and unravel the hype from reality. There are a few broad classes of …

    Read more →