In terms of the universe, we are all alive for a relatively short period of time. This means we need to maximise our lives. There will be a big difference to your happiness, sanity, and self-esteem when you are working on a cool project compared to working within some nightmare organization where things get so bad you can't sleep at night because you are mentally raging about your boss or client. Over the years I've worked on both good projects and nightmare projects. In that time I've seen a pattern between the good projects and the bad ones. In today's article, I'm going to explore and cover some of the insights I have learnt from working on both good and bad Umbraco projects.
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. I cannot state this enough. Building 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 of these people will be good, some bad. Some will know how to write testable code, however, if you asked others 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 not focus on this area in this article. 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 project success.
Automate Manual Tasks
Getting a good Ci/Cd pipeline is one of the biggest time-saving techniques that you and your team can implement, however, it's one that most companies don't bother with. We are all human, we all make mistakes. If you have to manually make config changes on a server, or, manually copy files to your live website when releasing your Umbraco website, it's only a matter of time before things go wrong.
The projects that I have personally worked on that didn't implement continuous integration have been painful. I've seen countless hours of man-days lost just from deploying websites and running regression testing. 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 would lead to massive improvements in his cars. Why 100 years later people still doubt the same principle blows my mind. Out of all the tips in this article, this is the one actionable thing that needs to be a must on your Umbraco project.
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 with a little up-front effort. The more parts of your build that you can automate, the fewer 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 redesigning the entire website at the start of the project, but, usually, it's pretty obvious what the hard parts of the system will be.
I won't go into this one in too much detail as I'm hoping it's obvious, however, when you build a website write unit tests. If you have to regression test a website before each release you will be limited as to how fast you can move. 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.
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 it comes to planning your project, be aware that you will underestimate. To compound matters, the client will also want you to deliver something ASAP and the quote needs to come in under budget. This means there's always a lot of pressure to 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 deadline. These people will be the first people to complain when you don't meet them. You will be the one who is expected to work late, or at weekends to keep up with this unrealistic estimate. The more you can push back on timescales, the happier your life will be.
Testing Environments Should Mirror Your Production Environments
If you haven't read The Phoenix Project, or, The DevOps manual, I recommend giving both a read. One takeaway that I made from the book is that a lot of software projects fail if proper testing can only be done in life. This obviously causes lots of trouble. If you want your project and your releases to go smoothly, you need to ensure that you have like-live environments to test against. You need to make sure 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. Happy Coding 🤘