Thursday, February 19, 2015

"From complete chaos to Octopus Deploy" Part 8: Lessons learned and useful resources

Introduction to this blog series

How do you automate the non-existing deployment routines of an organization with over 100 different customers, each having their own environments? How do you convince the leaders, developers and customers to give you the resources needed in order to automate everything?  Is it really possible to introduce a routine that works for everyone?

Lessons learned

I usually find it quite easy to summarize the lessons learned after I've completed a task. You simply list all the mistakes you made that others are likely to make as well. In the case of introducing Octopus Deploy to our organization though, there have been very few mistakes to make. We've only had one problem, performance issues, and the cause of this issue lay outside of Octopus.


When I first set up Octopus, we didn't use the built-in NuGet feed, instead we used an external feed built using NuGet.Server. As the number of NuGet packages grew, we found that basic functions in Octopus such as creating a new release could take up to 10 minutes to finish. Not able to figure out where the root of the problem was, I had a Skype session with Paul and Vanessa at Octopus Deploy. It didn't take Paul long to identify our external NuGet feed at the performance killer. He explained to me that whenever Octopus requested a NuGet package, NuGet.Server loaded all packages found into memory. As we had no automatic cleanup of our NuGet feed, the number of packages loaded into memory grew quickly every day. Paul suggested we should switch to NuGet.Lucene as that indexes its packages or the built-in feed in Octopus. I decided to use the built-in feed and voilĂ ! All the performance issues disappeared!

Supporting colleagues

My second lesson learned is that if you are in charge of introducing Octopus Deploy to an organization of a certain size, you will spend more time supporting your coworkers than you would think. Part of my job is to ensure the technical quality of the projects we deliver and to make my colleagues workdays as efficient as possible, hence Octopus Deploy. But some of my colleagues are extremely busy, and have very little time to sit down and read the Octopus Deploy documentation. So I've spent more time than planned on creating step-by-step guides, answering questions and teaching them the basic functions of Octopus Deploy.

Where are we at today?

Several times, I've mentioned that we have over 100 customers spread accross approximately 30 different hosting vendors, are all of them now using Octopus Deploy? Not yet, but we're getting there, one customer at the time.

We had two choises of how we could introduce Octopus Deploy to our customers:
1) Add all of them immediately
2) Add one by one gradually, by fitting the process into the customers schedule

We went with option 2 as this was the one we believed our customers would prefer, so now existing and new customers are set up on our Octopus Deploy server every week. And in the end, they'll all be present.

My estimates are that we've covered about 40% of our customers and hosting vendors so far. Approximately 75% of the developers at Epinova now use Octopus Deploy on a weekly basis, and so far I've heard no complaints, only praise and enthusiasm.

Useful resources

The best resources you can find are created by Octopus Deploy themselves:
- The documentation
- Training videos (I really enjoyed these! Make sure you also check out the Community videos on the bottom of this page)
- The Octopus Deploy API (now, THIS is what an API should look like!)

It's a wrap

That's it for this blog series, at least for now. I must say, the time I've spent planning and setting up Octopus Deploy has been a blast! My enthusiasm for this product is insane, and to me that proves they've done something right.

I would like to thank everyone at Octopus Deploy for the great work they're doing! I specifically want to thank Vanessa, Paul and Damian for the close ties they have to the developer community, I've never had to wait for an answer and it seems that at least one of them is active on Twitter at all times. Last, but not least, I'd like to thank everyone following this blog series, your kind words are heartwarming!

If you want to hear more about my journey towards automated deployments, I'm speaking at the EPiServer meetup in Oslo on March 3rd and the .NET User Group in Bergen on April 29th. I'm also doing a half-day workshop in Bergen in March on "Getting started with Octopus Deploy". Maybe I'll see some of you there?

No comments:

Post a Comment