
The step-by-step guide to going live with new software releases faster - reducing risk and delivering more value sooner! * *Fast, simple, repeatable techniques for deploying working code to production in hours or days, not months! *Crafting custom processes that get developers from idea to value faster than ever. *Best practices for everything from source code control to dependency management and in-production tracing. *Common obstacles to rapid release - and pragmatic solutions. In too many organizations, build, testing, and deployment processes can take six months or more. That's simply far too long for today's businesses. But it doesn't have to be that way. It's possible to deploy working code to production in hours or days after development work is complete - and Go Live presents comprehensive processes and techniques for doing so. Written by two of the world's most experienced software project leaders, this book demonstrates how to dramatically increase speed while reducing risk and improving code quality at the same time. The authors cover all facets of build, testing, and deployment, including: configuration management, source code control, release planning, auditing, compliance, integration, build automation, and more. They introduce a wide range of advanced techniques, including inproduction monitoring and tracing, dependency management, and the effective use of virtualization.
I will recommend the following books. But more than books, you will probably require real talk with other people who are experienced in their sectors related to your tech stacks.
1. "The Phoenix Project" by Gene Kim, Kevin Behr, and George Spafford - This book provides a fictional narrative about transforming an IT department, offering valuable insights into DevOps practices and the challenges of scaling technology within an organization.
2. "Team Geek" by Ben Collins-Sussman and Jennifer Greene - As a CTO, managing and leading your engineering team is crucial. This book focuses on building effective engineering teams, fostering collaboration, and maintaining a healthy work culture.
3. "High Output Management" by Andrew S. Grove - A classic in management literature, this book offers timeless wisdom on organizational management and leadership, with a focus on achieving high performance and scalability.
4. "The Lean Startup" by Eric Ries - As a ScaleUp CTO, you'll likely need to embrace innovation and growth. This book introduces the principles of lean startup methodology, helping you navigate the challenges of scaling your company.
5. "Continuous Delivery" by Jez Humble and David Farley - Scaling your technology infrastructure while maintaining a robust and efficient development pipeline is crucial. This book delves into the principles and practices of continuous delivery and automation.
6. "Inspired: How to Create Products Customers Love" by Marty Cagan - If your role involves product development, this book is a must-read. It provides insights into building products that resonate with customers and can scale effectively.
7. "Zero to One" by Peter Thiel - This book offers unconventional wisdom on startups and innovation, challenging traditional thinking. It's particularly relevant if you're leading a company in a competitive market.
8. "The Innovator's Dilemma" by Clayton Christensen - A classic in the field of innovation and disruption, this book can help you understand why successful companies often fail to adapt and how to navigate disruptive technologies.
9. "Good to Great" by Jim Collins - Scaling a company to greatness is a common goal. This book explores the factors that distinguish great companies from good ones and offers insights into leadership and strategy.
10. "Crucial Conversations" by Al Switzler, Joseph Grenny, and Ron McMillan - Effective communication is key for leadership success. This book teaches you how to have difficult conversations and resolve conflicts constructively, which is essential in a leadership role.
These books cover a wide range of topics, from technology management and leadership to innovation and personal development. Depending on your specific challenges and interests, you can select the ones that resonate with you the most to help you excel in your role as a ScaleUp CTO.
Learn Version Control: Familiarize yourself with Git, as version control is a crucial skill in DevOps. You can start with online tutorials and documentation like the "Pro Git" book by Scott Chacon and Ben Straub.
Master the Command Line: DevOps heavily relies on command-line tools for automation and management. Practice using the terminal extensively and learn essential commands and scripting (e.g., Bash, PowerShell).
Infrastructure as Code (IaC): Get familiar with IaC tools like Terraform or Ansible, which allow you to manage and provision infrastructure programmatically. Online courses like those on Udemy or Pluralsight can be helpful.
Continuous Integration and Deployment (CI/CD): Understanding CI/CD pipelines is crucial in DevOps. Consider learning tools like Jenkins, GitLab CI/CD, or CircleCI. "Continuous Delivery" by Jez Humble and David Farley is an excellent book on this topic.
Cloud Platforms: Familiarize yourself with cloud providers like AWS, Azure, or Google Cloud Platform. You can take vendor-specific certifications or explore resources like the AWS Well-Architected Framework.
- Continuous Delivery by Jez Humble and Dave Farley
- The Pragmatic Programmer by Andy Hunt and Dave Thomas
- A History of Modern Computing by Paul E. Ceruzzi
- Version Control with Git by Prem Ponuthorai and Jon Loeliger
- and SICP. Understanding it is like accessing a new dimension of power.
If you're not familiar with the general arguments for why CD might be desirable, a good place to start would be the books Continuous Delivery [https://smile.amazon.com/Continuous-Delivery-Deployment-Auto...] or Accelerate [https://smile.amazon.com/Accelerate-Software-Performing-Tech...]. The TLDR would be that most deploy problems in practice turn out to be because the process is manual, infrequently-used, and/or unreliable, and by practicing "if it hurts, do it more often" you are forced to iron out those kinks. For example you can't deploy automatically without a good acceptance/smoke test suite, and without solid DB migration testing/linting/practices, to name just two of many. You could just build all these things without trying to do CD, but in practice it seems that it's quite hard for organizations to prioritize this work in isolation, and the goal of CD seems to provide a fairly clear map to a much higher-quality deploy process. The practice of deploying more frequently to flush out issues, is also quite unintuitive as you note.
Here's a (probably out-of-date) article on how FB did deploys in 2017: https://www.infoq.com/news/2017/09/facebook-release-scale/ -- batched commits and staged canary rollouts automatically cut and released every few hours.
Everyone should read Continuous Delivery to start (https://www.amazon.com/gp/product/0321601912/ref=as_li_tl?ie...). It's 10 years old but it's still the canonical reference for how most people should be deploying in the modern age.
A book on containers would be the next thing I'd learn very thoroughly. Whether you run them in Docker on a single host, or run them in a cloud orchestration system, doesn't matter really. Just having an app in a container provides the abstractions you want to enable rapid, reliable deployment on multiple platforms. Most deployments should be dead simple: pulling and starting a new container, pointing traffic at the new container, stopping the old one. Rollback is the same in reverse order of container. There should be a billion different services to manage this for you, but you can also do it yourself on a single Linux box easily.
Then a book on database migrations, which isn't really complicated once you get the jist of it. This teaches the idea that if you're using a database, you have to think hard about how you're using it in context of your code deployments, and gives you a model for how to handle both reliably.
Next, the tools Terraform and Packer are very useful for handling the "infrastructure" side of deployment. If you manage an actual VM that runs your apps, build the image with Packer and deploy it with Terraform. It's much better to use some managed provider that just runs your containers so you don't need to deal with this. But if you do need to manage a host OS, this will make it seamless and reliable to do the inevitable maintenance in a way that you can test first, and recover easily from failure.
Ensuring your app works along the methods of the 12 Factor App (it's just a website, no book) will make sure it fits into all the tools and methods. If you just look for the deployment piece of every part of 12FA, you'll build a very robust deployment system.
Finally, learn Bash and how to set up a web server like Nginx (and how to use it as a reverse proxy) and you will have basically all the skills you need to do modern best practice deployments.
Dare to Lead (interesting and Powerful)
Rising Strong (Sensible)
What the most successful people do before breakfast (helpful in thinking about opportunity costs)
Why we sleep (interesting read)
Exponential organisations (Re-read after 2 years, worth it)
Prisoners of Geography (very interesting view of geopolitics, Putin, et al)
Continuous Delivery (great!)
Clean Code (must read for any serious programmer)
Built to last (picked it back after 1-2 years, cool book)
Site Reliability Engineering (didn't quite finish, but good book)
Building Microservices (fantastic book which puts everything I've done in the past year into so much more perspective)