In terms of the universe, we're all alive for a relatively short-period. There's a big difference to your happiness, sanity, and self-esteem from working on a cool project and working within some nightmare organization where things get so bad you can't sleep and spend all night raging about how your boss or client is an idiot who has some massive injustice against you.

Over the years I've worked on both sides of the coin. In that time I've seen a pattern between the good projects and the bad ones. When I interview for roles I even ask some of these questions and at certain times I've turned down places as they haven't met my criteria.

In today's article, I'm going to explore and cover some of these insights, to hopefully make your working life a little easier when it comes to working Umbraco, so let's get started.

Put together the right team

As someone who frequently works with a lot of different teams, by far the biggest human element of getting a project done smoothly is the team you work with. This cannot be understood enough and getting a good team is an art form in itself. It's probably more common to be forced to work with people you can't choose yourself. Some will be good, some bad. Some will know how to write testable code; if you ask some people what SOLID means they will look at you open-jawed with drool coming out their mouths.

From my experience, there's a noticeable difference in team performance when you have a capable team, compared to a team of people who need spoon feeding. For most people reading this, you won't be able to change your team, so I'll move on, however, if you can have some control in this area, getting the right people, who you get on with is the biggest thing that will affect the project.

Automate Manual Tasks

This is probably the biggest time saver you and your team can implement, but it's one that most companies don't bother with. We are all human, we all make mistakes. When it comes to releasing your Umbraco website, if you have to manually make config changes on a server, or, manually copy files to your live website, it's only a matter of time before things go wrong and you waste a day or two fixing stuff.

On some projects I've worked on that didn't implement continuous integration, I've seen hours and hours of man-days being wasted just deploying websites. I read Henry Ford's auto-biography recently which was written over 100 years ago. In his production line, he was busy automating and fine-tuning his production methods, as he knew that any process that could be automated and improved would lead to massive improvements in his cars. Why 100 years later people still doubt the same principle about continuous integration I'm not too sure, however, out of all my tips this is one thing I recommend you do.

Ensuring that all your website's config is in source control, its quick to deploy and repeatable should be an essential task on your project. How to do this with Umbraco is probably outside the scope of this article, however, with hosting options like Umbraco cloud - which cost as little as $25 a month - with a little bit of research it really is super simple to get up and running. It just takes a little up-front effort. The more parts of your build that you can automate and the less manual steps involved, the smoother your project will go.

Critical Tasks First

I think all of us have a tendency to try and put off the difficult stuff. There are whole books written about the subject, like Carl Newport's book Deep work. Not all tasks are created equal. Not all tasks have the same difficulty level.

At the start of any project, work on the tasks that you have no idea how to solve first. If you bury your head in the sand and leave them to last, all you're doing is adding massive risk to your delivery date at a late stage of the project. I'm a big fan of agile and not re-designing the entire website at the start of the project, but, usually, it's pretty obvious what the, ewww, this bit is going to be bullshit tasks are.

Unit Testing

I won't go into this one in too much detail as I'm hoping its obvious, however, when you build a website write unit tests.  if you haven't done it before, why not give it a go?

Checklists Are Helpful

Usually, at the end of the project things can get a little crazy and hectic.  It's at these times that you don't want to make mistakes, but, in the panic, the likelihood of making mistakes is at it's highest.  As most projects are semi-similar it's good to have a go-live checklist that you follow.  If you want some ideas of things to include in your checklist, I've written a free guide, Ultimate Website Checklist, which is available here.  All you have to do is trade your email to get access!

Create a realistic schedule (but pad it just in case)

Read any book on estimating and I'm confident that the majority of them will state, as humans we generally tend to be terrible estimators. Have you ever said, yep, that's a 10-minute job and it's taken half a day? When you come to planning on your project, be aware that you will underestimate.  To compound matters, the client will also want you to deliver something ASAP so there's always a lot of pressure to under underestimate and give a short deadline.  From my experience, people generally put a lot of pressure on you at the beginning of a project to set an unreachable goal at the start of the project, then they'll be the first people to complain when you don't meet it.  When deadlines come, people tend to forget all the advice you gave at the start of the project.

You will be the one who is expected to work late, or weekends to keep up with this unrealistic estimate. The more you can push back on timescales, the happier your life will be. However, if you get more time, that's not an excuse to sit back and do sod all. This is why sprints are so useful, as it helps keep your team moving forward with good momentum.

Testing Environments Should Mirror Your Production Environments 

If you haven't read the Phoneix project, or the DevOps manual then I recommend giving it a read, one tip from the book is that a lot of software projects fail, as the first time developers can test things accurately is when the codes have gone live.  This obviously causes lots of troubles.  If you want your project and your releases to go smoothly, you need to ensure that the thing you are testing on, is exactly the same as the thing that will be live.

Embrace this handful of practical tips and trust me your Umbraco projects will be easier and a lot less pain-free.