3.7. Why?

This might be a long read…

The story behind FakeXrmEasy

Hi! This is Jordi, currently based in Tarragona, Catalunya, Spain, Europe, Earth.

I started FakeXrmEasy back in 2014 primarily as an open source side project to make Unit Testing for the, then, Dynamics CRM world, a lot easier, as I couldn’t find any other solution other than mocking requests from scratch like many other devs out there were already doing.

Most people think FakeXrmEasy was created to aid in testing of plugins, but really, at the very begining, I was mostly developing bespoke MVC web applications which had far more complex functionality than many plugins.

I thought the main issue that made Unit testing difficult for Dynamics CRM / Dataverse / etc, was that it was really: 1) mostly data driven, and 2) there was just much more going on inside the platform than what was developed in custom code.

So back then, I had an idea which was: what if we were able to run code locally, without having to mock anything, drive tests by just data, and in-memory, so it’s extremely fast?

The idea was great… the execution turned out to be way more complex than anticipated :)

The implementation involved basically developing an In-Memory query engine from scratch capable of translating all the QueryExpression, QueryByAttribute, FetchXml, etc back into an in-memory database, as well as implementing other OrganizationRequests that would alter such state.

The output was a way of testing based on just comparing data before and after every test, completely abstracting the implementation underneath. No mocks. No coupling between tests and implementation. Refactor without mercy.

At the beginning, I had chosen the MIT license because I thought it was “just going to be a personal project of a few days / weeks… “. :) At that point in time, I also probably knew even less than 5% of what I know about OSS today.

However, the more functionality I was adding to the framework the more valuable I thought it was so on 2015 I founded Dynamics Value. In the true spirit of sharing and collaboration of Open Source, we hoped that we would engage with other companies in carrying out activities that would financially support further development of FakeXrmEasy…

7 years later, FakeXrmEasy has:

  • Reached over 1.5 million downloads, which roughly accounts for 20% of all the CRM SDK downloads, many Fortune 100s included.
  • Used in multi-million dollar project implementations (not our projects, of course ;) )
  • Been mentioned in books
  • Appeared as a desired skill in job alerts [EDIT 29/03/2022: It’s no longer a desired skill but also a key requirement in many job alerts now…]
  • Appeared as a skill on many LinkedIn profiles
  • Been used to deliver training courses

So it seems like the idea I had was actually a good idea :)

However, during all these years there have been quite a few….

Challenges

All the work with FakeXrmEasy had to be done on my spare time (along with the help from other contributors, of course, which I really appreciate), mostly because running a micro company besides carrying out consulting activities at 100% capacity is extremely challenging by itself. Not to mention MVP activities. For a number of years, I was putting an average of 4h/day on top of a full time job. That wasn’t healthy.

For example, in 2018 I pushed 18 releases, that was like 1.5 releases every month, however for some people the number of “commits were not enough”.

As FakeXrmEasy was gaining adoption, the number of issues and pull requests started to increase rapidly, specially over the last couple of years. At the same time, the platform is just getting bigger and bigger, with now a brand new Dataverse client package. We would need now to support not just a Windows platform, but also Linux and MacOS. Parallel versions of different SDKs. That is just going to add more work, not less :)

In addition to that, although we received many pull requests (thanks!) we noticed that the difference between inbound contributions (PRs) and outbound contributions (ours) is several orders of magnitude. Even worse, a recurring pattern was finding out 3rd parties were keeping internal forks with considerable improvements that never made their way back to the original project, even after insisting on it, many times.

This was not a good situation for neither us, maintainers, nor the users of FakeXrmEasy.

FakeXrmEasy needed a “hit refresh” moment.

New licensing model

After careful consideration, and research, we decided a more sustainable way going forward was a new licensing model that would still benefit true community projects, and even non commercial organisations or uses.

The new model allows using FakeXrmEasy free of charge for personal use, or open source projects according to the OSI-approved Reciprocal Public License 1.5. Non-commercial organisations or non-commercial use is also allowed free of charge according to the Modified Polyform NonCommercial 1.0.0 license.

For other uses there is a commercial license available.

We’ve also conducted a research study with the help of 32 Pro Devs working for 30 different organizations from different countries and of different sizes.

The outcome of the study was*:

  • 191% ProDev increased efficiency due to the reduction of escaped defects
  • 33% ProDev increased efficiency due to other time savings

For more info please check out the licensing FAQ.

What happens to FakeXrmEasy v1.x?

FakeXrmEasy v1.x is still MIT licensed. We’re not relicensing it so you can use it for as long as you want. You could, for example, fork the v1.x version and keep maintaining it internally as long as you don’t use any code from v2.x or later versions as they are under a different license now.

However, doing so would probably require a significant effort, and given the differences that already exist in terms of functionality, performance, and security upgrades between 1.x and later versions, you might want to consider using the latest versions as a more cost-effective option, which include commercial support. Feel free to check the business added value in our white paper.

Our focus is on v2.x and later versions. Please feel free to check the licensing FAQ for more details.