When not to custom code

We’ve all been there. Trying to decide if we can use features that are standard as part of the product, or if we need to custom develop (program) them.

There are basic principles to this, of course. Microsoft itself is (slowly) pushing the No/Low code principle, rather than heavy development. The PowerPlatform supports this, and allows for ‘citizen developers’ as they are known.

Incidentally take a look at https://vimeo.com/280635091#t=3060s from MS Inspire 2018, where they showcase someone who did exactly this at London Heathrow Airport

There are times when it’s impossible to exist without custom functionality. Complex requirements and projects will inevitably take you down that route.

I’ve had a recent scenario where I was performing an initial investigation into their D365 environment. They’ve had work done by a D365 implementer previously, including some custom solutions.

However upon investigating, I immediately found the following – there was a custom entity for Addresses!!! Hold on – yes, I just did say that.

Address on the main contact/account forms were using the native fields. Any additional addresses were being saved into this custom entity (which didn’t have any more fields than the system entity), and then being linked to the contact/account.

I even made sure to confirm the default system Address entity by spinning up a CE trial and checking it out (I didn’t have any vanilla instances at the time I could use).

This is crazy. Even if you’re implementing a custom solution, you should use the system provided entities rather than re-create them yourself! It makes life much easier for the client, both in terms of using the system and understanding it, as well as from a data flow perspective.

Note: Microsoft actually enforce this in PowerApps – they’re restricted functionality so that you’re not able to duplicate the account or contact entities through a PowerApps

So the lesson to take out of this is to always use the default system functionality where possible, and don’t create your own entities that do exactly the same thing!

Useful links for checking Address features