Skip to main content

Book Review - The Phoenix Project

Here at Skybox Labs, we do regular lunch and learn session where a fellow colleague present on topics ranging from clean code, continuous integration, game development, machine learning to almost any areas where there are reasonable interests.

One of the very recent lunch and learn series that I have attended was focusing on DevOps which got me interested to learn more about the topic. I was looking for recommended books and the lead presenter highly recommended that I start with 'The Phoenix Project' by Gene Kim

Being inspired by the stellar reviews in Amazon, I have decided to get a copy and read it over the weekend.
A fantastic book that contains a wealth of information and delivers it in an intelligent and interesting way; a story. The book successfully captures the events and struggles of most people who work in IT Operations and gives a very good explanation on why these problems exist, and how you can solve them. It portrays a very effective way of thinking in applying our understanding of plant floor operations, manufacturing, and logistics to how we manage IT in a business. The way it establishes that connection is fantastic.

Beside throughly enjoying  the book as a breathtaking novel, here are my few key takeaways from this book:
  • Definitely a must read for anyone in leadership position. The vivid narrative presented in this book should convince anyone about the importance of well run IT in overall business success. 
  • Know and master The Three ways.
  • Work is not done until it is in the hand of your end users/customers. Every team is equally responsible and should work together to make that happen. It is not like DEV team is done now it's QA's job.
  • The more we can automate the hand-off between teams the less chance of failure and unplanned work. For example, crux of the deployment issues phoenix team initially faced was due to the fact that their DEV, QA and PROD environment were not on sync. After they automated the environment creation and made it consistent across DEV, QA and PROD that problem resolves itself. Also, now  they could spin a new DEV machine in record time as a nice side effect. This eventually points to the importance of continuous integration, deployment and a tight feedback loop to make the pipeline more robust.
  • Frequent deployment immensely helps business to experiment on the market need, iterate quickly on the winning features and retire the ones which are not as successful. Also it gives the development team more confidence on their process as it gets easier to push bug fixes or roll out new features.
  • It is immensely important to have a clear understanding of core business goals, each team's roles on achieving those goals and relating those goals to relevant work items.
  • Understand Four types of work and their differences.
    • (a) Business project (Delivers customer value) - New Solar powered Car - Halo Infinite
    • (b) Internal IT project (Production line for delivering (a)) - Paint machine, Crash tester -  Source control, Automated test, Continuous delivery
    • (c) Changes(improve (a) and (b)) - Replacing Faulty car parts, Reduce production time - Usual Bug and hot fixes and performance tuning
    • (d) Unplanned work (Basically paralyze all the other works) - Painting machine broken down so cars in the assembly need to wait until it is fixed - Build broken.
  • My favorite character - Erik,  hated character - Sarah. However, both were equally important to create the necessary tension in the story.

The next book in my reading list is 'The DevOps Handbook' by the same author. Stay tuned :)


Popular posts from this blog

Creating dynamic email templates using C# and Office Outlook

It is quite common for many applications to send automated email notifications. Couple of months ago, I have worked on improving our old email template format to make it more user friendly.
In this tutorial I will walk you though regarding how I took advantage of Microsoft Outlook to quickly generate custom email template and later using the html template for building an automated custom email application using C#.

Steps:Creating Templates: Using the rich text editor support  in Outlook create a nicely formatted email. Use placeholder text for the values you like to change dynamically based on your task completion status.

To keep this tutorial simple, I have created a  simple table with placeholder text inside the third bracket [place holder text]. However, you can use anything supported by outlook editor.Getting HTML code: Send the created email to your own address. After that, open the sent email and right click to view source. It will display the HTML source of the email body with …

Persian Music - Homayoon - Nemitonam English lyrics

I love this song. I have requested one of my Persian friend to translate it for me and she did really nice job.. I am sure you will love it..

"The person who was the only person I had,
was the only refuge of my lonely heart,
Left me alone and went from my side
I am restless form the pain of her separation

I thought she stays with me
sings love song for me
I thought she understand my words
I didn’t know she’s unkind

Though gone, but still
I am full of her love
Her thought is always with me
Wherever I go, she is in front of my eyes, in front of my eyes
I want to stand out
find a way to reduce my pain of her separation
But it is not possible, There is no way
I cannot bear
I cannot bear

The person who was the only person I had,
was the only refuge of my lonely heart,
Left me alone and went from my side
I am restless form the pain of her separation

I thought she stays with me
sings love song for me
I thought she understand my words
I didn’t know she’s unkind

Though gone, but still
I …

Interesting bug - Line endings and Hash Code

I recently came across an interesting bug which emphasize how different line endings format can break your custom equality implementation if you do not carefully consider them.

We have an application that periodically updates the local assets with latest updated resources. In a nutshell, it makes an web api call to get the latest set of metadata and compare them against a locally stored metadata file. If they differs then we update the locally stored metadata file and download new/updated resources.

For a particular asset, associated metadata file was always getting updated although there were no visible changes detected using the revision history.

My obvious suspect was the code responsible for doing the equality check between local metadata and the metadata received from the Web API.

For verification, I setup a conditional break-point which will be hit when the equality returns false. After my debug hit the break-point, I looked into all the properties and fou…