I think this is why having real-world experience in non-programming realms is valuable. When your life has been on the line in some physical adventure, things like pushing to production are easier to keep in perspective.
I have run in the woods with bears, climbed steep and sketchy mountains, rock climbed, tried hang gliding and paragliding, kayaked in rough waters. Most of that was quite safe, with well-qualified people, using the right equipment, with the right training and with the right progression of risk. That said, I have definitely held my life in my hands a few times,put my life in others' hands, and had other people's lives in my hand.
When you've had these experiences, technical risks are easier to manage. They don't become easy, but you go through the same mental checklists. "Can I close my eyes and pull my kayak skirt off if I flip in these waves" becomes "have a followed my backup routines, so if this push fails will I be able to recover in a reasonable timeframe?"
I've been a hobbyist programmer for most of my life. But now I'm dabbling in more meaningful and important projects. This is the perspective that makes me comfortable jumping into technical projects, without being paralyzed by the fear of breaking something important.
As an old co-worker used to say, "We're not saving lives, we're just building websites." I don't care how much money your site loses per minute its down, or how bad your company looks because you lost some of your uptime stat. Its a far cry from someone dying because of what you did.
I still get nervous, but I've learned to manage it.
Some things that help:
- Keep your changes small. You should be able to fit the entire diff in your head and completely understand the purpose for every changed line. If you can't, split it up.
- Automate the process as much as possible. Invest in learning whatever tool works best for you (Fabric, Rake, Grunt, etc).
- Use a staging environment. This is especially helpful for catching issues like missing dependencies, DB migration problems, etc.
More so recently because I'm working with more complexity now: an inexperienced team on top of a code base being shared among 2 teams. Ultimately, you have to counter your fear with preparation to reduce the risk of something going wrong. We use Jenkins CI for running unit tests and doing deploys to a sandbox environment similar to production. However, I have to additionally review my team's diffs to catch problems that were missed by automated tests not being written or by requirements / design being wrongly interpreted.
So I guess the goal is to improve the preparation of a production push.
I was scared in the last email I sent to over 30 people. Like /u/taternuts said, you have to be a little scared. But yes, you will get over it, but if it's a big push to prod - you will still be scared.
Yeah, I used to lose sleep over it. Now I've got a big release going out tomorrow, and I'm not the least bit scared. Will something go wrong? Maybe, I can't be sure. I tried my best to get everything right and ready, but no big deal if something goes wrong.
Yes, the worse part is the nagging feeling that there is some nasty bugs lurking underneath that you forgot. Somehow there will always be bugs and sooner or later, we all have to face judgement.
I have run in the woods with bears, climbed steep and sketchy mountains, rock climbed, tried hang gliding and paragliding, kayaked in rough waters. Most of that was quite safe, with well-qualified people, using the right equipment, with the right training and with the right progression of risk. That said, I have definitely held my life in my hands a few times,put my life in others' hands, and had other people's lives in my hand.
When you've had these experiences, technical risks are easier to manage. They don't become easy, but you go through the same mental checklists. "Can I close my eyes and pull my kayak skirt off if I flip in these waves" becomes "have a followed my backup routines, so if this push fails will I be able to recover in a reasonable timeframe?"
I've been a hobbyist programmer for most of my life. But now I'm dabbling in more meaningful and important projects. This is the perspective that makes me comfortable jumping into technical projects, without being paralyzed by the fear of breaking something important.