Great posts on Microsoft Dynamics 365 and Software Engineering from the Capgemini team

The Capgemini Microsoft team have been creating some great blog posts this year.  One of the goals of the team is to raise our profile and share knowledge with the community.   The Capgemini Dynamics team created a new blog on medium and we have an existing Software Engineering blog.

Below are links and a summary of the posts this year

Capgemini Dynamics team kick off 2018

A post on the kick off meeting, highlighting the goals for this year and achievements of last year

Why the Capgemini team recommends apprentices

Why Capgemini Dynamics teams experiences of apprentices and the success the team has had

NAW 2018: Dynamics apprentices

An article giving thoughts from the apprentices on the Capgemini Microsoft Dynamics team

What we are looking forward to at Extreme 365

4 people from the Capgemini Microsoft Dynamics team went to Extreme 365 in Dubrovnik, what we were looking to

Future of customer service in your business

How Field Service functionality can help your business

How inverting the problem can help you find different solutions

Inverting your thinking about a problem can help create different solutions and more innovative solutions

Dynamics brain teaser

A brain teaser involving Microsoft Dynamics 365 Solutions, can you solve the puzzle

Create folder in SharePoint from Dynamics 

How to create a folder in SharePoint triggered from a Microsoft Dynamics 365 plugin

Software engineering and .NET articles

Here are some articles from the various Java and Microsoft teams in Capgemini, different technology but both focus on good software engineering practices.

A design review checklist for non‑designers

A checklist for developers reviewing designs

How fast are your React‑ions 

Comparing React to other JavaScript frameworks, seeing how much faster it is and other considerations

Cloud Native Apps on Azure 

Development is moving to the cloud, the article shows how you can use Azure cloud to give you an advantage

Roslyn-Based .NET Code Analyser

Roslyn, which enables .NET software engineering teams to implement automated code reviews based on the skills which they already have.

Serverless and using it

Understanding what Serverless computing is and why it’s a good thing

Debugging into a NuGet package

How to debug NuGet packages

 

Advertisements

Advice on improving as a Microsoft Dynamics 365 developer

The stupid questions are the ones you didn’t ask #HoskWisdom
I get asked questions directly, I write them as posts so the answer can then help many people instead of just one.  Earlier questions

Ask the Hosk questions

If you ask a question if you are polite it will increase the chance of me answering, don’t forget to say how great my blog is (that really helps).

Consider I’m a busy and sometimes I won’t be able to answer you question.  I might not know the answer.

The CRM Forum

I would recommend raising a question in the CRM Forum

  • It’s free
  • CRM experts who have experience will answer the question
  • Microsoft CRM support answer questions
  • You might get a number of answers and opinions

If no one answers you question then if you email me I can see you have tried

CRM forum

When you raise a question, try to give as much information as possible, this will help anyone who answers your question.

The CRM forums are a great way to learn Microsoft Dynamics 365, you can see common questions raised by users/developers and the answers from experts.

Question – Transition to Microsoft Dynamics is tough

Hi Ben, I have been working on CRM as a consultant/lead for the last 5 years. Earlier I was working on IBM Mainframes/AS400. The transition has been a rough one with trying to learn on the job. Struggling a bit with plugins as .net fundamentals aren’t strong enough. Can you kindly recommend a good learning path?

Its like for every stumbling block I try to Google it out which is kinda taking the fun out of it

 

I didn’t answer so he reverted to flattery

Hi Ben, I have been eagerly waiting for your response. Would love to hear your wise words

It worked!

Help yourself

When you ask for help, the person wants to know you have tried, got stuck and now you need some advice to set you off in the right direction.  I am reluctant to help people who haven’t tried or thought about the problem because they are taking a shortcut (googling answers, copy code and not learning).

I will go one step further and believe people should think about the problem

Thinking about a problem is the best way to solve it #HoskWisdom

 

Define what the problem is and work out solutions.  I encourage people to think

It’s useful to use the cardboard developer technique and explain the problem to yourself or a small figure (my preference is a Teenage Mutant Ninja Turtle).

Consultant or developer?

First understand where your destination is before you plot a course.  You should have an ideal job role or identified your next role.  Answer the questions

  • What do I like and dislike about my current role?
  • What did I like/dislike about my previous roles?
  • What is your dream role or dream job?

I recommend going through the Career Conversation as specified by Radical Candor: How to Get What You Want by Saying What You Mean (a great book I recommend it for team leaders/manager)

I think its better to specialise in become either a functional consultant or a developer.  Consider what role you enjoy more because you will be doing it every day for 8 hours.  They are separate roles, which need different skills

Consultant skills

  • Good communication
  • Presentation skills
  • Understanding requirements and analyst skills
  • Running meetings and workshops
  • Strong knowledge of Microsoft Dynamics 365 out of the box functionality
  • Gathering requirements, questioning the business, listening
  • Converting requirements to Dynamics 365 functionality

Developer skills

  • Strong coding skills and experience
  • Design code – SOLID Principles, design patterns
  • Unit testing
  • Integrating systems
  • Software engineering
  • Knowledge of out of the box functionality
  • Debugging, bug hunting

Do everything average or a few things well

I have worked for small companies were my role was consultant, developer, technical setup and support, it was great to learn different aspects of Microsoft Dynamics but I didn’t specalise and I was doing tasks I didn’t enjoy (installing software and configuring servers).

When you work at a bigger companies, you work with experts consultants, developers, DevOps, testers, architects etc.

I think you should focus on becoming either a great Dynamics consultant or a great Dynamics developer but if you try to be both you will be good but not great.  Many Dynamics professionals can’t code and instead focus on improving their consultanty skills.

“The man who chases two rabbits, catches neither.” ~ Confucius

Developer path

I’m a developer, so here is advice on becoming a better developer.

