When you look back at a project and you think about what you could have done differently, you should write these down and look at them before you start the next project so you don't do the same again.
In this post I share some of the lessons I've learned in my career when delivering software.

1. Don't over promise and under deliver.

If there is a chance you are going to miss a deadline, you should let your boss or the client know as soon as possible. If they know in advance, they will appreciate the warning and may be able to agree a new deadline. If the deadline can't be moved you may be able to get extra resource to help. This is far easier and less stressful when you know in advance rather than too close to the deadline.

2. Spend more time in the planning phase.

People dive in to writing code too soon on a lot of projects because they are eager to get going. You should make sure you have all of the requirements, functional spec and diagrams completed and signed off before you write any code. Learn more about this in my other post 7 vital steps for delivering a successful software project.

3. Allow more time for testing.

When a project is overrunning, one of the first casualties is usually testing. This is bad because it is harder to fix bugs in a live project than when it is in the development/test environment. Set aside plenty of time for testing and fixing the bugs found in the testing.

4. Keep track of how long things take.

When it comes to quoting for jobs you will struggle to estimate how long it will take unless you have recorded it for similar jobs. One step further would be to track how many pomodoros it takes to complete a task. Learn more about this in my post about The Pomodoro Technique®.

5. Avoid shiny toy syndrome.

When deciding what technology to use for a specific project you need to avoid choosing something just because it is new and you are looking forward to trying it out. Make sure you do your research and use the right tool for the job. If the right tool turns out to be the shiny new tool then great, otherwise you will probably find the quickest and most appropriate one is probably the one you've used many times before.

If you have any lessons you have learned, please add them in the comments.

Paul Seal

Umbraco MVP and .NET Web Developer from Derby (UK) who specialises in building Content Management System (CMS) websites using MVC with Umbraco as a framework. Paul is passionate about web development and programming as a whole. Apart from when he's with his wife and son, if he's not writing code, he's thinking about it or listening to a podcast about it.

Proudly sponsored by


  • Moriyama build, support and deploy Umbraco, Azure and ASP.NET websites and applications.

  • CI/CD service for Windows, Linux and macOS
  • Build, test, deploy your apps faster, on any platform.

  • Custom stickers for startups, artists and brands.
  • Bespoke easy-apply, removable, custom brand stickers printed in the UK.

  • elmah.io is the easy error logging and uptime monitoring service for .NET.
  • Take back control of your errors with support for all .NET web and logging frameworks.
uSync Complete

  • uSync.Complete gives you all the uSync packages, allowing you to completely control how your Umbraco settings, content and media is stored, transferred and managed across all your Umbraco Installations.

  • More than a theme for Umbraco CMS, take full control of your content and design with a feature-rich, award-nominated & content editor focused website platform.

  • Affordable, Geo-Redundant, Umbraco hosting which gives back to the community by sponsoring an Umbraco Open Source Developer with each hosting package sold.