I normally do my weekly grocery shopping online, however since the Coronavirus lockdown and because of the shortage of home delivery slots, I have the first world problem of visiting the supermarket again in person! After returning from a shopping trip this week, I saw a meme on twitter which reminded me of the dilemma most supermarket shoppers face after unpacking their shopping into their car – namely looking at the empty shopping trolley and wondering where to return it to. To quote the tweet :
“The shopping cart is the ultimate litmus test for whether a person is capable of self-governing. To return the shopping cart is an easy, convenient task and one which we all recognize as the correct, appropriate thing to do. To return the shopping cart is objectively right. There are no situations other than dire emergencies in which a person is not able to return their cart. Simultaneously, it is not illegal to abandon your shopping cart. Therefore the shopping cart presents itself as the apex example of whether a person will do what is right without being forced to do it. No one will punish you for not returning the shopping cart, no one will fine you or kill you for not returning the shopping cart, you gain nothing by returning the shopping cart. You must return the shopping cart out of the goodness of your own heart. You must return the shopping cart because it is the right thing to do. Because it is correct.
A person who is unable to do this is no better than an animal, an absolute savage who can only be made to do what is right by threatening them with a law and the force that stands behind it.
The Shopping Cart is what determines whether a person is a good or bad member of society.”
Having a young family with three boys between the age of six and thirteen, they gain much (often useless) knowledge from my discussing such internet memes with them. However, for this one we were all agreed in principle that ‘returning the shopping cart’ is something we should always do.
“Returning the shopping cart“ is an analogy that everyone can apply to your life at a philosophical level. What sort of a person do you consider yourself to be? Will you return the shopping cart, even though you gain nothing from it? Do you expect that it is someone else’s job to come to collect the shopping cart? If the car park is empty, will you still return it, even though no one will ever find out it was you who left it there?
So how does this apply to Power Platform projects? The answer is that leaders of many successful projects will have consciously taken the hard decision to return the shopping cart throughout. This may have happened in a few different ways :
- When gathering requirements, it’s easy too many assumptions or not explain the full capability of the platform to the users, maybe because we can’t know it all anymore. Do we do the hard thing and keep trying, or do we make assumptions and move on and try and deal with it later?
- In software development, there is now a well-established concept of technical debt – most development teams have cut corners during development to meet a deadline. Do we always choose technical debt over adding additional time or effort to the project? (note : there is a difference between purposely choosing technical debt and technical debt accruing over time because of changes in circumstances).
- In our learning practices within our Power Platform teams, do we merely get the job done and not share the journey with our team mates or with the wider community?
- Do we deliver project on time and to budget to meet requirements, or do we also make sure that users have fully adopted it and it is driving business efficiencies in practice?
Avoiding Configuration and Communication Smells
There’s a term in mainstream software development called ‘Code Smells’. It’s defined as ‘a characteristic in the source code of a program that indicates a deeper problem’. When delivering Power Platform projects, there are a variety of ways we can return the shopping cart and avoid some of these configuration and communication ‘smells’.
Here are a few examples of dilemmas a Citizen Developer may face, and how they can return the shopping cart instead of ditching it.
|Dilemma||Ditching the Shopping Cart||Returning the shopping cart|
|I have spent time learning a new Power Platform Skill, what should I do next?||Delivering a solution for the customer with the new skill.
Progressing my career with that new skill
|Sharing the journey you took to learn the new skill with your colleagues. Write a blog about the experience. Publish a video, lunch and learn or webinar – this might be internally to your team or online to the wider community.|
|I have solved a Power Platform problem others have been unable to solve.||I am so good! Close the problem issue and move on.||Show others how you solved the problem.
Fully document the issue. Create a knowledgebase article or detailed public blog that describes the resolution or (more importantly) that explains your investigative process.
|I have been assigned a complex task to complete.||Complete (or fail to complete) the complex task in isolation.||Document the process as you go, giving regular updates to all interested parties so they are fully aware of progress. Even if you fail you have made progress.|
|I am assigning a task to one of my teammates||Give a short description of the task to a team member||Set expectations around timelines and due dates and offer assistance as required. Consider skill sets and experience.|
|I need to train my end users||Schedule a training course for just before Go-Live||Consider change management and user adoption throughout the project and involve end users in the development process as early as possible|
|I have completed a task for my customer to test||Let my customer know system is ready for testing||Provide summary and detailed release notes so customer have full awareness of system changes implemented.|
|Dilemma||Ditching the Shopping Cart||Returning the shopping cart|
|Should we use managed or unmanaged solutions in controlled environments?||Unmanaged for all environments||Managed for controlled environments (controversial, I know)|
|Should I create a text field or a number field or an option set?||Not sure, guess and move on||Do some research and find out all the possible values before you create it|
|What naming convention are we using for fields, views and web resources extensions||Not sure, guess and move on||Agree a naming convention and stick to it|
|Should I create a local option set or a global option set?||Not sure, guess and move on||Global Option set or consider if it should be an entity in it’s own right|
|What licences will all the users have?||Not my department, can worry about this later||Ask or seek to map out available functionality to that that is available.|
|Should I add a description to this field name as I create it?||No, it will take too much time||Add a full description. The next person to update it will thank you for it.|
|I need to rename an entity because of a change in requirements?||Rename the entity||Rename the entity and all associated forms and views and related records|
|What security role should I give to a user who is having permission problems?||Give them system administrator role||Work out the granular permissions required and look for an equivalent existing role. If none exists, create a new role.|
|I am creating a new entity||Don’t give it an icon||Polish it with an icon (use iconsdb.com or similar)|
|I am creating a relationship between 2 entities. What cascading rules should I use?||Just go with the default cascading rules||Spend some time determining what cascading rules should be used? If you don’t understand them, do some research and testing.|
|I am making more than one Canvas PowerApp and using the same logic in both||Copy the PowerApp and amend it as required||Split out the shared logic into component libraries and use the shared logic in both|
|I am renaming a field that has been named incorrectly||Rename the field on the form||Rename the underlying field name too on the entity so entity views are updated|
|I can’t do something but I’ve found a managed solution that does it||Install the managed solution||Check if the solution is supported, source code is available or if there are other possible native ways to achieve before introducing third party dependencies.|
Next time you face these or similar dilemmas, ask yourself the question and consider returning the shopping cart.
You’ll be a better developer for it.