Stop googling answers and think, learning and solving problems, this build up your Microsoft Dynamics 365 knowledge.  Becoming a CRM developer is difficult, it takes time and effort.  Becomean expert in Microsoft Dynamics 365 and improve as a Software Engineer.

No shortcut in become a Dynamics developer

Understand Microsoft Dynamics 365 out of the box functionality, the best way to do this is to take and pass Microsoft Dynamics 365 certifications.

When you come up against problems, don’t search the internet, instead search the Dynamics SDK and understand how it works.  The SDK is the core development engine of Microsoft Dynamics 365

Start with the CRM SDK

The reason to stop getting answers from the internet is because the Internet gives you the answers but it doesn’t help your learn and understand how Microsoft Dynamics 365 works.  Getting answers without learning is short-cutting learning and growing your knowledge.  This leaves  you with fragile knowledge which won’t help you resolve problems not previously tackled.

Known as Chauffeur knowledge

The Two Types of Knowledge: The Max Planck/Chauffeur Test

If you want to improve read books

read the articles below

Dynamics 365 Online Deployment – MB2-715 study notes

You cannot create a solution with Microsoft Dynamics 365 if you don’t understand it #HoskCodeWisdom

The goal of Dynamics certifications is to broaden your knowledge, learn how new features work and get a certification to prove you know it.  If you study, earn the knowledge the certificate is useful to you and employers.

Short-cutting creates technical debt for yourself because employers, colleagues are expecting you to be an expert in Microsoft Dynamics 365.

The benefits of Dynamics certifications are discussed in the posts below

Certification criteria

Understand what you will be tested on and read the certification criteria

Microsoft Dynamics 365 customer engagement Online Deployment certification criteria

These are the main areas

  • Create a Customer Organizational Structure (25% – 30%)
  • Administer the Microsoft Dynamics 365 Environment (25% – 30%)
  • Integrate Microsoft Dynamics with Other Applications (20% – 25%)
  • Manage Microsoft Outlook and Mobile Environments (25% – 30%)
Look at the details under these because they will include parts of the Dynamics 365 you don’t have experience with.  This article explains why you might not have experience with certain areas of Dynamics 365.

Certification Process

I have been getting Dynamics certificates since Microsoft Dynamics CRM 4 and I use the same technique

Watch the Dynamics learning portal videos for the certification for the functionality I don’t know(and sometimes watch them for a refresh).

Whilst watching the videos I will make study notes, I believe in active reading/watching otherwise I can’t tell if the information is sinking in or bouncing off.

For functionality I haven’t used before I create a trial in Dynamics 365 and play with the functionality, using the functionality is the best teacher.

I make notes on the limitations of functionality and absolutes because these are the things Microsoft likes to test you on.  It’s also easy to read these notes and put them into a quiz to enable you to test your knowledge.

The more you try to retrieve a piece of information the more your brain will realise it’s important and put it in a prominent part of your brain for easy access.

Source of Information

Hosk study notes

Please note these were made in 2017 some things could have moved on

blog post with a few details on Dynamics 365 instance management

  • There are two types of Instances 1. Production Instances 2 Non- production Instances.
  • Sandbox instance can be put in Administration Mode and System Administrator and System Customizer role can sign in to the instance
  • While Copying instance, target instance can be a Sandbox or Preview instance; not a Production instance.
  • When an instance is copied, target instance will be deleted and replaced with copy Source instances data, customizations.
  • Global administrator can copy all available instances. But Dynamics 365 system administrator can copy instance for which they have system administrator role.
  • Notifications are sent to administrators or any additional recipients configured when 80 % for storage limit is reached. If storage limit is reached no new records can be created. Here then data needs to be removed and/ or additional storage needs to be purchased
  • Full Copy includes all application data, user, customizations from the source instances and is suitable for UAT, upgrade testing, preview in Production (TAP/EA) and training.
  • Minimal copy includes users, customizations and is suitable for iterative team deployment, Partner/ ISV Solutions and Proof of Concepts.
  • System backups occur daily.
  • System backups are retained up to three days. Check your expiration date.
  • System backups do not count against your storage limits.
  • You can back up Production and Sandbox instances.
  • You can only restore to a Sandbox instance. To restore to a Production instance, first switch it to a Sandbox instance.
  • Only CRM Online 2016 Update 1 or later versions are supported for backup.
  • On-demand backups are retained for up to three days. Check your expiration date
  • The instance remains available while being backed up.
  • The instance remains unavailable while being restored.
  • Copied instances are copied to the same region as the source instance.
  • Instances that are reset are reset to the current region.
  • Preview Instances do not consume any of the storage quota purchased for Production and Sandbox instances.
  • A tenant can include up to 50 Dynamics 365 (online) production instances and up to 75 non-production (Sandbox) instances.
  • Each instance within the tenant receives its own SQL database.
  • Dynamics 365 data is not shared across instances.
  • Storage is shared across the primary instance and any additional instances.
  • All instances for a single customer tenant will be set up in the geography where they initially signed up for their account. Storage consumption is totaled and tracked across all the instances attached to a customer tenant.
  • You can set up separate security groups for all instances.
  • A licensed Dynamics 365 (online) user can potentially access all the Dynamics 365 (online) instances associated with the tenant. Access is controlled by instance security group membership.
  • You can purchase additional instances through the Additional Instance Add-On. Additional instances can be added only to “paid” subscriptions – not trials or Internal Use Rights (IUR). If you purchased your Dynamics 365 (online) subscription through Volume Licensing, you must go through your Large Account Reseller (LAR) to purchase the additional instance.
  • You can’t merge existing trials or subscriptions onto an additional instance; instead, you will need to move your data and customizations.
  • User accounts, identities, security groups, subscriptions, licenses, and storage cannot be shared among tenants. All tenants can have multiple instances associated with each specific tenant. Dynamics 365 data is not shared across instances or tenants.
  • Your instance will not be updated unless you approve it. This means your organization will go without the latest features and functionality until you explicitly give approval for the update to happen. Keep in mind, we do have an update policy that will make some updates mandatory, with no approval required.
  • At any given point a customer must be on the current version (n) or a version prior (n-1). For example, if you are on CRM Online 2016 Update (n-2) and chose not to take the available CRM Online 2016 Update 1 (n-1), then you would need to take December 2016 update for Dynamics 365 (online) (n) as a mandatory update.
  • Twice per Year new features become available through customer-driven updates in the Microsoft Dynamics 365 instance.
  • Office 365 admin centre to add/remove users
  • Best practise is to make the user change their password when they login
  • You add the user in Office 365 admin centre but you then must log into Dynamics 365 and give them a security role
  • Authentication is having a licence and office 365 user
  • Authorisation is having a security role
  • Removing the Dynamics 365 license makes the user disabled
  • Role assignment will stay the same for a disabled user.
  • Non-interactive user are for service accounts/integration
  • You can have 5 non-interactive accounts
  • Non interactive users can be used for programmatic access
  • Non-interactive users don’t consume a licence
  • Global Administrator – access office 365 admin centre
  • Administrative roles don’t use licences
  • Administrative roles can’t see any Sales, Marketing or service records
  • Administrative role is set to Administrative on user settings
  • To reduce administration, it’s recommended you setup federation because you must have an office 365 user. Synchronise your AD with Azure AD
  • A global administrator will, by default, also have systems administration privileges in Dynamics 365
  • Global administrator can access Dynamics 365 without a license but they cannot view any records without a Dynamics 365 license in read-write mode
  • Global Administrators are the only people who can assign other admin roles
  • You can assign alternative email addresses
  • Customized Administrator roles
    • Billing Administrator
    • Dynamics 365 service administrator
    • Exchange administrator
    • Password administrator
    • Skype for business administrator
    • Power BI service administrator
    • Service administrator
    • SharePoint administrator
    • User management administrator

