Recommended reading for software engineers

In my whole life, I have known no wise people who didn’t read all the time – none, zero. Charlie Munger

Books allow you to delve deep into a topic, stop focusing on doing and think about your situation, your approach and effectiveness.  Spending time on design before writing code creates better quality code, thinking about how you code, run a scrum team, deliver a project, work with people helps you do these things better.

Reading a book is conversing with an expert on that subject, you learn from their mistakes, success and experiences.  You get that knowledge and apply your adventures and conclusions on top.

Read why developers should read books if you are still not sure. If you don’t like reading it’s because you haven’t found a good book but you have come to the right place.  Those who read books, get wiser.


Coding is a fundamental skill software engineers should try to master.  Improving your coding will have a significant impact on your career.

It shocks me the number of developers who don’t learn how to design, write, test and refactor  code to a high standard.  They are paid cash money to write code, so be an expert in it.   Not being a great coder is like a chip shop that doesn’t make tasty chips, it makes no sense.

Let’s start with books to make your code shine brighter than a full moon

Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin)

I love this book, it’s short, concise and focuses on the fundamentals of coding.  Every developer should read this book and earlier the better.  Master the fundamentals and you have a solid foundation to build on

Code Complete (Developer Best Practices – Steve McConnell

This is a monster of a book at 960 pages and it goes deep into the details of coding.  When you read a chapter on how to write a method, it helps you realise the skill that top programmers have.

The Pragmatic Programmer: From Journeyman to Master

Great advice for programmers with common sense, down-to-earth advice.  Less technical than Code Complete but still a great book.  Everyone software engineer who reads this will learn something, it improves your code and your approach.

The Art of Unit Testing: with Examples in .NET

Unit testing is an art, you need to write your code in a testable way but writing unit tests isn’t straightforward but it reduces the feedback loop, allowing the developer to test their code.  Unit testing is something you should master and this book will help.

Head First Design Patterns

This helped me understand Design patterns, I still admire the simplicity of well design code and the patterns featured here are beautiful.  Design patterns are great for seeing examples of well-designed code and giving you a common language to use with other software engineers.

Design patterns are common solutions to common problems, it’s worth the time to read up on them.  Without unit tests changing code becomes risky because without unit tests you can’t be sure you have not broken any code.

Refactoring: Improving the Design of Existing Code

All software engineers will spend time on legacy projects and looking after other developers dodgy code.  This book gives you a way to bring order to a legacy project and improve it.

Projects, Scrum and People

The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win

A story about a company who bring DevOps into their business, solving problems and adding drama with characters.  It’s useful to view a project from a different perspective because most people see little in their own projects because they are so focused on delivering the project.

The Inmates Are Running the Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity

An interesting look at the insanity of IT Projects, teams, offices and all aspects of being a software developer.  You may have had an inkling you must be mad to be a software developer, this book will help you understand why you feel that way.  It’s funny and enlightening.

Scrum Mastery: From Good To Great Servant-Leadership

Scrum and agile is a tool, it’s great or terrible depending on who is using it and it won’t be going away soon.  They will use it on many projects you work on, so spend time on understanding how it works and the theory behind the concepts.

Agile projects done well are effective and enjoyable to work on but few people understand the theory behind Scrum\Agile.

Read it, master it, it will help you deliver scrum/agile projects to a high level.

Radical Candor: How to Get What You Want by Saying What You Mean

The driving force behind any project is the people on it.  If you lead anyone, then this book will help you be honest with them and work more effectively.

Never Split the Difference: Negotiating as if Your Life Depended on It

This book contains great practical advice for communicating with people and using emotional intelligence.   The writer was an FBI hostage negotiator, so has experience dealing with pressure situations.  This was my favourite book from 2018.

Mastery – Robert Greene

This book gives many examples of people who devoted their lives to mastering something, it’s inspirational and motivating.

Being a software engineer needs people to master it with constant improvement, study, reflection.

Other recommended reading lists

Time is not wasted if you are reading a book

We are all beta testers for Microsoft Dynamics 365

Working with Microsoft Dynamics 365 is often painful but always exciting #HoskCodeWisdom

Microsoft Dynamics 365 version 9 has seen a lot of bugs in Microsoft Dynamics 365, particularly an increase in bugs in the core functionality, not just new functionality.   I have heard a few Dynamics professional say

“We are beta testers for Microsoft Dynamics 365”

What’s happening and why is it so bad

This is my opinion with no evidence to back this up apart from talking to other Microsoft experts and my experiences.  Before Dynamics 365 was rebranded e.g. Dynamics CRM 2016 and before, there would be a few bugs with new features (which we all know to never use a first version e.g. Microsoft Dynamics Marketing)

In version 9 I have seen lots of bugs, obvious bugs, solution bugs.   I wondered if it was just my bad luck but speaking with other Dynamics professionals they have seen an increase in bugs.

Some bugs I have had the pleasure of in 2018

  • Auditing broken
  • lookups have no names
  • Importing solutions times out
  • holding solutions broken and get stuck (breaking other imports)
  • adding visuals breaks solution import
  • Microsoft minor updates creating dependencies
  • minor update stops solution being imported with duplicate guid
  • Problems with performance and scale groups
  • memory leaks in web servers
  • Microsoft adding dependencies in minor patches – When a Patch to Microsoft Dynamics 365 can break your instance
  • Microsoft adding functionality into Case management and breaking solution imports
  • Microsoft updating instances slowly, stopping up solutions being imported between Dynamics 365 environments
  • Dynamics instances getting stuck, disappearing or being unusuable

What might have caused this?

The direction of Dynamics is to move to business applications, take the processing out of Dynamics and put it into Azure via

  • PowerApps
  • Flow
  • Logic Apps
  • Azure functions
  • Azure WebJobs

Dynamics 365 is one part of the solution and integrated with many services. Processing should be moved out of Dynamics to reduce load on Dynamics and move data out to store it where it’s cheap (e.g. not in Dynamics 365 where it’s expensive)

To do this, Microsoft needed CDS (common Data Service) to be easy and affective to use. I have always thought of Microsoft Dynamics as a GUI front end to a database and a framework to trigger customisations.

Now CDS is a blank Microsoft Dynamics 365


To decouple the default functionality of Sales, Marketing and case management, Microsoft needed to recreate these to use standard and supported solutions. Trickier than you would think because the functionality was created using unsupported customisations because supported customisations couldn’t do.

This explains why the CRM 2011 screens have been sitting in Dynamics 365 for so long, Microsoft couldn’t take them out without rewriting all that unsupported functionality (naughty Microsoft).

Microsoft have recreated the functionality with supported customisations (so they could decouple  it). They needed to create the custom control framework and other cool stuff to do this but they have finally got there.  This will be great once they give us a tool to edit the custom controls.

I like the ability to import Sales, Marketing, Case management solution only if you need them, if you are using Dynamics 365 CE as an XRM framework you can now remove those unwanted dependencies.

This rewrite has caused many bugs but I see this is short-term pain for long-term gain.

Microsoft has moved to Azure SQL and moving from SQL server to Azure SQL caused a bunch of problems no one expected.


We got a bug which was reported as fixed,  we tested it and found it wasn’t.  After some investigation the support analyst told me the developer had forgot to check the code in. How did this get reported as fixed?


Microsoft has fully moved Dynamics 365 to Azure, they are the largest service on Azure,  they are eating their own dog food. This added infrastructure problems to compliment the bugs it added to the system.


The move to Dynamics 365 online has picked up speed, now all customers want to use Dynamics 365.  This means we are getting different projects, doing different things and find different bugs.   The number of projects, type of projects and crazy things developers are doing with Dynamics 365 online has exploded.

Devops and automation

Best practices like DevOps and automation are being brought to Dynamics projects.  This is finding problems not identified before or seen before.

Will it get better?

I read this article about how they build windows 10 and I’m guessing Dynamics does it a similar way

The one version is coming – The new Microsoft Dynamics 365 release schedule is coming and with this Microsoft are moving to a continuous release cycle and a greater testing.

New Dynamics 365 fixes will be tested by Canary (early release) organisations and smaller regions (sorry smaller regions, the need of the Europe and America is greater than the need of everyone else). Everyone will be on the one version which means more testing will be done on the one version.

Microsoft have just persuaded all Dynamics production instances to test it for them or risk breaking their production instance on upgrade.


Microsoft has put the pressure of testing earlier onto its customers, accepting the latest major release is not optional and cannot be scheduled. Companies will have no option but to test the new release in a sandbox instance. The one version (to rule them all) should lead to greater automated and manual testing from Microsoft and all its Dynamics 365 customers, this will find bugs faster but will leave the question on how quickly can Microsoft fix and release these fixes.

Features can be turned off, you can avoid using them until they work 

Microsoft are improving the monitoring and proactive fixing and self healing of Azure resources.  Proactively finding problems with customer Dynamics organisations and send them advice. Microsoft will release a tool to check solutions, which does static checks on code to find poor performing code.

The move towards the one version of Dynamics could initially be painful but will improve Dynamics 365 in the long term. Microsoft seem to making the right noises about moving toward continuous deployments, mentioning automated testing and other improvements should help.

The windows development post ends with a good quot

Adopting the principle that the Windows code should always be shipping quality—not “after a few months of fixing” but “right now, at any moment”—would be an enormous change. But it’s a necessary one. Microsoft needs to be in a position where each new update is production quality from day one; a world where updating to the latest and greatest release is a no-brainer, a choice that can be confidently taken. Feature updates should be non-events, barely noticed by users. Cutting back to one release a year, or one release every three years, doesn’t do that, and it never did. It’s the process itself that needs to change: not the timescale.

Embrace it

What I have always enjoyed working with Dynamics is its attitude to change. Microsoft add new services, new tools and new everything. It’s often painful, but it’s always exciting.

Future projects will look nothing like the projects you have been creating for the last 5-10 years and we are all going to need to learn the limitations and best practices. You will laugh, cry and scream with frustration but hopefully not every day.

Other interesting articles

The future of Microsoft Dynamics 365 projects
Will development move towards no code solutions?

Hosk’s recommended Dynamics 365 and other articles December 2018


Mediocre people don’t like high achievers, and high achievers don’t like mediocre people.  Nick Saban

There is no such thing as requirements so clear that no developer could misinterpret them

Articles of the Month


Great Dynamics 365 articles this month



The Hosk – currently reading

The Hosk – last 5 recommendations

Selected  HoskWisdom

  • All future development roads lead through CDS, PowerApps and Flow. So start heading in that direction now
  • IT projects are not about delivering technology they are about enabling users
  • Too many workarounds never get done properly
  • Code is as complex as you make it
  • Life is too short to write bad code
  • Writing good code is like being sexy, if you have to tell people you are, you aren’t
  • No matter how bad things get, you can always refactor them
  • If you want to do well as an individual, you have to work well in the team
  • There is nothing more persuasive than the other person thinking it’s thier idea
  • Life is short and should not be wasted doing boring work

Last months Monthly articles

Last months recommended monthly articles

Hosk’s CRM Developer Articles

A collection of my favorite CRM Developer articles I have written

Dynamics professionals salary survey 2018 and other stats

Developers aren’t free because they need money and we need work #HoskCodeWisdom
Effort is the price, experience, knowledge and skills is what you get #HoskCodeWisdom

The start of the year is a trigger for people to reflect on their career, goals and happiness in their current role.  The Nigel Frank Dynamics salary survey is a tool to help you understand if you’re paid the market average and other information about Dynamics professionals.

Companies employ many Dynamics professionals but the reality is you work for yourself because people rarely work for one company their whole career.   You should make sure you being paid the market value.

You can download it here Dynamics survey, I have highlighted some interesting facts below but it‘s worth reading the whole survey which contains details about

  • Average wages dependent on country and role in the Dynamics ecosystem
  • Workplace diversity
  • Benefits and retention
  • Microsoft certifications and experience
  • Job satisfaction
  • Top benefits of Microsoft Dynamics product
If you want to see trends over the last 4 years you can read previous posts on the salary survey


Money should not be the key driver for moving jobs but make sure you are being paid your worth.  Use the average wage statistics to assess if they underpay you, take into your yearly review, tell your manager you are not being paid the market rate and ask what can they do?

Knowing the average wage for your role and experience helps you negotiate in your current role or a new job.

Wages should be based  on the industry average not an increment of what  you were previously paid

Why do people move?

  • 57% lack of salary increase
  • 54% lack of career or promotion prospects
  • 49% Needing a new challenge
  • 36 Lack of leadership and vision

46% are considering moving in the next 12 months, 17% not sure.  This might be due to the increased head hunting by recruiters on LinkedIn.  People who are not looking for jobs might be tempted if jobs with higher salaries keep being sent to them.

Recruitment has changed, people are applying to job adverts less and being head hunted more.

This post will help you evaluate different job offers.

How to evaluate job offers for Microsoft Dynamics 365 roles

Money and moving roles

It’s common to say you shouldn’t move for money but why?  Money isn’t a motivator because after a few months the more money it will stop making you feel happy.  Getting paid more does‘nt  make you enjoy your job or the company culture more.

If you consider your own career, you will have progressed to a more senior role and get paid 2 or 3 times the wage you started on but are you 2 or 3 times happier now?

Those who move jobs for money, lose motivation once used to the new wage.  Money is a problem when you don’t have enough.

if you decide you want to change job  to further your career, go to a company that shares your values or move to a new role which can further  your career.  Think about the things that can improve your job

  • Company culture
  • Training
  • Career progression opportunities
  • Getting new skills
  • Role

 Dynamics 365 professionals UK 2018 salary

Below are the average wages for Dynamics 365 CE professionals in the UK, you can see here Nigel Frank salary survey 2018


Dynamics 365 professionals who are certified get paid more than Dynamics 365 professional who are not certified.  I have benefits of Dynamics certifications before the message is clear

Get certified and get paid more


The benefits and rewards are not just financial, consider other benefits when you are negotiating new roles and your yearly review because there might be more flexible with benefits.

The other consideration is the benefits could have a more positive effective on your job satisfaction and life.  Working from home an extra day from home could have a positive affect on your work/life balance.

Interesting facts from this years report

  • 68% of respondents said they are happy in their current role but are open to new opportunities
  • 82% of respondents who have experience with Dynamics 365 said they would recommend it to others
  • 54% of respondents have a Microsoft certification with 61% holding a Business Applications certification
  • 61% of Partner respondents reported an increase in workload over the last 12 months, up 3% from 2017
  • 56% of respondents believe years of experience in Dynamics had the greatest impact on earning potential
  • 68% of respondents said they are happy in their current role but are open to new opportunities
  •  Only 53% of respondents believe their employer pays men and women equally.