Licensing

  • Dynamics 365 is available in two editions. Business and Enterprise. – not any more but the exam might not be updated
  • Enterprise is aimed at customers with more than 250 users
  • Enterprise can include operations and finance
  • Enterprise has dual rights which means you get a free on-premise licence with your on-line licence
  • Business edition is aimed at companies with 10-250 users
  • Dynamics 365 is based on named users – e.g the license is assigned to a Office 365 user
  • Enterprise edition application licenses are often $95 each. Whilst the customer engagement plan, giving access to all of the engagement apps is $115 per user per month
  • The Dynamics 365 Plan license, giving total access to all of customer engagement and operations is currently $210. Whilst the Unified Operations Plan is $190.
  • Business edition, full users are $40 per use per month. And a Business edition team member license is $5 per user per month.
  • One sandbox and one production instance are provided with your first purchase of a Dynamics 365 license.
  • Additional sandboxes cost $90ish per month

Portal

  • One portal is included with any Dynamics 365 Customer Engagement Plan subscription, per tenant, shared across all Customer Engagement Application
  • Each portal may only be associated with one instance

Instances

  • Tenant – an account created in Microsoft Online services
  • One tenant > many instances
  • Each instance is deployed to a separate SQL database
  • Different instances can be used for different tasks – test, dev, training, etc
  • Security group – what users can access what instances. g. you could have a developers security group, with access to the development instances
  • Two Instances types
    • Production instances
    • Non-production instances – Sandbox
  • Production and sandbox instances are purchased as addons for a subscription
  • Trials cannot purchase add-ons
  • All instances have names and unique url
  • Instances are managed in the Dynamics 365 admin centre
  • Sandbox instances have actions not available on production instances such as
    • Switch (change from production to sandbox or sandbox to production)
    • Reset
    • Delete
    • Copy
  • An admin can switch between product to sandbox and sandbox to production.
  • You can only switch instances if you have paid for the different types
  • Production instances cannot be reset
  • When an instance is reset, it’s deleted and created as a new instance
  • Sandbox instance can be moved to Administration mode
  • Administration mode, limits access to administrators and customizers
  • Administration mode stops back group operations such as Async services and workflows
  • All the storage is shared between all instances
  • A full copy, Copies an instance copies Data, users and customisations
  • Minimal copy only copies users and customisations
  • When copying consider how much data you have available and cost
  • You might not want developer users to see production data – be careful
  • You can only copy instances to a sandbox instance
  • You can copy from production or a sandbox instance
  • A tenant can include 50 production instances and 75 non-production instances
  • Each tenant is bound to the same region
  • You can ask Microsoft to create instances in different regions
  • You can only copy between instances in the same region
  • You can have multiple tenants, you cannot share anything between tenants
  • Each tenant is linked to a separate Active directory
  • You can enable Admin mode (Administrative Access) and only users with Administrator or System customizer security roles can sign in.
  • Administrative access will disable Asnc jobs such as Workflows, async plugins, service side sync)
  • You can only enable Admin mode on sandbox instances
  • You can switch a production instance to a sandbox instance
  • You can delete a sandbox instance
  • You cannot delete a production instance
  • You can reset a sandbox instance
  • You cannot reset a production instance
  • Resetting an instance wipes it clean, removes customisations, data, users, everything
  • You can copy an instance to a Sandbox instance
  • You cannot copy sandbox to production or production to production
  • The maximum data you can copy is 100 GB
  • Full copy copies customisation, data and users
  • Minimal copy copies customisations and users but not data
  • Reset an instance, deletes it and recreates it. This is useful to set the sandbox to a different version, free up storage space, delete the data

Storage

  • Storage is shared between all instances
  • If storage capacity is reached, new records cannot be created
  • Storage is connected to a subscription not an instance
  • You get a warning when 80 percent of storage is reached
  • You can add more email recipients to the notification list (e.g. partners)
  • You cannot reset a production instance
  • A new subscription will provide 10Gb of storage, a free sandbox instance, free portal
  • an additional 5Gb will be granted for each 20 full licenses purchased
  • You can see your Microsoft Dynamics licenses within the licenses option under billing in Office 365 admin
  • There is a limit of 30 TB
  • Dynamics 365 has a limit of 300 custom entities
  • default a Dynamics 365 Customer Engagement subscription will provide 10Gb of storage. Then an additional 5Gb of storage is automatically added for every 20 full users. (Team member licenses do not contribute to this increase.)
  • The amount of extra “free” storage is capped at 30Gb.
  • Additional storage can be purchased in 1Gb chunks. Up to a maximum of 5Tb of extra storage.

Updates

  • Updates become available twice a year
  • CDU – Customer driven update
  • You can skip one update but you cannot skip 2 in a row
  • The next update will be mandatory if you skip one
  • Patches will be released between major releases
  • Update emails are sent prior, during and after the update
  • Updates need to approved for each instance
  • Your instance won’t be updated without your approval. Unless the update is mandatory where it will be updated without approval (e.g. you must take 1 update per year)
  • You must be a Dynamics 365 System administrator to approve an update
  • When an update is approved, you can reschedule it as long as it hasn’t started
  • When an update has started the reschedule option will no longer be available
  • Four stages of an update
    • Queue (Not Started)
    • Backup
    • Restore
    • Database Upgrade

Notifications

  • You get notifications for
    • Service outages
    • 80% storage limit reached
    • Potential upgrades

SharePoint – Document management

  • SharePoint can store documents outside of Dynamics 365 and is a way to save space in Dynamics 365
  • SharePoint is server to server integration
  • All combinations of Dynamics 365 online/on premise and SharePoint online/on premise are supported

Microsoft OneDrive

  • 1TB of cloud space provided
  • You can share documents on OneDrive to provide a more private method of sharing, instead of the public SharePoint
  • You need SharePoint integration for OneDrive to work
  • You must be assigned an Office 365 licence
  • Dynamics 365 on Premise or on line
  • You must enable OneDrive for business in System settings
  • There is a security privileges called OneDrive for Business, found in in core records à miscellaneous privileges

Microsoft OneNote

  • OneNote is used to capture notes
  • OneNote integrates with Dynamics 365 and On premise
  • OneNote notebooks are stored in a SharePoint site
  • SharePoint integration must be enabled
  • You enable OneNote integration at an entity level
  • For enabled entities OneNote notebook will appear on the activity wall, after Notes

Microsoft Skype/Skype for business

  • You can configure which skype is used
  • It can automatically open when you click on a phone number

Office 365 groups

  • Shared workspaces for people to collaborate
  • It allows collaboration with Dynamics 365 and Office 365 users (who don’t have Dynamics 365 licences)
  • You need an Exchange Mailbox for each user that will use Office 365
  • SharePoint integration must be enabled for Office 365 Group users to view documents
  • Office Delve uses Machine learning to search all data (but not data held in Dynamics 365)
  • Delve can be shown in the Dynamics 365 as a dashboard
  • Delve dashboard cannot be shown on Dynamics 365 on premise

Dynamics 365 Apps

  • Apps allow you to edit the site map to only show certain entities, regardless of security role
  • Apps can be enabled/disabled for one or more security roles
  • Each App has it’s own URL
  • The apps suffix will work in the url
  • Users can navigate to the app from the menu
  • Apps only work in the web client
  • Apps can modulise the UI and provide a filtered view
  • Apps is another solution enabled entity
  • Apps can used Dashboards, Forms and views and Charts and Business process functions
  • App validation warns users on missing dependencies during app creation
  • App has a sitemap designer, which can be used by non-admin users
  • App Source allows you to find apps
  • Apps can add Site Map, Dashboards, Business process flows, entities (forms, views, charts)

Powerapps

  • PowerApps allow you to create no code apps
  • PowerApps can be built from templates
  • PowerApps can run in a web browser or mobile device (IOS, Android, Windows phones/tablets.)
  • To use PowerApps you need Office 365 or Dynamics 365 licence
  • You can access PowerApps from the app selector in Office 365
  • Powerapps is free of Office 365 and Dynamics 365 users
  • 2 Paid plans for PowerApps
  • Free PowerApps cannot use the common Data Service
  • 1 paid plan can use the common data service
  • 2 paid plan can model your data using common data service and enterprise grade admin
  • You can connect powerapps with 90 plus different services
  • You don’t write code but can use Excel like formulas
  • You can link PowerApps with Flow

Outlook integration

  • Dynamics 365 for outlook is installed on a users computer
  • You can track emails, appointments, contacts and tasks
  • Dynamics 365 for outlook allows you to work offline
  • Dynamics 365 for outlook supports 32 and 64 bit
  • Dynamics 365 for outlook works with Windows 7, 7 SP1, 8, 8.1, 10
  • Dynamics 365 for outlook works with Windows server 2012 and 2012 R2
  • Deploying can be done manually, command line, group policy, remote desktop, Microsoft System Center configuration manager
  • To track emails, the outlook email address must match the users email address in Dynamics 365
  • You can add multiple instances visible in Outlook
  • Only one instance can be a syncing instance
  • Offline data is stored on a local Microsoft SQL server express database
  • The offline data filters controls what data is downloaded to the users computer
  • You cannot add new field or custom field to the synchronisation settings
  • Dynamics 365 app for outlook
  • Dynamics 365 apps works online not on each users machine
  • You can track meetings and appointments not just emails
  • Dynamics 365 email templates can be used in the Dynamics 365 app for outlook
  • Dynamics 365 doesn’t have built in email functionality
  • Server side sync, integrates Exchange and Dynamics 365
  • Server side sync doesn’t need Outlook to be running
  • Server side sync talks direction with exchange and Dynamics 365
  • Incoming – None, Microsoft Dynamics 365 for Office outlook, Server side sync or email router or forward mailbox
  • Outgoing none, Microsoft Dynamics 365 for Office outlook, Server side sync
  • Folder level tracking will automatically track emails when they are moved to certain folders
  • You can link Exchange rules to move emails into folders and linked with Folder Level tracking
  • A limit of 25 rules/folders
  • You create folder tracking rules

Mobile Apps

  • Dynamics 365 for phones – uses the same forms as web applications
  • Dynamics 365 for phones – CRM onlines 2015 updates 1, CRM 2016 on premises
  • Dynamics 365 for phones express – CRM 2013 on prem, on line
  • Dynamics 365 for tablets – CRM 2013 online and on premise
  • Mobile apps are free for licenced users
  • Go to a form and click a field to set if a field is visible on the phone
  • Forms are used for both web app and mobile
  • Entity metadata has a checkbox – enable for mobile
    • Read only in mobile
    • Enable for mobile offline
  • 2 Security privilege restrict access Dynamics 365 for mobile and Dynamics 365 for phones express
  • Mobile security privileges are found in the business management section
  • All custom entities can be enabled for all mobile apps
  • Dynamics 365 for phones and tablets can make entities read only
  • Some system entities cannot be enabled
  • Tabs, sections and fields can be hidden from Dynamics 365 for phones
  • You cannot hide components (fields, sections, tabs) for Dynamics 365 for tablets
  • You can hide components for Phones but not tablets
  • Multiple dashboards can be enabled for Dynamics 365 for phones and Dynamics 365 for tablets
  • System or user dashboards can be enabled for phones and tablets
  • There is a dashboard property called Enable for mobile
  • You can only enable offline sync in a production instance
  • You need 5+ professional licences or 1 enterprise license
  • You need to create mobile offline profile, which defines what data is taken offline
  • You can define data to be download as My data, Teams data or business units data
  • You need to add users to a mobile profile and publish it
  • You can choose to set Synchronization conflicts

How inverting problems can help you become a better software engineer

“It is remarkable how much long-term advantage people like us have gotten by trying to be consistently not stupid, instead of trying to be very intelligent.” Charlie Munger
Not being an idiot is more effective than being a genius in most situations #HoskWisdom

The default approach is to find solutions to problems but instead of solutions to problems, invert the problem and stop doing things which make it worse.

Sometimes the best way to solve a problem is to avoid it and don’t waste time and effort on working on the wrong thing or heading in the wrong direction.

Developers

When software engineers start their career they suck, they have little knowledge, few skills, zero experience but lots of enthusiasm. Every task is hard because they don’t know how to do it, they don’t have the skills or experience.  Junior developers make mistakes and need help from their senior colleges.

Goal

Improve skills, knowledge and experience

Inverted Goal

Stop making mistakes (and slowing improvement)

The goal of a software engineer is to get better, by doing

  • Learn new skills
  • Gain knowledge
  • Write code
  • Make mistakes and learn
  • Watch videos

What if we invert the goal, instead of focusing on being good, the junior developer focuses on avoiding mistakes and getting worse.

  • Code analyser to catch bad code
  • Learn from mistakes and make sure you don’t repeat them
  • Get code reviews to catch badly written code

Avoiding mistakes allows new software engineer to pick up momentum and replace bad behaviors with good behaviours.  Doing stupid things slows your momentum because you need to undo the wrong action before you can move on to doing the right thing (warning, you don’t always know what the right thing is).

Avoid being stupid and doing stupid things instead of focusing on doing clever things.  Experience developers make fewer mistakes because they have learnt to avoid them, this results in steady progress which scrum masters and project managers love.

Improve by not making mistakes

Don’t  limit you stuff to just improving but focus on avoiding mistakes #HoskWisdom

The British cycling team lead by Dave Brailsford use this method to improve with marginal gains by looking for lots of small improvements.

How 1% Performance Improvements Led to Olympic Gold

Goal

Help the riders recuperate and get a good nights sleep

Inverted Goal

Stop the riders from having poor nights sleep

They wanted to improve the sleep of the riders when they sleep in hotels in unfamiliar surroundings and different beds.  To improve the sleep of the riders they inverted the problem by looking at what was making the sleep of the riders worse.  To improve the sleep the Sky team brought the riders own pillows to each hotel.  This improved the sleep by not making it worse.

Code

Inversion is used in code analyzers to improve the quality of code and teach developers to write better code.

Goal

The goal of code analyzers is to help developers create quality code

Inverted Goal

Stop developers from writing poor quality code

Code analyzer has rules, containing examples of bad code.  Developer runs the code analyzer it finds examples of bad code and raises a warning.  The developer fixes the problem, swapping poor quality code for better code.

Writing good code is avoiding writing bad code, swap bad habits for good habits and beat the suck.

We can use the approach to projects and the method to speeding up the project is avoiding slowing it down and targeting the bottle necks and processes which take a long time.

Making a project faster is avoiding slowing it down #HoskCodeWisdom

Bug fixing

We use inverted thinking many times as a developer and bug fixing is a good example.

Goal

The goal bug fixing is to find the problem and fix it

Inverted Goal

Confirm what works and narrow the causes of the bug

When bug fixing, forget what you think is causing the bug and prove what works to narrow the search for the problem.  Inverting the problem helps you rule out the working functionality.

Football

The goal of football is to win matches but for the teams in the lower half of the premier league they should invert this and make the goal to not lose matches.

Scoring goals is difficult and goal scorers, creative players cost more money and the lower teams cannot afford top strikers on their budgets.  If they focused their recruitment and training in not conceding goals, not making mistakes and trying to convert set pieces they have a higher chance of success.

Experienced managers such as Sam Allardyce, Tony Pulis successfully use this tactic by focusing on not losing.  Don’t lose the match and hope to win.  The opposition will make a mistake, your player will score an amazing goal or you convert a set piece.

If you don’t let a goal in, you can’t lose the match.

This article highlights the  difference between professional tennis players

Professionals win points where as amateurs lose them

Summary

Inverting problems helps you view a problems from different perspectives so you create incremental improvements.  Inverting the problem is a thinking tool to create innovative solutions and different solutions.Time spent thinking about a problem is time well spent.

Analyse the problem, invert the problem, come up with lots of solutions before picking the best one.  Make your plan and focus on execution. You can save time but avoiding mistakes or executing the wrong plan.

Following the wrong plan is heading off in the wrong direction to your destination.

I will end with this quote from Charlie Munger

 

Invert, always invert: Turn a situation or problem upside down. Look at it backward. What happens if all our plans go wrong? Where don’t we want to go, and how do you get there? Instead of looking for success, make a list of how to fail instead – through sloth, envy, resentment, self-pity, entitlement, all the mental habits of self-defeat. Avoid these qualities and you will succeed. Tell me where I’m going to die, that is, so I don’t go there. – Charlie Munger

Further reading

Extreme365 – Dubrovnik is going to be great

 

Great minds discuss ideas; average minds discuss events; small minds discuss people. Eleanor Roosevelt

Respect #extreme365, its thinking and learning time #HoskWisdom

 

Extreme 365 is going to be great with some interesting looking azure/cloud based presentations.  It’s good to stop working, rushing and reacting and think about Microsoft Dynamics 365, Azure and what the future has in store for the Dynamics 365 projects

Going to Extreme

The Extreme365 conference is on next week on the 19th March in held in Dubrovnik, an event aimed at Partners (3 days) and customers (2 days) featuring presentations covering Dynamics (CRM and Operations) and related services/technologies.

I attended Extreme 365 in Lisbon last year

Looking at the blog from Extreme365 – 2017, the tag line was “learn + connect = grow“, this year it’s Cloud and Azure focused

  • Microsoft Intelligent Cloud
  • Intelligent Business Cloud

Extreme365 – Dubrovnik has moved with the Dynamics industry, shifting towards Cloud, Azure and cognitive online services.

There is collateral on the page for Dynamics 365 (CRM and operations) and focus on features Azure services

The Dynamics industry is moving towards solutions using Azure services and framework, while leveraging congnitive services.

There is a shift needed by Dynamics professionals to stop doing what they have done for the last 5 years (creating solutions using Dynamics 365 plugins, workflows, etc) and move to solutions using Azure to do the processing.

Extreme365 – Dubrovnik will help me learn more the various Azure services, where and when to use them.

Capgemini team

Capgemini are a global team with Dynamics practices in 8 countries and the Extreme365 event offers a good opportunity to meet up.

  • Norway
  • Netherlands
  • India

here is a picture team from last year

You can learn more about the Capgemini Dynamics team from the UK who are going and what they are looking forward to seeing

What we are looking forward to at Extreme 365 — Dubrovnik

What to look forward to

You can see the full agenda here but here are some presentations I’m looking forward to

Some useful blog posts from Extreme blog

If you are going to Extreme365 please say hi to the Hosk, for those of you not going you can follow Extreme365 from your office by

 

Why developers should read books

Those who read, get better #HoskWisdom

Reading is to the mind what exercise is to the body – Joseph Addison

 

Yesterday was world book day  #WorldBookDayUK #WorldBookDay, its like an extra birthday for me because I’m allowed to buy a book without being told I already have mountains of books to read.  it’s a big event where children go to school dressed as their favourite characters (see mini Hosk’s above).

I believe people should read more books, I will outline the benefits of reading to try and persuade developers to pick up a book

Below are reading numbers, it varies between countries, ages and skewed by book worms.

The page from 2016 – How many books does the average person read

The average number of books each person read over the course of a year was 12…but that number is inflated by the most avid readers. The most frequently reported number was 4 books per year

 

This post from 2016 – How many books does the average British person read per year?

According to a YouGov survey, the mean number of books read for pleasure by adults in the UK is around 10 each year, and the median is around 4

 

The average person reads 4 books a year (I wonder how many they finish), an impressively low number when you consider the hours watching terrible TV or time spent on social media (I’m guilty of this too).

Why don’t developer read books

The common reasons developers don’t read are

  • People view books as old fashioned
  • They don’t want to invest the time to read a book
  • Easy to search for answers on the internet, you need not read a book
  • Many prefer reading articles
  • Developers watch videos on Youtube, DLP or Pluralsight, etc

Evidence for developers not reading books is in the number of books for developers.  Lots of people earn a living as a developer/software engineer but the number of books available is low.  Not many technical books sell in large numbers (this may be due to them degrading quickly with new versions of software etc)

Developers learn through trying to figure out problems and if they can’t resolve it they search for the answer on the internet.

stackoverflow.com was created because the creators felt developers were reading less, read about the concept here

Programmers seem to have stopped reading books. The market for books on programming topics is miniscule compared to the number of working programmers.

Instead, they happily program away, using trial-and-error. When they can’t figure something out, they type a question into Google.

 

Jeff Atwood of Coding horror blog (whose book I read Effective Programming: More Than Writing Code) has a good post  Programmers Don’t Read Books  But You Should 

Jeff mentions many technical books are poorly written, uninteresting loaf of bread sized beasts you can barely pick up let alone read.  You can skip the introduction chapter of most of them as they summarise the invention of a programming language or the internet.

Offices are littered with huge technical books squatting on developers desks either elevating monitors or with the goal of making the developer seem more knowledgeable.

You learn how and why

When you copy and paste code, a unicorn dies a slow painful death #HoskCodeWisdom

The common approach for developers is to get a task, search for the answer on the internet, copy the code and go onto the next task.

This skips the learning,  leaving the developer with the answer but not the knowledge and stops the developer from learning.  The approach is inefficient, the developer doesn’t acquire the knowledge to avoid trouble and only able to find solution to problems after they have arisen.  It’s difficult to search for solutions if you lack the understanding to diagnose problems, you can hit many dead ends before finding the solution.

With difficult problems with no solutions on the internet the developer gets stuck, not having the  knowledge or skills to resolve the problem.

Books give  you depth

I would never read a book if it were possible for me to talk half an hour with the man who wrote it – Woodrow Wilson

 

Reading a book is like conversing with an expert, a 1-1 with the best software engineer you have ever met.

Writing a book involves  thinking and writing deeply on a subject and putting their best ideas in a way the reader can understand them.  Focused concentration allows the writer to get deep into the subject and explain the why behind the subject.

Great programming books are popular and relevant for years because its not writing the code but the design, decoupling, SOLID Principles, design patterns, naming which are important to create simple code.  This advice will be useful as long as humans are writing code.

If you want to improve as a Dynamics developer read this How to improve as Dynamics 365 developer, it has links for designing and writing better code articles

Short cut to success

The misconception about reading books is it‘s a long process,  people don’t have enough time to read and it’s a slow method to learn.  Reading books allows you to learn from the experience, ability and ideas of a talented and experienced developer.

Reading a book is your will use the best practices the author has learnt and avoid the mistakes they made.  Reading a book is working smarter not harder.

Stop to think

Reading focuses your thoughts and your concentration on one thing. You benefit from authors ideas and overlay your experiences and thoughts.

Time spent thinking is never wastedit helps you clarify your thoughts and understand 

Ideas

Reading is useful tool to improving your knowledge and improve your craft.  You should aim to become craftsman, consistently improving your technique.

Are you a Dynamics Craftsman or a CRM developer?

Reading books on other subjects gives you a different view  of developing and helps you create new ideas by combining different ideas and concepts from other professions

If you worked with great developers you wouldn’t need to read their books because you could talk with them but for most of us reading a book is the nearest we can get.

Good developers read books

The best developers I have worked with read books because they want to learn.  A great way to learn is from someone who is an expert on a subject and reading a book is a method to access an expert.

If we encounter a man of rare intellect, we should ask him what books he reads – Ralph Waldo Emerson

 

CEO’s read 4-5 books per month according to the article – how many books does the average person read, lists of not technical recommended reading below and reading habits

If you need help to read more books these articles will help

What should developers read

If you want to read the impact on some of some CRM Development books had on the Hosk as a junior developer read this blog post

How to improve as Dynamics 365 developer

Everyone wants to improve but few want to put in the work needed to get better #HoskWisdom

Becoming a champion is not an easy process… It is done by focusing on what it takes to get there and not on getting there – Nick Saban

 

Improving as a Dynamics 365 developer takes dedication and persistence.  It takes years to build up your experience and knowledge but you can speed up the process by learning from the mistakes and experience of others.

This blog post my advice to Dynamics 365 developers who want to improve.  The core message of the post was written to a frustrated junior developer who wrote me an email simply saying “I want to stop making mistakes and get better, what is the quickest way to improve.”

A few posts improving and tips to improve, start by reading those

No shortcuts

Becoming a good Dynamics developer is difficult and takes time, which is why there are so few good Dynamics developers.

 No shortcuts to becoming an awesome Dynamics 365 developer 

It involves focus, effort and learning from your mistakes.  The more focus on improving the quicker you will improve.   It takes time for your skills, knowledge and experience to accumulate and learn from your mistakes.

Aim to finish work wiser about Microsoft Dynamics than you when you started.  Each day learn something new, improve your skills and reflect on your experiences

If you want to be a better coder then commit to being better and start being a better coder now #HoskCodeWisdom

There is no shortcut, only time and dedication.  Warren Buffett talks about Charlie Munger and his focus

“Charlie, as a very young lawyer, was probably getting $20 an hour. He thought to himself, “Who’s my most valuable client?” And he decided it was himself. So he decided to sell himself an hour each day. He did it early in the morning, working on these construction projects and real estate deals. Everybody should do this, be the client, and then work for other people, too, and sell yourself an hour a day.”

Enjoy being a Dynamics developer

 “You must understand the following: In order to master a field, you must love the subject and feel a profound connection to it. Your interest must transcend the field itself and border on the religious.” ― Robert GreeneMastery 

 

If you don’t enjoy Dynamics development you will find the work boring and the days long.  If you are not passionate, you won’t care enough and you devote the time needed to improve.

Want to improve

Development is difficult but rewarding when you do it well #HoskCodeWisdom

Improvement comes from within, it‘s a desire to get better.  You need a passion for development, keep motivated, know why you want to improve if you don’t have a good reason you will give up.

It’s a slow process of continuous improvement, end each day learning something new or improving skills.  This is sucking less each day.  Junior Dynamics developers struggle with the limitations of Dynamics 365 functionality, often creating a customisation only to find due to a limitation the solution won’t work.

Why .NET developers struggle with CRM Development

A student mindset uses opportunities to learn and improve,  the more experience and knowledge you build the fewer mistakes you make.

“Most people don’t have the patience to absorb their minds in the fine points and minutiae that are intrinsically part of their work. They are in a hurry to create effects and make a splash; they think in large brush strokes.

Their work inevitably reveals their lack of attention to detail – it doesn’t connect deeply with the public, and it feels flimsy.”
― Robert GreeneMastery

Visualise your day – plan your day

What will you check? What processes will you follow?  When visualizing the perfect day, remind yourself how you should do everything.

Plan your day, make sure you tackle the important tasks and don’t be reactive to change via email or requests.  Developers need to concentrate and focus on one task, avoid switching between many tasks and losing time through switching.

Don’t let email push low priority tasks to the front of the queue,  Email tasks can be the tasks which shout the loudest but the task you do next should be the most important.

Reflect

Learn from your experiences, review your mistakes you and avoid repeating them.  Inspecting how you work and adapting, keep improving.

Learn from your mistakes, identify patterns, catch yourself from being busy but not productive.

The person who doesn’t learn from their mistakes, repeats them.  Don’t waste your experiences, make the most of them.

Start with the SDK

The CRM SDK is the main tool for a CRM developer, the better a CRM developer knows its capabilities, limitations, and documentation the better they do their job.

Every time you don’t understand something, read the Dynamics 365 SDK, understand it, master it.

Improve code quality

Read Clean Code: A Handbook of Agile Software Craftsmanship.  To write simple code you need to understand design principles are important, they decouple code and avoid making code brittle.

Brittle code with large methods is hard to read and breaks.  When you change one line of code ,it breaks other unrelated parts of the code.  Controlling dependencies and decoupling code allows you to manage the effects of change.

Naming is important, go back over your code and get the names of variables, methods and classes correct.  Like writing a book, developers never give the best names in the first draft, it‘s important to edit, refactor and refine your code.  The first draft gets it working, further drafts are to simplify and improve readability.

Design code

Don’t just write code. Think about it, design it, write it, refactor it, be proud of it #HoskCodeWisdom

Before you start typing, spend time designing your code, find classes and abstractions.  Designed code is easier to read, debug, reuse, unit test, maintain and extend.  All code has an impact, well-designed code minimizes the dependencies

Understand SOLID principles

SOLID principles are the building blocks of good code.  You will produce better quality code, fewer dependencies, and fewer problems later.  SOLID principles help developers recognise good code.

Help yourself

Don’t suffer in silence and sit frozen in front of the code, don’t waste time not making progress.  Don’t look give me the answer, I want to be pointed in the right direction.  Software development has lots of dead ends where to solve a problem you must rule out options and clarify assumptions.

Resolving your own problems is time-consumingbe pragmatic and know when to spend the time learning it yourself and when to get help.

A useful tool is to describe my problems to a toy/cardboard developer,  explaining the problem to the toy and myself I can uncover the solution and I avoid wasting other peoples time.

Why all developers should be friends with a cardboard developer

Understand how Dynamics CRM works

He who knows the most, get’s paid the most #HoskWisdom

Take every opportunity to understand how Dynamics 365 works. A greater knowledge of Dynamics 365 allows consistent choice of the right customisations and enabling quicker trouble shooting.

Dynamics 365 error messages point you in the right direction

Seek out what you are weakest

Improve knowledge and skills, build up your experience.  Don’t hide from these, focus and improve.  Use weaknesses and mistakes as triggers for learning.

Its better to learn functionality before it’s needed on a customer project, where the pressure is on and deadlines are looming.

How to cope when you are out of your Developer comfort zone

Learn from colleagues

Fellow developers are walking, talking troves of knowledge and experience,  learn from their experience.

Colleagues might be useful sources of knowledge but don’t ask them for help without trying to solve problems yourself.  Solving problems yourself gives you the solution and the learning.

The goal is to create customisations delivering the required functionality but it‘s the journey which improves your skills.  Create customisations and get senior developer to ratify your solution.

All developers have tips, tricks and shortcuts which can help you, if you ask and talk to them.

Write unit tests

Know how are you going to test the logic of your code, understand every line of code is doing what it should.

Test your code with unit testsit‘s best practice and encourages you to write decoupled code which is easy to unit test.

A good framework is Unit Testing Microsoft Dynamics CRM using FakeXrmEasy Framework

At Capgemini we structure plugins to separate business logic and repository layer (CRM SDK CRUD) to make testable.

Unit tests are a vital part of emerging code design 

When manually testingDonjust test the happy path

Talk Dynamics 365

Talk Microsoft Dynamics 365 with your colleagues and you will learn something or at worst give information to someone else.

Share knowledge with the team and work together to create a broad knowledge of Dynamics 365 bringing in your differences experiences and thoughts.

Be organised

Don’t waste time looking for files, projects and code.  Be professional, be organised and minimise distractions.

Get Certified

Certifications gives a more rounded and in-depth knowledge of Dynamics 365.  Investigating functionality in Dynamics 365 which they no practical experience of.

Dynamics 365 is the developers main tool, they should know it inside, outside, up and down.

Studying for Dynamics certifications helps to understand the limitations of Dynamics 365 functionality.  Limitations are key factors when deciding the right customization for a requirement.

Average is not good enough

Developer skills are like a snowball, they start off small and quickly pick up speed as your knowledge and skills grow #HoskWisdom

Don’t do average work, do great work.  Customers and other developers can quickly tell if someone is delivering quality work.  Good developers code works well and anticipates the needs of the users, it contains fewer bugs and when bugs are fixed they don’t bounce back.

Developers who work too quickly often don’t fully understand the requirements, don’t clarify them and deliver what they think the users want.  The code contains assumptions and bugs and never seems to be finished

Deliver code you are proud of

Don’t put non-supported customisations

If you write unsupported customisations Microsoft will not support your Dynamics 365 customisations.  A detailed explanation below

Why you shouldn’t put unsupported customizations in Microsoft Dynamics CRM

Know why things are not working

Errors and functionality not working is an opportunity to learn.  Don’t just find the solution on the internet, make sure you take the time to learn what the problem was and how/why it’s fixed.

Microsoft Dynamics CRM not working? check these common causes

The next problem you might get could be different and the better your understanding of Dynamics 365 the quicker you will be able to diagnose the problem.

Read CRM blogs

There are lots of great Dynamics 365 blogs which will help you keep up to date with the latest functionality in Dynamics 365, you can find a great list of them here

https://community.dynamics.com/crm/b

I also recommend follow these hashtags on twitter

  • #MSDYN365
  • #Dynamics365
  • #HoskWisdom and #HoskCodeWisdom 🙂

Finally here are some of my other favourite blog posts I have written