title
DevOps Engineering Course for Beginners

description
What is DevOps in the context of software engineering? Learn all about DevOps in this comprehensive course for beginners with three technical tutorials. You will learn what DevOps is, continuous integration, continuous deployment strategies, and application performance management. Many DevOps practices are commonly used in programming and web development, it is important to understand key terms and technologies. This course often references the MERN (MongoDB, Express JS, React JS, Node JS) technology stack. You will get a series of talks with technology recommendations based on these best practices. There will be several programming examples embedded in these talks. As long as you know the absolute basics of coding and the web, you'll have no problem following along. ⭐️ Course Notes ⭐️ 🔗 Lesson 1: https://layerci.com/blog/what-is-devops/ 🔗 Lesson 2: https://layerci.com/blog/what-is-test-driven-development/ 🔗 Lesson 3: https://layerci.com/blog/what-is-ci/ 🔗 Lesson 4: https://layerci.com/blog/what-is-code-coverage/ 🔗 Lesson 5: https://layerci.com/blog/linting-best-practices/ 🔗 Lesson 6: https://layerci.com/blog/what-is-an-ephemeral-environment/ 🔗 Lesson 7: https://layerci.com/blog/the-difference-between-vms-and-containers/ 🔗 Lesson 8: https://layerci.com/blog/what-are-rolling-deployments/ 🔗 Lesson 9: https://layerci.com/blog/what-is-a-blue-green-deployment/ 🔗 Lesson 10: https://layerci.com/blog/what-is-autoscaling/ 🔗 Lesson 11: https://layerci.com/blog/service-discovery/ 🔗 Lesson 12: https://layerci.com/blog/what-is-log-aggregation/ 🔗 Lesson 13: https://layerci.com/blog/vital-production-metrics/ ⭐️ Course Content: 3 Pillars of DevOps ⭐️ ⭐️ Unit 1 - Code Review Automation ⌨️ Lesson 1 What is DevOps? ⌨️ Lesson 2 - What is Test Driven Development (TDD)? ⌨️ Lesson 3 - What is Continuous Integration (CI)? w/ CI setup TUTORIAL ⌨️ Lesson 4 - What is code coverage? ⌨️ Lesson 5 - Linting best practices ⌨️ Lesson 6 - Ephemeral environments w/ setup TUTORIAL ⭐️ Unit 2 - Deployment Strategies ⌨️ Lesson 7 - Virtual Machines (VMs) vs. Containers ⌨️ Lesson 8 - Rolling deployments ⌨️ Lesson 9 - Blue/green deployments w/ Continuous Deployment setup TUTORIAL ⌨️ Lesson 10 - What is autoscaling? ⌨️ Lesson 11 - What is service discovery? ⭐️ Unit 3 - Application Performance Management (APM) ⌨️ Lesson 12 - What is log aggregation? ⌨️ Lesson 13 - Vital production metrics ⭐️ Course Reddit Discussion Forum: https://www.reddit.com/r/devopsacademy/ 🎥 Course created and narrated by Colin Chartier, Co-founder and CEO at LayerCI 🐦 Have feedback on the course? Email devopsacademy@layerci.com LayerCI on Youtube: https://www.youtube.com/channel/UCrUJumewxQvb2TofzbqD6zA 🎉 Thanks to our Champion and Sponsor supporters: 👾 Wong Voon jinq 👾 hexploitation 👾 Katia Moran 👾 BlckPhantom 👾 Nick Raker 👾 Otis Morgan 👾 DeezMaster 👾 Treehouse -- Learn to code for free and get a developer job: https://www.freecodecamp.org Read hundreds of articles on programming: https://freecodecamp.org/news

detail
{'title': 'DevOps Engineering Course for Beginners', 'heatmap': [{'end': 671.186, 'start': 243.771, 'weight': 0.946}, {'end': 1084.214, 'start': 830.15, 'weight': 0.859}, {'end': 1412.92, 'start': 1240.066, 'weight': 0.773}, {'end': 1841.62, 'start': 1491.169, 'weight': 0.944}, {'end': 2414.622, 'start': 2325.535, 'weight': 0.857}, {'end': 2825.611, 'start': 2734.452, 'weight': 0.753}, {'end': 3487.371, 'start': 3400.966, 'weight': 0.945}], 'summary': "This beginner's devops engineering course covers devops fundamentals, agile software development, application performance management, devops engineering and testing basics, continuous integration, code reviews, code style and linting, ephemeral environments, linux deployments, containers vs. vms, deployment strategies, canary and continuous deployment, and automated deployment with a focus on technologies such as kubernetes, aws ec2, elasticsearch, kibana, and more.", 'chapters': [{'end': 936.029, 'segs': [{'end': 71.684, 'src': 'embed', 'start': 0.049, 'weight': 0, 'content': [{'end': 4.051, 'text': "This beginner's DevOps course is your first step toward a DevOps engineering role.", 'start': 0.049, 'duration': 4.002}, {'end': 7.993, 'text': 'It is taught by the CEO and co-founder of LayerCI.', 'start': 4.531, 'duration': 3.462}, {'end': 26.803, 'text': 'The goal of this course will be for regular developers and regular engineering practitioners to learn fundamental DevOps concepts so that they can go towards a DevOps engineering role.', 'start': 16.898, 'duration': 9.905}, {'end': 30.051, 'text': "We'll also be talking about DevOps broadly in the introduction.", 'start': 27.449, 'duration': 2.602}, {'end': 33.213, 'text': "But beyond that, we'll primarily be talking about the engineering side of things.", 'start': 30.471, 'duration': 2.742}, {'end': 47.744, 'text': 'DevOps is a methodology that helps engineering teams build products better by continuously integrating user feedback.', 'start': 40.459, 'duration': 7.285}, {'end': 54.253, 'text': "And if you Google DevOps and you look for pictures, you'll often see ones like this.", 'start': 49.89, 'duration': 4.363}, {'end': 59.496, 'text': 'It really helps understand how DevOps is different than the traditional way of thinking about software development.', 'start': 54.973, 'duration': 4.523}, {'end': 64.679, 'text': 'Back in the day, software was developed much like things would be developed in a factory.', 'start': 60.136, 'duration': 4.543}, {'end': 71.684, 'text': "So any input would be programming, and then the output, you'd have a product that you could put on a CD and you'd sell it to users.", 'start': 65.379, 'duration': 6.305}], 'summary': "Devops course by layerci's ceo for regular developers to learn fundamental concepts and move towards devops engineering role.", 'duration': 71.635, 'max_score': 0.049, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY49.jpg'}, {'end': 182.28, 'src': 'embed', 'start': 155.183, 'weight': 6, 'content': [{'end': 161.37, 'text': 'And continuous deployment strategies, releasing and deploying all happens automatically after a change is known to be good.', 'start': 155.183, 'duration': 6.187}, {'end': 163.953, 'text': "There's a lot of automation that can be done here in larger teams.", 'start': 161.831, 'duration': 2.122}, {'end': 168.679, 'text': "There's, you know, popular tools like Spinnaker by Netflix that we'll talk about in later talks.", 'start': 164.233, 'duration': 4.446}, {'end': 175.096, 'text': "But the core idea is you want to take the software and you want to send it to your users in a way that they don't notice if there's problems.", 'start': 169.673, 'duration': 5.423}, {'end': 182.28, 'text': "So if there's an experimental UI change, you might show it to a few percentage of users and get their feedback before you show it broadly.", 'start': 175.416, 'duration': 6.864}], 'summary': 'Continuous deployment ensures automatic release and deployment of changes, utilizing automation and user feedback for seamless software updates.', 'duration': 27.097, 'max_score': 155.183, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY155183.jpg'}, {'end': 671.186, 'src': 'heatmap', 'start': 243.771, 'weight': 0.946, 'content': [{'end': 251.279, 'text': 'So the planning stage takes all of the user feedback, takes all of the things that the operations and deployments teams learned about,', 'start': 243.771, 'duration': 7.508}, {'end': 252.58, 'text': 'deploying and scaling the product.', 'start': 251.279, 'duration': 1.301}, {'end': 260.428, 'text': 'And then use that to build out new features, solve bugs and make new versions of the back end and new versions of the architecture.', 'start': 253.241, 'duration': 7.187}, {'end': 262.795, 'text': 'And then just continues in the cycle.', 'start': 260.447, 'duration': 2.348}, {'end': 270.822, 'text': 'And this is what people mean when they say our company uses DevOps, or our company is tech forward, or our company is digitally transformed.', 'start': 263.096, 'duration': 7.726}, {'end': 275.746, 'text': 'they mean that instead of taking a set of requirements and building one artifact which is then shipped,', 'start': 270.822, 'duration': 4.924}, {'end': 286.575, 'text': "it's a continuous cycle of taking feedback you know in these two weeks scrum cycles usually and producing software that users actually want to use that they've had some say in producing DevOps.", 'start': 275.746, 'duration': 10.829}, {'end': 289.637, 'text': 'engineering is another common part of DevOps.', 'start': 286.575, 'duration': 3.062}, {'end': 295.302, 'text': 'So beyond just the methodology, which is something that maybe the technical leaders and CEO would care about.', 'start': 289.917, 'duration': 5.385}, {'end': 298.204, 'text': "There's a subfield of DevOps engineering.", 'start': 296.143, 'duration': 2.061}, {'end': 300.906, 'text': 'And this is usually what engineers mean when they say DevOps.', 'start': 298.344, 'duration': 2.562}, {'end': 303.629, 'text': "And it's usually what job postings mean when they say DevOps.", 'start': 301.407, 'duration': 2.222}, {'end': 311.235, 'text': "So if a job posting is asking for a DevOps engineer, you know they're not asking for someone that can plan and deploy and code.", 'start': 304.209, 'duration': 7.026}, {'end': 315.338, 'text': "they're mostly asking for someone that can build, test, release, deploy and monitor.", 'start': 311.235, 'duration': 4.103}, {'end': 327.068, 'text': 'So the three pillars of DevOps engineering are pull request automation deployment automation and application performance management.', 'start': 318.86, 'duration': 8.208}, {'end': 329.77, 'text': "And we'll get into specifics about those.", 'start': 328.069, 'duration': 1.701}, {'end': 338.779, 'text': 'But the idea is pull request automation helps developers build things faster and helps them understand whether their proposed change is good faster.', 'start': 329.991, 'duration': 8.788}, {'end': 344.362, 'text': "Deployment automation helps you deploy your code in a way that users don't complain.", 'start': 339.656, 'duration': 4.706}, {'end': 351.951, 'text': 'Again, Facebook has lots of deployment automation, because if they just threw their code out into the void every time a developer made a change,', 'start': 344.662, 'duration': 7.289}, {'end': 353.492, 'text': "there'd be hundreds of millions of complaints.", 'start': 351.951, 'duration': 1.541}, {'end': 358.95, 'text': 'And application performance management is automation around making sure that things are healthy.', 'start': 354.625, 'duration': 4.325}, {'end': 361.233, 'text': 'So automatically detecting downtime.', 'start': 359.15, 'duration': 2.083}, {'end': 364.997, 'text': 'automatically waking someone up, if you know the site goes down overnight.', 'start': 361.233, 'duration': 3.764}, {'end': 369.883, 'text': "automatically rolling back things if there's a problem, and we'll get into the specifics of all of these in future talks.", 'start': 364.997, 'duration': 4.886}, {'end': 374.388, 'text': 'The first pillar, which I mentioned was pull request automation.', 'start': 371.685, 'duration': 2.703}, {'end': 378.62, 'text': 'has primarily to do with the developer feedback cycle.', 'start': 375.598, 'duration': 3.022}, {'end': 384.843, 'text': 'So developers share work with each other by proposing these atomic sets of changes called pull requests.', 'start': 379.38, 'duration': 5.463}, {'end': 389.946, 'text': "And by atomic, I mean, they're a full feature on their own, they don't require other things to run.", 'start': 385.444, 'duration': 4.502}, {'end': 396.77, 'text': "First, it's like if a developer proposes a pull request, they should be expecting that that change is good.", 'start': 390.767, 'duration': 6.003}, {'end': 399.832, 'text': 'And as far as they can tell, the change fulfills some business requirements.', 'start': 396.87, 'duration': 2.962}, {'end': 402.894, 'text': 'And then what they have to do is get through some gates.', 'start': 400.632, 'duration': 2.262}, {'end': 411.301, 'text': 'So organizations and pull request automation, their goal is to make sure that developers can tell very quickly whether their change is good or not.', 'start': 403.634, 'duration': 7.667}, {'end': 417.586, 'text': "So, for example, if you're working on a website and a developer proposes a change that adds a typo,", 'start': 412.241, 'duration': 5.345}, {'end': 419.848, 'text': "that's something that can easily be automatically detected.", 'start': 417.586, 'duration': 2.262}, {'end': 426.213, 'text': 'And if you set up a typo gate that says no change may go in if it contains a typo.', 'start': 420.628, 'duration': 5.585}, {'end': 430.056, 'text': 'that would be an easy way to make sure that developers get automatic feedback about their changes.', 'start': 426.213, 'duration': 3.843}, {'end': 434.93, 'text': 'People say pull requests, you know, as of 2021, usually they mean Git.', 'start': 430.728, 'duration': 4.202}, {'end': 442.094, 'text': 'So Git is a technology originally popularized by Linux, and it helps developers make these sets of changes and share them with each other.', 'start': 435.291, 'duration': 6.803}, {'end': 448.038, 'text': 'A pull request is usually reviewed by at least one other programmer in something called a code review,', 'start': 442.114, 'duration': 5.924}, {'end': 455.782, 'text': "where the other programmer will tell you about code style, will tell the proposing programmer whether there's architectural problems,", 'start': 448.038, 'duration': 7.744}, {'end': 458.904, 'text': "scaling problems, subjective things that can't easily be automated.", 'start': 455.782, 'duration': 3.122}, {'end': 464.414, 'text': 'But that process of review can also be greatly facilitated by a DevOps technology stack.', 'start': 459.71, 'duration': 4.704}, {'end': 473.02, 'text': "And DevOps automation can help with things like ephemeral environments and from linting and from all of these other automations that we'll get into.", 'start': 465.174, 'duration': 7.846}, {'end': 476.403, 'text': 'After the code review has been done.', 'start': 473.541, 'duration': 2.862}, {'end': 481.787, 'text': 'usually an engineering manager or product manager in charge of the functionality being proposed will give feedback.', 'start': 476.403, 'duration': 5.384}, {'end': 485.37, 'text': 'So, if you create a new button on a website,', 'start': 482.428, 'duration': 2.942}, {'end': 491.353, 'text': "you'd like the designer that designed the button and you'd like the product manager that requested the button be created.", 'start': 485.37, 'duration': 5.983}, {'end': 497.735, 'text': "both give feedback, because if the button is phrased poorly, if it's placed poorly, if it's not mobile responsive,", 'start': 491.353, 'duration': 6.382}, {'end': 500.796, 'text': 'those are all problems that would require another merge request.', 'start': 497.735, 'duration': 3.061}, {'end': 506.418, 'text': 'So it would be great if the original merge request fulfilled all of the requirements, the first time it was proposed.', 'start': 500.976, 'duration': 5.442}, {'end': 511.279, 'text': 'And so usually, non technical people will give feedback on pull requests as necessary.', 'start': 506.838, 'duration': 4.441}, {'end': 518.775, 'text': 'So what can be automated for a DevOps engineer?', 'start': 515.174, 'duration': 3.601}, {'end': 531.602, 'text': 'You can automate things like automated test running per change, ephemeral environments, automated security scanning, notifications to reviewers,', 'start': 520.657, 'duration': 10.945}, {'end': 533.363, 'text': 'getting the right people to review it at the right time.', 'start': 531.602, 'duration': 1.761}, {'end': 541.121, 'text': 'And the end goal of all of this automation is that a developer should be able to propose a change and get it merged the same day they propose the change.', 'start': 534.438, 'duration': 6.683}, {'end': 543.942, 'text': "That's a huge organizational benefit,", 'start': 541.961, 'duration': 1.981}, {'end': 551.666, 'text': 'because it means that critical bugs can be very quickly fixed and merged and deployed without needing a special process.', 'start': 543.942, 'duration': 7.724}, {'end': 555.649, 'text': "And it also means that developers aren't bogged down in bureaucracy.", 'start': 552.466, 'duration': 3.183}, {'end': 557.411, 'text': 'they can propose changes.', 'start': 555.649, 'duration': 1.762}, {'end': 559.854, 'text': 'once they get through all the gates, the change will be deployed.', 'start': 557.411, 'duration': 2.443}, {'end': 562.456, 'text': "there isn't additional special gates that they need to discover.", 'start': 559.854, 'duration': 2.602}, {'end': 566.18, 'text': 'So, for example, if the proper gates and automations have been set up,', 'start': 562.957, 'duration': 3.223}, {'end': 573.313, 'text': 'a developer should be able to change a web page without having to ask everyone in the company whether this web page is used in certain workflows or not.', 'start': 566.18, 'duration': 7.133}, {'end': 579.214, 'text': "By virtue of passing the tests and passing the QA review, it's assumed that the new change is good.", 'start': 573.673, 'duration': 5.541}, {'end': 585.035, 'text': "And if a problem does arise, a new gate can be added to the automation so that in the future problems don't occur.", 'start': 579.994, 'duration': 5.041}, {'end': 587.116, 'text': 'The second pillar is deployment automation.', 'start': 585.375, 'duration': 1.741}, {'end': 592.717, 'text': 'In a famous post from 2000,, the founder of Stack Overflow places.', 'start': 587.856, 'duration': 4.861}, {'end': 597.338, 'text': 'can you make a build in one step as the second most important question for a development organization?', 'start': 592.717, 'duration': 4.621}, {'end': 599.282, 'text': "Things haven't really changed since then.", 'start': 597.961, 'duration': 1.321}, {'end': 604.644, 'text': "The efficiency of a build process isn't the only goal of deployment automation.", 'start': 599.982, 'duration': 4.662}, {'end': 608.145, 'text': 'However, other goals include the deployment strategies.', 'start': 604.704, 'duration': 3.441}, {'end': 612.827, 'text': 'I talked about canary deployments, where you want to show a feature to one user at a time,', 'start': 608.145, 'duration': 4.682}, {'end': 615.668, 'text': 'starting new versions of your application without causing downtime.', 'start': 612.827, 'duration': 2.841}, {'end': 620.332, 'text': 'If you have to shut off your website before upgrading it and then turning on the new version,', 'start': 616.108, 'duration': 4.224}, {'end': 624.735, 'text': 'the visitors that visit the website in the middle of the upgrade will notice downtime.', 'start': 620.332, 'duration': 4.403}, {'end': 627.617, 'text': "So there's clever deployment strategies you can do to avoid that.", 'start': 624.975, 'duration': 2.642}, {'end': 631.42, 'text': 'And finally, rolling back versions in case something goes wrong.', 'start': 628.458, 'duration': 2.962}, {'end': 634.883, 'text': "It's easy to overcomplicate deployments.", 'start': 633.302, 'duration': 1.581}, {'end': 639.006, 'text': 'Many companies have complex internal platforms for building and distributing releases.', 'start': 635.583, 'duration': 3.423}, {'end': 645.729, 'text': 'Broadly, success in deployment automation is finding the appropriate deployment tools to fulfill business goals and configuring them.', 'start': 640.267, 'duration': 5.462}, {'end': 649.05, 'text': 'In an ideal world, there should be little to no custom code for deploying.', 'start': 646.249, 'duration': 2.801}, {'end': 654.972, 'text': 'So off the shelf solutions like Spinnaker and Harness are wonderful places to start for this sort of thing.', 'start': 649.53, 'duration': 5.442}, {'end': 659.533, 'text': 'Finally, application performance management.', 'start': 657.112, 'duration': 2.421}, {'end': 663.284, 'text': 'Even the best code can be hangstrung by operational errors.', 'start': 660.663, 'duration': 2.621}, {'end': 671.186, 'text': "There's a famous case where a user put a bunch of spaces at the end of their post in Stack Overflow and they brought down Stack Overflow,", 'start': 663.944, 'duration': 7.242}], 'summary': 'Devops involves continuous feedback, automation, and deployment strategies to produce user-focused software quickly and efficiently.', 'duration': 427.415, 'max_score': 243.771, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY243771.jpg'}, {'end': 298.204, 'src': 'embed', 'start': 275.746, 'weight': 5, 'content': [{'end': 286.575, 'text': "it's a continuous cycle of taking feedback you know in these two weeks scrum cycles usually and producing software that users actually want to use that they've had some say in producing DevOps.", 'start': 275.746, 'duration': 10.829}, {'end': 289.637, 'text': 'engineering is another common part of DevOps.', 'start': 286.575, 'duration': 3.062}, {'end': 295.302, 'text': 'So beyond just the methodology, which is something that maybe the technical leaders and CEO would care about.', 'start': 289.917, 'duration': 5.385}, {'end': 298.204, 'text': "There's a subfield of DevOps engineering.", 'start': 296.143, 'duration': 2.061}], 'summary': 'Devops involves continuous feedback and production in two-week cycles, incorporating user input and emphasizing devops engineering.', 'duration': 22.458, 'max_score': 275.746, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY275746.jpg'}, {'end': 358.95, 'src': 'embed', 'start': 318.86, 'weight': 7, 'content': [{'end': 327.068, 'text': 'So the three pillars of DevOps engineering are pull request automation deployment automation and application performance management.', 'start': 318.86, 'duration': 8.208}, {'end': 329.77, 'text': "And we'll get into specifics about those.", 'start': 328.069, 'duration': 1.701}, {'end': 338.779, 'text': 'But the idea is pull request automation helps developers build things faster and helps them understand whether their proposed change is good faster.', 'start': 329.991, 'duration': 8.788}, {'end': 344.362, 'text': "Deployment automation helps you deploy your code in a way that users don't complain.", 'start': 339.656, 'duration': 4.706}, {'end': 351.951, 'text': 'Again, Facebook has lots of deployment automation, because if they just threw their code out into the void every time a developer made a change,', 'start': 344.662, 'duration': 7.289}, {'end': 353.492, 'text': "there'd be hundreds of millions of complaints.", 'start': 351.951, 'duration': 1.541}, {'end': 358.95, 'text': 'And application performance management is automation around making sure that things are healthy.', 'start': 354.625, 'duration': 4.325}], 'summary': 'Devops engineering focuses on pull request and deployment automation, and application performance management to ensure efficient and complaint-free code deployment.', 'duration': 40.09, 'max_score': 318.86, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY318860.jpg'}, {'end': 430.056, 'src': 'embed', 'start': 400.632, 'weight': 8, 'content': [{'end': 402.894, 'text': 'And then what they have to do is get through some gates.', 'start': 400.632, 'duration': 2.262}, {'end': 411.301, 'text': 'So organizations and pull request automation, their goal is to make sure that developers can tell very quickly whether their change is good or not.', 'start': 403.634, 'duration': 7.667}, {'end': 417.586, 'text': "So, for example, if you're working on a website and a developer proposes a change that adds a typo,", 'start': 412.241, 'duration': 5.345}, {'end': 419.848, 'text': "that's something that can easily be automatically detected.", 'start': 417.586, 'duration': 2.262}, {'end': 426.213, 'text': 'And if you set up a typo gate that says no change may go in if it contains a typo.', 'start': 420.628, 'duration': 5.585}, {'end': 430.056, 'text': 'that would be an easy way to make sure that developers get automatic feedback about their changes.', 'start': 426.213, 'duration': 3.843}], 'summary': 'Organizations use pull request automation to quickly detect and reject changes with typos, ensuring automatic feedback for developers.', 'duration': 29.424, 'max_score': 400.632, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY400632.jpg'}, {'end': 711.86, 'src': 'embed', 'start': 681.93, 'weight': 11, 'content': [{'end': 685.571, 'text': 'Even with the best code and even with the simplest things, like just a messaging board,', 'start': 681.93, 'duration': 3.641}, {'end': 689.112, 'text': "it's easy to have faults that make it to production and are only uncovered by users.", 'start': 685.571, 'duration': 3.541}, {'end': 698.355, 'text': "So application performance management ensures that metrics like how long it's taking for requests to be processed, how many servers are being used.", 'start': 690.072, 'duration': 8.283}, {'end': 701.396, 'text': 'all of those key health metrics are being processed.', 'start': 698.355, 'duration': 3.041}, {'end': 706.658, 'text': "And if there's a problem, like if all of the requests to the landing page are suddenly taking a long time,", 'start': 701.896, 'duration': 4.762}, {'end': 711.86, 'text': 'the appropriate people can be notified automatically, instead of an engineer discovering on Twitter that their website is down.', 'start': 706.658, 'duration': 5.202}], 'summary': 'Application performance management ensures key health metrics are processed, such as request processing time and server usage, to automatically notify appropriate personnel of issues, preventing user-discovered faults in production.', 'duration': 29.93, 'max_score': 681.93, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY681930.jpg'}, {'end': 746.052, 'src': 'embed', 'start': 721.422, 'weight': 12, 'content': [{'end': 728.084, 'text': "It's useful to be able to map back logs like, you know, a user visited the website, with information about that user.", 'start': 721.422, 'duration': 6.662}, {'end': 729.244, 'text': 'So what was their IP address??', 'start': 728.124, 'duration': 1.12}, {'end': 730.165, 'text': 'What was their username?', 'start': 729.284, 'duration': 0.881}, {'end': 732.026, 'text': 'What resource did they access?', 'start': 730.725, 'duration': 1.301}, {'end': 735.747, 'text': 'And what resources were used for fulfilling that access?', 'start': 732.166, 'duration': 3.581}, {'end': 739.889, 'text': 'So if they had to load something from a database and the database was slow,', 'start': 736.267, 'duration': 3.622}, {'end': 746.052, 'text': "it's useful to be able to say the user had a slow experience because their request was fulfilled slowly.", 'start': 739.889, 'duration': 6.163}], 'summary': 'Mapping user logs with ip, username, accessed resource, and database performance is useful for tracking user experience.', 'duration': 24.63, 'max_score': 721.422, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY721422.jpg'}, {'end': 783.347, 'src': 'embed', 'start': 756.806, 'weight': 13, 'content': [{'end': 766.133, 'text': 'monitoring. So again, I mentioned metrics and automatically alerting people, but taking the logs and metrics how slow are things,', 'start': 756.806, 'duration': 9.327}, {'end': 768.475, 'text': 'how much memory is left and deciding what to do?', 'start': 766.133, 'duration': 2.342}, {'end': 775.1, 'text': "So if there's a bunch of load, you might decide based on the metrics to automatically scale the number of servers.", 'start': 768.836, 'duration': 6.264}, {'end': 777.202, 'text': "So add more web servers as they're being used.", 'start': 775.321, 'duration': 1.881}, {'end': 783.347, 'text': "Based on the logs, if there's errors, you might want to automatically file tickets for engineers to look into them.", 'start': 778.043, 'duration': 5.304}], 'summary': 'Monitoring logs and metrics to automatically scale servers and file tickets for errors.', 'duration': 26.541, 'max_score': 756.806, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY756806.jpg'}, {'end': 893.839, 'src': 'embed', 'start': 863.005, 'weight': 15, 'content': [{'end': 865.566, 'text': 'So enterprise users are much more sensitive to downtime.', 'start': 863.005, 'duration': 2.561}, {'end': 869.336, 'text': 'So test coverage and business hours alerting should be priorities.', 'start': 866.314, 'duration': 3.022}, {'end': 875.321, 'text': "On logging and log aggregation error collection, there's popular tools like Sentry and CodeCov.", 'start': 869.877, 'duration': 5.444}, {'end': 879.004, 'text': "For automated test running, there's tools like Bitrise and CircleCI.", 'start': 875.801, 'duration': 3.203}, {'end': 881.686, 'text': 'Bitrise is more known for mobile testing.', 'start': 879.304, 'duration': 2.382}, {'end': 887.81, 'text': "And for alerting, there's a famous tool called PagerDuty that keeps track of who should be notified if there's a downtime.", 'start': 882.406, 'duration': 5.404}, {'end': 893.839, 'text': 'And so during business hours, you might assign someone to be the person that supposed to take any meetings for the day.', 'start': 888.351, 'duration': 5.488}], 'summary': 'Enterprise users prioritize test coverage and business hours alerting to minimize downtime, leveraging tools like sentry, codecov, bitrise, circleci, and pagerduty for efficient error collection, test running, and alert management.', 'duration': 30.834, 'max_score': 863.005, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY863005.jpg'}], 'start': 0.049, 'title': 'Devops fundamentals and importance of application performance management', 'summary': "Introduces a beginner's devops course emphasizing the role of devops methodology, outlines the agile software development cycle, and emphasizes the importance of application performance management with tools like sentry, codecov, bitrise, circleci, pagerduty, elasticsearch, pingdom, launchdarkly, and terraform.", 'chapters': [{'end': 92.342, 'start': 0.049, 'title': "Beginner's devops course", 'summary': "Introduces a beginner's devops course taught by the ceo and co-founder of layerci, aiming to help regular developers and engineering practitioners learn fundamental devops concepts to transition towards a devops engineering role, emphasizing devops methodology's role in continuously integrating user feedback and how it differs from traditional software development.", 'duration': 92.293, 'highlights': ['DevOps methodology emphasizes continuously integrating user feedback, enabling products to be built better (quantifiable data: user feedback integration).', 'The course aims to help regular developers and engineering practitioners transition towards a DevOps engineering role (quantifiable data: target audience).', 'DevOps differs from traditional software development by enabling continuous upgrades instead of requiring users to buy new versions of products (quantifiable data: difference in software development approach).', "The course is taught by the CEO and co-founder of LayerCI (quantifiable data: instructor's credentials).", 'DevOps is discussed broadly in the introduction, but the focus is on the engineering side of things (quantifiable data: course focus).']}, {'end': 681.229, 'start': 92.342, 'title': 'Devops: agile software development cycle', 'summary': 'Outlines the agile software development cycle in devops, including planning, coding, testing, releasing, deploying, operating, and gathering feedback, emphasizing the three pillars of devops engineering: pull request automation, deployment automation, and application performance management.', 'duration': 588.887, 'highlights': ['DevOps agile software development cycle involves planning, coding, testing, releasing, deploying, operating, and gathering feedback. The Agile software development cycle in DevOps includes planning, coding, testing, releasing, deploying, operating, and gathering feedback.', 'Continuous deployment strategies automate releasing and deploying after a change is known to be good. Continuous deployment strategies automate releasing and deploying after a change is known to be good, with a focus on automation and tools like Spinnaker by Netflix.', 'The three pillars of DevOps engineering are pull request automation, deployment automation, and application performance management. The three pillars of DevOps engineering are pull request automation, deployment automation, and application performance management, which help in building, testing, releasing, deploying, and monitoring.', 'Pull request automation facilitates developer feedback cycle by proposing atomic sets of changes called pull requests and automating gates for quick feedback. Pull request automation facilitates the developer feedback cycle by proposing atomic sets of changes called pull requests and automating gates for quick feedback, including code review and non-technical feedback.', 'Deployment automation focuses on efficient build processes, deployment strategies, and rolling back versions in case of errors. Deployment automation focuses on efficient build processes, deployment strategies such as canary deployments, and rolling back versions in case of errors, aiming for off-the-shelf solutions like Spinnaker and Harness.', 'Application performance management ensures operational errors do not hinder the performance of the software. Application performance management ensures operational errors do not hinder the performance of the software, emphasizing the importance of finding appropriate deployment tools and configurations to fulfill business goals.']}, {'end': 936.029, 'start': 681.93, 'title': 'Importance of application performance management', 'summary': 'Emphasizes the importance of application performance management, including monitoring request processing time, server usage, logging, and alerting for fault detection and resolution, with tools like sentry, codecov, bitrise, circleci, pagerduty, elasticsearch, pingdom, launchdarkly, and terraform.', 'duration': 254.099, 'highlights': ['Application performance management ensures metrics like request processing time and server usage are monitored. This includes tracking how long it takes for requests to be processed and how many servers are being used.', 'Logging is crucial for mapping user actions to system performance, such as identifying slow database requests impacting user experience. Logs provide information about user actions, including IP addresses, usernames, accessed resources, and performance of underlying components like databases.', 'Monitoring involves using metrics and logs to make automated decisions, such as scaling servers based on load and filing tickets for errors. Automated actions based on metrics and logs include scaling servers, filing tickets for errors, and alerting personnel in case of downtime or degraded performance.', 'Importance of application performance management for different scales of organizations, from startups to enterprise users and large platforms like Netflix and Facebook. Application performance management is highlighted for various organizational scales, emphasizing its relevance for startups, enterprise users, and large platforms like Netflix and Facebook.', 'Tools like Sentry, CodeCov, Bitrise, CircleCI, PagerDuty, Elasticsearch, Pingdom, LaunchDarkly, and Terraform play crucial roles in application performance management. Various tools such as Sentry, CodeCov, Bitrise, CircleCI, PagerDuty, Elasticsearch, Pingdom, LaunchDarkly, and Terraform are mentioned as important for tasks like error collection, test running, alerting, log aggregation, and automation of deployment processes.']}], 'duration': 935.98, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY49.jpg', 'highlights': ['DevOps methodology emphasizes continuously integrating user feedback, enabling products to be built better (user feedback integration).', 'The course aims to help regular developers and engineering practitioners transition towards a DevOps engineering role (target audience).', 'DevOps differs from traditional software development by enabling continuous upgrades instead of requiring users to buy new versions of products (difference in software development approach).', "The course is taught by the CEO and co-founder of LayerCI (instructor's credentials).", 'DevOps is discussed broadly in the introduction, but the focus is on the engineering side of things (course focus).', 'DevOps agile software development cycle involves planning, coding, testing, releasing, deploying, operating, and gathering feedback (agile software development cycle).', 'Continuous deployment strategies automate releasing and deploying after a change is known to be good, with a focus on automation and tools like Spinnaker by Netflix (continuous deployment strategies).', 'The three pillars of DevOps engineering are pull request automation, deployment automation, and application performance management, which help in building, testing, releasing, deploying, and monitoring (pillars of DevOps engineering).', 'Pull request automation facilitates the developer feedback cycle by proposing atomic sets of changes called pull requests and automating gates for quick feedback, including code review and non-technical feedback (pull request automation).', 'Deployment automation focuses on efficient build processes, deployment strategies such as canary deployments, and rolling back versions in case of errors, aiming for off-the-shelf solutions like Spinnaker and Harness (deployment automation).', 'Application performance management ensures operational errors do not hinder the performance of the software, emphasizing the importance of finding appropriate deployment tools and configurations to fulfill business goals (application performance management).', 'Application performance management ensures metrics like request processing time and server usage are monitored, including tracking how long it takes for requests to be processed and how many servers are being used (monitoring metrics).', 'Logging is crucial for mapping user actions to system performance, such as identifying slow database requests impacting user experience, providing information about user actions, including IP addresses, usernames, accessed resources, and performance of underlying components like databases (importance of logging).', 'Monitoring involves using metrics and logs to make automated decisions, such as scaling servers based on load and filing tickets for errors, including automated actions based on metrics and logs like scaling servers, filing tickets for errors, and alerting personnel in case of downtime or degraded performance (automated decision-making).', 'Application performance management is highlighted for various organizational scales, emphasizing its relevance for startups, enterprise users, and large platforms like Netflix and Facebook (relevance of application performance management).', 'Various tools such as Sentry, CodeCov, Bitrise, CircleCI, PagerDuty, Elasticsearch, Pingdom, LaunchDarkly, and Terraform are mentioned as important for tasks like error collection, test running, alerting, log aggregation, and automation of deployment processes (importance of tools in application performance management).']}, {'end': 1558.094, 'segs': [{'end': 968.6, 'src': 'embed', 'start': 937.421, 'weight': 0, 'content': [{'end': 941.525, 'text': 'And the conclusion of all of this is that DevOps engineering is vital for developer teams.', 'start': 937.421, 'duration': 4.104}, {'end': 946.61, 'text': 'Without being cognizant of its three pillars, customers will have a confusing and disappointing experience.', 'start': 942.146, 'duration': 4.464}, {'end': 950.714, 'text': "You know, things will go down, things won't scale properly, things will be slow.", 'start': 947.171, 'duration': 3.543}, {'end': 958.042, 'text': "And so it's really important to keep the three pillars in mind as you're scaling an engineering organization or if you're being hired as a DevOps engineer.", 'start': 951.855, 'duration': 6.187}, {'end': 961.305, 'text': "New products don't need to automate very much, however.", 'start': 959.203, 'duration': 2.102}, {'end': 968.6, 'text': "As a product matures and it gets more users, it's more and more important to automate DevOps engineering and to dedicate more resources to it.", 'start': 962.352, 'duration': 6.248}], 'summary': 'Devops engineering is vital for developer teams to avoid issues like downtime, scaling problems, and slow performance, especially as products mature and gain more users.', 'duration': 31.179, 'max_score': 937.421, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY937421.jpg'}, {'end': 1186.296, 'src': 'embed', 'start': 1154.695, 'weight': 4, 'content': [{'end': 1156.876, 'text': 'So first, developers choose something to work on.', 'start': 1154.695, 'duration': 2.181}, {'end': 1159.978, 'text': 'And then they write the tests before writing the code.', 'start': 1157.597, 'duration': 2.381}, {'end': 1164.301, 'text': "So they write tests that are currently failing, because the specification isn't satisfied.", 'start': 1160.198, 'duration': 4.103}, {'end': 1170.11, 'text': 'And then they write code until all of the specifications they wrote in step two are satisfied.', 'start': 1165.148, 'duration': 4.962}, {'end': 1179.733, 'text': 'So they might make a testing regimen that would work if the coffee maker succeeded and then build the cheapest coffee maker which satisfies that testing regimen.', 'start': 1171.23, 'duration': 8.503}, {'end': 1182.354, 'text': 'And the end result is the same.', 'start': 1181.214, 'duration': 1.14}, {'end': 1186.296, 'text': "So that software is built, it's tested, and it matches the specifications.", 'start': 1182.875, 'duration': 3.421}], 'summary': 'Developers write tests before code, ensuring specifications are met, resulting in successful software.', 'duration': 31.601, 'max_score': 1154.695, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY1154695.jpg'}, {'end': 1412.92, 'src': 'heatmap', 'start': 1240.066, 'weight': 0.773, 'content': [{'end': 1245.529, 'text': 'refers to developers continuously pushing small changes to a central repository numerous times per day.', 'start': 1240.066, 'duration': 5.463}, {'end': 1251.973, 'text': 'And those changes are verified by automated computer software that runs the tests that the programmers have defined.', 'start': 1246.35, 'duration': 5.623}, {'end': 1256.616, 'text': "So we've gone over what tests are.", 'start': 1254.695, 'duration': 1.921}, {'end': 1259.538, 'text': "So let's talk about why a company would use CI.", 'start': 1256.876, 'duration': 2.662}, {'end': 1263.681, 'text': 'Well, CI is really the first step in automating DevOps.', 'start': 1261.219, 'duration': 2.462}, {'end': 1270.442, 'text': 'Imagine the very simplest scenario, a single developer is making a program that will be used by a small group of users.', 'start': 1264.54, 'duration': 5.902}, {'end': 1277.044, 'text': 'That developer makes the original program releases it, and the project slowly builds traction.', 'start': 1271.982, 'duration': 5.062}, {'end': 1281.845, 'text': 'Now, imagine that developer has a critical bug a year later.', 'start': 1278.464, 'duration': 3.381}, {'end': 1285.146, 'text': 'And they go back to the old code.', 'start': 1283.445, 'duration': 1.701}, {'end': 1287.887, 'text': 'And they say like, Gee, this is really bad code.', 'start': 1285.346, 'duration': 2.541}, {'end': 1290.087, 'text': "I've become a better programmer since a year ago.", 'start': 1288.107, 'duration': 1.98}, {'end': 1292.168, 'text': "I don't really understand what's going on here.", 'start': 1290.828, 'duration': 1.34}, {'end': 1294.783, 'text': "that's really how development works.", 'start': 1293.502, 'duration': 1.281}, {'end': 1300.148, 'text': 'Programmers get better year after year, and they have to read and understand the bad code that they wrote just a year ago.', 'start': 1295.424, 'duration': 4.724}, {'end': 1307.354, 'text': 'And the only way to be confident making changes to that legacy code that might just be a year old, is to have CI.', 'start': 1300.168, 'duration': 7.186}, {'end': 1315.541, 'text': 'CI improves developer speed, because new changes can be made confidently without having to worry about breaking existing functionality.', 'start': 1308.955, 'duration': 6.586}, {'end': 1317.262, 'text': 'As long as the tests pass.', 'start': 1315.981, 'duration': 1.281}, {'end': 1318.963, 'text': 'CI also reduces customer churn.', 'start': 1317.562, 'duration': 1.401}, {'end': 1324.594, 'text': 'Problems in the software are much less likely to occur if you have comprehensive tests that run automatically.', 'start': 1319.892, 'duration': 4.702}, {'end': 1329.956, 'text': 'As long as you get those checkmarks, you can be reasonably sure that the core features of your application will continue working.', 'start': 1325.014, 'duration': 4.942}, {'end': 1333.418, 'text': 'So how would you integrate CI into your development process?', 'start': 1330.757, 'duration': 2.661}, {'end': 1338.74, 'text': "First, let's talk about the common branch based development process that many development teams use.", 'start': 1333.918, 'duration': 4.822}, {'end': 1342.262, 'text': 'So first, developers work on a feature branch.', 'start': 1340.041, 'duration': 2.221}, {'end': 1351.007, 'text': "So they'll take the files that are most current, the ones shown to customers at a specific set of time, they'll branch off of it.", 'start': 1343.464, 'duration': 7.543}, {'end': 1354.769, 'text': "So they'll make a new copy of the files to work on their their feature.", 'start': 1351.327, 'duration': 3.442}, {'end': 1357.37, 'text': 'independently of all of the other developers working on things.', 'start': 1354.769, 'duration': 2.601}, {'end': 1359.03, 'text': "they'll make changes to the various components.", 'start': 1357.37, 'duration': 1.66}, {'end': 1363.752, 'text': 'So this feature makes a change to the mobile app, and to the website.', 'start': 1359.53, 'duration': 4.222}, {'end': 1370.675, 'text': "And then on that branch, they'll push it back to the repository, which is usually something like GitHub, GitLab, or Bitbucket.", 'start': 1364.993, 'duration': 5.682}, {'end': 1373.95, 'text': 'then that repository will run CI.', 'start': 1371.909, 'duration': 2.041}, {'end': 1379.773, 'text': "So the CI will be configured on the repository side, it'll run all of the tests that the programmer has defined.", 'start': 1374.17, 'duration': 5.603}, {'end': 1384.815, 'text': 'And then the results of those tests will be attached to the pull request.', 'start': 1380.573, 'duration': 4.242}, {'end': 1393.06, 'text': 'And the pull request is the developer asking to take their code and to merge it into the central repository that users will be shown.', 'start': 1385.396, 'duration': 7.664}, {'end': 1401.247, 'text': 'So you take the feature branch here, you put it at the end of all of the other commits that are being shown to users.', 'start': 1393.86, 'duration': 7.387}, {'end': 1405.032, 'text': 'And so this commit is now the one that will be shown to users next.', 'start': 1401.788, 'duration': 3.244}, {'end': 1410.218, 'text': "And the next time there's a deployment, the features that the programmer made will be visible to users.", 'start': 1405.573, 'duration': 4.645}, {'end': 1412.92, 'text': "And the best part is it doesn't cost you anything.", 'start': 1411.158, 'duration': 1.762}], 'summary': 'Continuous integration (ci) improves developer speed and reduces customer churn by running automated tests, allowing confident changes to legacy code and ensuring core features continue working.', 'duration': 172.854, 'max_score': 1240.066, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY1240066.jpg'}, {'end': 1342.262, 'src': 'embed', 'start': 1308.955, 'weight': 3, 'content': [{'end': 1315.541, 'text': 'CI improves developer speed, because new changes can be made confidently without having to worry about breaking existing functionality.', 'start': 1308.955, 'duration': 6.586}, {'end': 1317.262, 'text': 'As long as the tests pass.', 'start': 1315.981, 'duration': 1.281}, {'end': 1318.963, 'text': 'CI also reduces customer churn.', 'start': 1317.562, 'duration': 1.401}, {'end': 1324.594, 'text': 'Problems in the software are much less likely to occur if you have comprehensive tests that run automatically.', 'start': 1319.892, 'duration': 4.702}, {'end': 1329.956, 'text': 'As long as you get those checkmarks, you can be reasonably sure that the core features of your application will continue working.', 'start': 1325.014, 'duration': 4.942}, {'end': 1333.418, 'text': 'So how would you integrate CI into your development process?', 'start': 1330.757, 'duration': 2.661}, {'end': 1338.74, 'text': "First, let's talk about the common branch based development process that many development teams use.", 'start': 1333.918, 'duration': 4.822}, {'end': 1342.262, 'text': 'So first, developers work on a feature branch.', 'start': 1340.041, 'duration': 2.221}], 'summary': 'Ci boosts developer speed, reduces customer churn, and ensures software stability through comprehensive automated tests.', 'duration': 33.307, 'max_score': 1308.955, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY1308955.jpg'}], 'start': 937.421, 'title': 'Devops engineering and testing basics', 'summary': 'Emphasizes the vital role of devops engineering for developer teams, stressing the negative impact on customer experience without consideration of its pillars, leading to downtime, scalability issues, and slow performance. it also delves into the significance of testing and test driven development in software development, emphasizing the role of continuous integration (ci) in automating devops and its benefits in improving developer speed and reducing customer churn.', 'chapters': [{'end': 968.6, 'start': 937.421, 'title': 'Importance of devops engineering', 'summary': 'Emphasizes the vital role of devops engineering for developer teams, stressing the negative impact on customer experience without consideration of its pillars, leading to downtime, scalability issues, and slow performance. it highlights the increasing importance of automation and resource dedication as products mature and gain more users.', 'duration': 31.179, 'highlights': ['The increasing importance of automation and resource dedication as products mature and gain more users.', 'The negative impact on customer experience without consideration of DevOps pillars, leading to downtime, scalability issues, and slow performance.', 'The vital role of DevOps engineering for developer teams.']}, {'end': 1558.094, 'start': 982.042, 'title': 'Testing and continuous integration basics', 'summary': 'Delves into the significance of testing and test driven development in software development, emphasizing the role of continuous integration (ci) in automating devops and its benefits in improving developer speed and reducing customer churn.', 'duration': 576.052, 'highlights': ['CI improves developer speed and reduces customer churn by enabling confident making of changes without worrying about breaking existing functionality as long as the tests pass. CI allows developers to make changes confidently without fear of breaking existing functionality, leading to improved developer speed and reduced customer churn, as long as the tests pass.', 'The significance of writing tests before writing the code in test driven development, as it forces developers to think about which things are important to work on and which things can be deferred to a later set of changes. In test driven development, writing tests before writing the code forces developers to consider the importance of different aspects and helps in prioritizing tasks, leading to better code quality and functionality.', 'Explanation of how CI is integrated into the development process, using a branch-based development approach where developers work on feature branches and push changes to a central repository, which then runs CI to verify the changes. The integration of CI into the development process involves developers working on feature branches, making changes, and pushing them to a central repository, which then runs CI to validate the changes before merging them into the main codebase.']}], 'duration': 620.673, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY937421.jpg', 'highlights': ['The vital role of DevOps engineering for developer teams.', 'The negative impact on customer experience without consideration of DevOps pillars, leading to downtime, scalability issues, and slow performance.', 'The increasing importance of automation and resource dedication as products mature and gain more users.', 'CI improves developer speed and reduces customer churn by enabling confident making of changes without worrying about breaking existing functionality as long as the tests pass.', 'The significance of writing tests before writing the code in test driven development, as it forces developers to think about which things are important to work on and which things can be deferred to a later set of changes.', 'Explanation of how CI is integrated into the development process, using a branch-based development approach where developers work on feature branches and push changes to a central repository, which then runs CI to verify the changes.']}, {'end': 2927.141, 'segs': [{'end': 1658.984, 'src': 'embed', 'start': 1610.264, 'weight': 0, 'content': [{'end': 1615.688, 'text': 'Or I could ask the developer to set up a screen sharing session, and they could walk me through the changes.', 'start': 1610.264, 'duration': 5.424}, {'end': 1619.19, 'text': 'Both of these add a lot of friction to the development process.', 'start': 1616.628, 'duration': 2.562}, {'end': 1624.334, 'text': "it'd be better if I could evaluate their changes without needing any involvement at all, entirely through a web interface.", 'start': 1619.19, 'duration': 5.144}, {'end': 1627.216, 'text': 'How continuous integration helps.', 'start': 1625.995, 'duration': 1.221}, {'end': 1631.441, 'text': 'allows developers to set up comprehensive tests.', 'start': 1629.08, 'duration': 2.361}, {'end': 1637.624, 'text': "So that if something doesn't work anymore, after a proposed change, it says right in the pull request.", 'start': 1632.302, 'duration': 5.322}, {'end': 1645.587, 'text': "Let's close this change for now and look at the repository to understand how to set up CI.", 'start': 1640.645, 'duration': 4.942}, {'end': 1652.91, 'text': 'In this repository, one of the services is called Cypress.', 'start': 1649.228, 'duration': 3.682}, {'end': 1655.491, 'text': "And it's an end to end testing service.", 'start': 1653.65, 'duration': 1.841}, {'end': 1658.984, 'text': 'It contains several configurations.', 'start': 1657.423, 'duration': 1.561}], 'summary': 'Continuous integration enables comprehensive testing, reducing friction in the development process and allowing changes to be evaluated through a web interface.', 'duration': 48.72, 'max_score': 1610.264, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY1610264.jpg'}, {'end': 1755.336, 'src': 'embed', 'start': 1721.022, 'weight': 3, 'content': [{'end': 1724.144, 'text': "For our use cases, it's easy to just install it directly into our GitHub account.", 'start': 1721.022, 'duration': 3.122}, {'end': 1731.468, 'text': 'We can now install it onto our GitHub repository.', 'start': 1729.167, 'duration': 2.301}, {'end': 1739.473, 'text': "And now it's listed here.", 'start': 1737.432, 'duration': 2.041}, {'end': 1743.276, 'text': "This means that we've successfully installed layer ci onto this repository.", 'start': 1739.674, 'duration': 3.602}, {'end': 1747.89, 'text': 'However, nothing will happen yet because there are no configuration files.', 'start': 1744.747, 'duration': 3.143}, {'end': 1755.336, 'text': 'We need to set up a configuration file for this repository that will start the whole stack and then run the tests in Cypress as required.', 'start': 1748.831, 'duration': 6.505}], 'summary': 'Layer ci successfully installed onto github repository, awaiting configuration file for test execution.', 'duration': 34.314, 'max_score': 1721.022, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY1721022.jpg'}, {'end': 2049.533, 'src': 'embed', 'start': 2023.684, 'weight': 4, 'content': [{'end': 2029.566, 'text': 'then you can even automate within GitHub or other source code management platforms that certain checks must pass entirely.', 'start': 2023.684, 'duration': 5.882}, {'end': 2034.828, 'text': 'So you can automate that all CI checks must pass before a change could be merged.', 'start': 2030.246, 'duration': 4.582}, {'end': 2040.53, 'text': "Let's make sure that developers are never reviewing code that's so obviously broken that it's breaking your tests.", 'start': 2035.468, 'duration': 5.062}, {'end': 2043.891, 'text': "And you don't only have to run end to end tests here.", 'start': 2041.77, 'duration': 2.121}, {'end': 2049.533, 'text': 'you can also run linters unit tests and other versions of tests which we talked about throughout this series of talks.', 'start': 2043.891, 'duration': 5.642}], 'summary': 'Automate ci checks in github to ensure all tests pass before merging code changes, including linters and unit tests.', 'duration': 25.849, 'max_score': 2023.684, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY2023684.jpg'}, {'end': 2108.481, 'src': 'embed', 'start': 2065.034, 'weight': 6, 'content': [{'end': 2066.356, 'text': "Let's get back to theory for a little bit.", 'start': 2065.034, 'duration': 1.322}, {'end': 2095.755, 'text': "Continuing on the topic of testing and continuous integration, let's talk about code coverage.", 'start': 2091.414, 'duration': 4.341}, {'end': 2102.058, 'text': 'So code coverage quantitatively measures how comprehensive the tests for a codebase are.', 'start': 2096.815, 'duration': 5.243}, {'end': 2108.481, 'text': 'you might think that you have enough tests to find all of the common bugs and to really check all of the functionality of your app.', 'start': 2102.058, 'duration': 6.423}], 'summary': 'Code coverage measures test comprehensiveness and bug finding effectiveness.', 'duration': 43.447, 'max_score': 2065.034, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY2065034.jpg'}, {'end': 2414.622, 'src': 'heatmap', 'start': 2325.535, 'weight': 0.857, 'content': [{'end': 2334.832, 'text': 'If you expect the function should work with the input two and you manually calculate what the function should return for the input to.', 'start': 2325.535, 'duration': 9.297}, {'end': 2336.515, 'text': 'this would be a unit test for your function.', 'start': 2334.832, 'duration': 1.683}, {'end': 2345.931, 'text': "But since you're only executing it on the input to this if statement, which requires an input of at least 50 to execute, I wouldn't run.", 'start': 2337.884, 'duration': 8.047}, {'end': 2354.138, 'text': "So you'd be testing this line, it would execute this line, it would execute and this line, which would also execute.", 'start': 2346.452, 'duration': 7.686}, {'end': 2359.083, 'text': "So you'd be executing five out of six lines.", 'start': 2354.619, 'duration': 4.464}, {'end': 2363.427, 'text': 'And indeed, that would be 83% test coverage.', 'start': 2361.004, 'duration': 2.423}, {'end': 2373.598, 'text': 'So just the single test gets us most of the way to understanding our function and understanding its problems.', 'start': 2364.208, 'duration': 9.39}, {'end': 2375.36, 'text': 'Related concept is called branch coverage.', 'start': 2373.658, 'duration': 1.702}, {'end': 2380.338, 'text': 'So instead of measuring how many lines of code it measures groups of lights.', 'start': 2376.337, 'duration': 4.001}, {'end': 2389.301, 'text': "In our example above, there's only two branches, there is the main branch, there's the body of the for loop.", 'start': 2381.278, 'duration': 8.023}, {'end': 2394.842, 'text': "And there's actually a third branch called the if statement body.", 'start': 2390.141, 'duration': 4.701}, {'end': 2397.663, 'text': 'So here, this line will always execute.', 'start': 2395.682, 'duration': 1.981}, {'end': 2404.619, 'text': 'the body of the for loop will only execute if i is less than n.', 'start': 2398.735, 'duration': 5.884}, {'end': 2409.142, 'text': 'So here you need n to be greater than or equal to one for these lines to execute.', 'start': 2404.619, 'duration': 4.523}, {'end': 2414.622, 'text': 'And this line will only execute if i is greater than or equal to 49.', 'start': 2410.042, 'duration': 4.58}], 'summary': 'Unit testing achieves 83% coverage, considering branch coverage as well.', 'duration': 89.087, 'max_score': 2325.535, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY2325535.jpg'}, {'end': 2484.594, 'src': 'embed', 'start': 2456.457, 'weight': 7, 'content': [{'end': 2459.659, 'text': 'So when should you care about this line coverage and branch coverage?', 'start': 2456.457, 'duration': 3.202}, {'end': 2464.042, 'text': "We've already discussed one scenario where you've inherited an existing code base.", 'start': 2460.6, 'duration': 3.442}, {'end': 2467.225, 'text': "However, it's important in many different situations.", 'start': 2464.963, 'duration': 2.262}, {'end': 2471.748, 'text': 'In general, you should measure and optimize for code coverage if any of the following are true.', 'start': 2468.245, 'duration': 3.503}, {'end': 2476.252, 'text': "Your product has users, and those users might leave if they're affected by bugs.", 'start': 2472.509, 'duration': 3.743}, {'end': 2479.19, 'text': "which case it's important to measure code coverage,", 'start': 2477.208, 'duration': 1.982}, {'end': 2484.594, 'text': 'because it lets you work with your team to improve the code coverage and reduce the number of bugs.', 'start': 2479.19, 'duration': 5.404}], 'summary': 'Measure and optimize code coverage to reduce bugs and retain users.', 'duration': 28.137, 'max_score': 2456.457, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY2456457.jpg'}, {'end': 2624.07, 'src': 'embed', 'start': 2594.187, 'weight': 8, 'content': [{'end': 2597.509, 'text': "So it's important not to over optimize for these things before they're important.", 'start': 2594.187, 'duration': 3.322}, {'end': 2599.531, 'text': "And it's a subjective idea.", 'start': 2598.03, 'duration': 1.501}, {'end': 2603.253, 'text': "But really, you'll notice when your users start complaining about stability.", 'start': 2599.591, 'duration': 3.662}, {'end': 2609.637, 'text': 'So organizationally, there are some common policies related to code coverage.', 'start': 2605.975, 'duration': 3.662}, {'end': 2614.721, 'text': 'The first one is useful when you inherit a code base.', 'start': 2612.459, 'duration': 2.262}, {'end': 2617.543, 'text': 'And the policy is that code coverage must not decrease.', 'start': 2615.401, 'duration': 2.142}, {'end': 2620.309, 'text': 'This one is one of the easiest ones to automate.', 'start': 2618.649, 'duration': 1.66}, {'end': 2624.07, 'text': "It's especially useful if you're taking over an existing code base, as I mentioned.", 'start': 2620.769, 'duration': 3.301}], 'summary': 'Maintain code coverage to avoid user complaints about stability and automate policy for inheriting code base.', 'duration': 29.883, 'max_score': 2594.187, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY2594187.jpg'}, {'end': 2727.39, 'src': 'embed', 'start': 2699.103, 'weight': 9, 'content': [{'end': 2703.707, 'text': "And so developers will be less likely to make them regardless of whether they're important to the users or not.", 'start': 2699.103, 'duration': 4.604}, {'end': 2709.171, 'text': 'So it might be useful to have an exemptions policy in place for things like third party integrations.', 'start': 2704.408, 'duration': 4.763}, {'end': 2714.356, 'text': 'If your organization decides to go for this code coverage must not decrease policy.', 'start': 2709.692, 'duration': 4.664}, {'end': 2719.66, 'text': 'Another useful policy is code owners for test files.', 'start': 2717.298, 'duration': 2.362}, {'end': 2727.39, 'text': "If you've used code coverage automation to keep code while tested, it's often beneficial to define code owners for the test themselves.", 'start': 2720.888, 'duration': 6.502}], 'summary': 'Implement an exemptions policy for third-party integrations. maintain code coverage and assign code owners for test files.', 'duration': 28.287, 'max_score': 2699.103, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY2699103.jpg'}, {'end': 2858.508, 'src': 'heatmap', 'start': 2734.452, 'weight': 1, 'content': [{'end': 2740.674, 'text': 'So the tests define what success means for a function or for an algorithm.', 'start': 2734.452, 'duration': 6.222}, {'end': 2746.976, 'text': 'then changing the tests for a new implementation would need to be approved by a senior developer or manager.', 'start': 2740.674, 'duration': 6.302}, {'end': 2750.809, 'text': 'GitHub with an engineering manager.', 'start': 2748.667, 'duration': 2.142}, {'end': 2761.759, 'text': 'a GitHub code owners file might contain this, which means that spec.js is a common JavaScript testing naming convention.', 'start': 2750.809, 'duration': 10.95}, {'end': 2763.981, 'text': 'And at engineering manager.', 'start': 2762.76, 'duration': 1.221}, {'end': 2768.586, 'text': "username means if, if there's a file called code owners which contains this,", 'start': 2763.981, 'duration': 4.605}, {'end': 2774.331, 'text': 'then the engineering manager will need to approve any change which changes a test, which is probably a good policy.', 'start': 2768.586, 'duration': 5.745}, {'end': 2784.876, 'text': "So if you're working in a large code base with test driven development especially, or if you're hiring interns or contractors,", 'start': 2777.972, 'duration': 6.904}, {'end': 2792, 'text': "or if your users are especially sensitive to bugs and you're afraid that they'll have a bad experience if even small bugs make it to them,", 'start': 2784.876, 'duration': 7.124}, {'end': 2795.042, 'text': "it might be in your team's best interest to install a code coverage measurement tool.", 'start': 2792, 'duration': 3.042}, {'end': 2803.107, 'text': 'And at the time of writing, these are the three most common ones in the open source world, code cove coveralls and code climate.', 'start': 2796.163, 'duration': 6.944}, {'end': 2819.667, 'text': "So we've talked about testing, and we've talked about continuous integration.", 'start': 2816.906, 'duration': 2.761}, {'end': 2825.611, 'text': 'And those are really like the initial things that are set up in a DevOps code review automation pipeline.', 'start': 2820.288, 'duration': 5.323}, {'end': 2829.173, 'text': 'But the problem is that it requires the developers to be on board.', 'start': 2826.471, 'duration': 2.702}, {'end': 2836.176, 'text': 'And of course, developers are probably busy building features and might not necessarily want to make tests or improve test coverage.', 'start': 2829.573, 'duration': 6.603}, {'end': 2842.96, 'text': "So let's talk about linting, which is something that approximates testing, but doesn't need the developers to spend any time.", 'start': 2837.177, 'duration': 5.783}, {'end': 2850.943, 'text': "Linters are programs that look at a program's source code and find problems automatically.", 'start': 2846.4, 'duration': 4.543}, {'end': 2857.087, 'text': "They're a common feature of pull request automation because they ensure that obvious bugs do not make it to production.", 'start': 2851.624, 'duration': 5.463}, {'end': 2858.508, 'text': 'Obvious here in quotes.', 'start': 2857.568, 'duration': 0.94}], 'summary': 'Tests define success, code coverage tools recommended, linters for bug prevention.', 'duration': 38.22, 'max_score': 2734.452, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY2734452.jpg'}], 'start': 1567.958, 'title': 'Importance of continuous integration for code reviews', 'summary': 'Emphasizes challenges of reviewing code changes without continuous integration, advocating for comprehensive tests with cypress, details setting up ci using layer ci, discusses code coverage and branch analysis, and shares best practices for code review and automation.', 'chapters': [{'end': 1684.118, 'start': 1567.958, 'title': 'Importance of continuous integration for code reviews', 'summary': 'Emphasizes the challenges of reviewing code changes without a continuous integration system, highlighting the difficulty in understanding the impact of changes and the need for a web interface, while also advocating for continuous integration to set up comprehensive tests, such as end-to-end testing with cypress.', 'duration': 116.16, 'highlights': ['The importance of continuous integration is highlighted, as it allows developers to set up comprehensive tests, leading to a more efficient code review process.', 'Challenges in reviewing code changes without a continuous integration system are discussed, emphasizing the difficulty in understanding the ramifications of changes and the additional friction added to the development process.', 'The need for a web interface to evaluate code changes without requiring local involvement or screen sharing sessions is emphasized, indicating the potential for improved efficiency in the code review process.', 'End-to-end testing with Cypress is mentioned as a way to set up comprehensive tests, providing specific examples such as entering a username and password, logging in, and submitting a message, demonstrating the value of such testing in ensuring the functionality of the application.']}, {'end': 2323.017, 'start': 1685.768, 'title': 'Setting up ci with layer ci', 'summary': 'Details the process of setting up continuous integration using layer ci, including installing the ci plugin into github, configuring the repository, running end-to-end tests, and automating tests to provide confidence in code changes, with the ability to enforce passing ci checks before merging.', 'duration': 637.249, 'highlights': ['Installing Layer CI onto the GitHub repository and configuring the repository with a CI configuration file. Details the process of installing Layer CI onto the GitHub repository and setting up a CI configuration file to initiate the test runner and run tests using Docker Compose, providing automated testing for code changes.', 'Automating CI checks to provide developers with a success metric and reviewers with confidence in the code changes. Highlights the automation of CI checks, which provides a success metric for developers and ensures that reviewers can have confidence in the code changes, with the ability to view test results directly within the pull request view.', 'Enforcing passing CI checks before merging code changes and the ability to run various types of tests including end-to-end tests, linters, and unit tests. Emphasizes the importance of enforcing passing CI checks before merging code changes and the ability to run different types of tests, such as end-to-end tests, linters, and unit tests, ensuring code quality and functionality.', 'Explaining the significance of code coverage in measuring test comprehensiveness and its impact on confidently making changes to the codebase. Details the importance of code coverage in evaluating the comprehensiveness of tests and its role in instilling confidence in making changes to the codebase, especially in complex systems with existing users.', 'Defining the types of lines in a program and explaining code coverage as the ratio of executed non-syntax lines to the total non-syntax lines. Explains the three types of lines in a program and defines code coverage as the ratio of executed non-syntax lines to the total non-syntax lines, providing a clear understanding of code coverage metrics.']}, {'end': 2698.823, 'start': 2325.535, 'title': 'Code coverage and branch analysis', 'summary': "Discusses the concept of code coverage, including unit tests, branch coverage, and its importance in maintaining stability and reducing bugs, emphasizing that code coverage analysis should be optimized based on the product's user base and the developers' expertise, with the mention of common policies related to code coverage.", 'duration': 373.288, 'highlights': ['The chapter discusses the concept of code coverage, including unit tests, branch coverage, and its importance in maintaining stability and reducing bugs. The chapter explains the concept of code coverage, including the use of unit tests and branch coverage, emphasizing its importance in maintaining stability and reducing bugs.', "It emphasizes that code coverage analysis should be optimized based on the product's user base and the developers' expertise. The chapter emphasizes the need to optimize code coverage analysis based on the product's user base and the expertise of the developers, ensuring that it aligns with the specific requirements of the project.", 'The chapter mentions common policies related to code coverage, such as the policy that code coverage must not decrease. Common policies related to code coverage are mentioned, including the requirement that code coverage must not decrease, which is particularly useful when inheriting an existing code base.']}, {'end': 2927.141, 'start': 2699.103, 'title': 'Code review and automation best practices', 'summary': 'Discusses the importance of code coverage, policies for exemptions, and the use of code owners for test files, as well as the benefits of linting and its role in ensuring code quality, with examples and recommendations for common tools.', 'duration': 228.038, 'highlights': ['The chapter discusses the importance of code coverage, policies for exemptions, and the use of code owners for test files. Code coverage is emphasized as important to maintain, along with the suggestion of having an exemptions policy for third-party integrations and implementing code owners for test files.', 'The benefits of linting and its role in ensuring code quality are explained, along with examples and recommendations for common tools. Lack of developer involvement in testing is addressed by highlighting the benefits of linting, which can automatically find problems in the source code to ensure obvious bugs do not make it to production. Examples of problematic code are provided to illustrate the importance of linting.']}], 'duration': 1359.183, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY1567958.jpg', 'highlights': ['Setting up comprehensive tests with Cypress for efficient code review.', 'Challenges of reviewing code changes without continuous integration.', 'Importance of a web interface for evaluating code changes without local involvement.', 'Installing Layer CI onto GitHub repository and configuring CI.', 'Automating CI checks to provide success metric and reviewer confidence.', 'Enforcing passing CI checks before merging code changes.', 'Explaining the significance of code coverage in measuring test comprehensiveness.', "Optimizing code coverage analysis based on product's user base and developers' expertise.", 'Mentioning common policies related to code coverage, such as not decreasing.', 'Importance of code coverage, policies for exemptions, and use of code owners for test files.', 'Explaining the benefits of linting and its role in ensuring code quality.']}, {'end': 3697.162, 'segs': [{'end': 3113.791, 'src': 'embed', 'start': 3087.85, 'weight': 0, 'content': [{'end': 3092.951, 'text': 'And this will take all of the source files and then format them with our style guide so that they all pass the style guide.', 'start': 3087.85, 'duration': 5.101}, {'end': 3102.802, 'text': 'And of course, if your CI system is running tests automatically every time new code is pushed, the code could be automatically linted as well.', 'start': 3095.816, 'duration': 6.986}, {'end': 3108.226, 'text': "Programmers shouldn't have to wait for a human reviewer to tell them whether the code is linted and styled appropriately.", 'start': 3103.622, 'duration': 4.604}, {'end': 3113.791, 'text': "In most cases, it's cheap and convenient to run linting and formatting automatically within a CI system.", 'start': 3109.067, 'duration': 4.724}], 'summary': 'Automatically format and lint source files to pass style guide and improve code quality.', 'duration': 25.941, 'max_score': 3087.85, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY3087850.jpg'}, {'end': 3205.705, 'src': 'embed', 'start': 3172.642, 'weight': 1, 'content': [{'end': 3175.684, 'text': 'the reviewer might still leave some feedback for future reference,', 'start': 3172.642, 'duration': 3.042}, {'end': 3181.687, 'text': "but they shouldn't be blocking commits getting to production because of small stylistic choices that aren't even in the linter.", 'start': 3175.684, 'duration': 6.003}, {'end': 3187.21, 'text': 'A better long term solution is to set up a commit back bot.', 'start': 3183.408, 'duration': 3.802}, {'end': 3192.861, 'text': 'which is a common idea that happens all over the place in code review automation.', 'start': 3188.24, 'duration': 4.621}, {'end': 3195.822, 'text': 'But in this specific example, it might look like this.', 'start': 3193.762, 'duration': 2.06}, {'end': 3205.705, 'text': "So you'd say, if the code is not linted, run ESLint with a dash dash fix flag, which again goes through all of the source files.", 'start': 3196.762, 'duration': 8.943}], 'summary': 'Recommend implementing a commit bot to address linting issues in code review automation.', 'duration': 33.063, 'max_score': 3172.642, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY3172642.jpg'}, {'end': 3400.966, 'src': 'embed', 'start': 3369.516, 'weight': 3, 'content': [{'end': 3374.265, 'text': 'So in comparison to most other code automation tools, linters are exceptionally easy to set up.', 'start': 3369.516, 'duration': 4.749}, {'end': 3380.891, 'text': 'Any team with more than one developer should almost immediately set up a linter to catch obvious bugs like infinite loops.', 'start': 3374.986, 'duration': 5.905}, {'end': 3387.698, 'text': 'Just by looking at the code, the linter would be able to tell you whether there was a common programmatic error like an infinite loop.', 'start': 3381.932, 'duration': 5.766}, {'end': 3391.633, 'text': 'Automatic linting comes standard with many code editors,', 'start': 3389.13, 'duration': 2.503}, {'end': 3400.966, 'text': 'so it would be wise to teach developers how to configure their code editors to use the existing linting rules that your team has set up in the CI automation,', 'start': 3391.633, 'duration': 9.333}], 'summary': 'Linters are easy to set up; crucial for catching bugs like infinite loops; standard in many code editors.', 'duration': 31.45, 'max_score': 3369.516, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY3369516.jpg'}, {'end': 3487.371, 'src': 'heatmap', 'start': 3400.966, 'weight': 0.945, 'content': [{'end': 3404.29, 'text': "so that the developers don't have to wait to push their code to get this feedback.", 'start': 3400.966, 'duration': 3.324}, {'end': 3406.794, 'text': 'They can get the yellow squigglies directly in their editor.', 'start': 3404.411, 'duration': 2.383}, {'end': 3412.804, 'text': 'In teams working on earlier products, linters can help avoid writing unit tests at all.', 'start': 3408.562, 'duration': 4.242}, {'end': 3422.169, 'text': 'Instead of relying on a test suite, you can rely often on static analysis to find common bugs, like the code not compiling at all,', 'start': 3414.185, 'duration': 7.984}, {'end': 3425.591, 'text': 'or infinite loops or stylistic problems.', 'start': 3422.169, 'duration': 3.422}, {'end': 3432.895, 'text': 'This helps small teams refer their product as many users get feedback without needing to lock things in with tests.', 'start': 3426.992, 'duration': 5.903}, {'end': 3436.897, 'text': "Alright, so that's it for linting and code style.", 'start': 3434.796, 'duration': 2.101}, {'end': 3437.798, 'text': "We'll see you in the next video.", 'start': 3436.997, 'duration': 0.801}, {'end': 3456.722, 'text': "Let's finish up our discussion of code review automation by talking about ephemeral environments,", 'start': 3452, 'duration': 4.722}, {'end': 3461.663, 'text': 'which are really the latest and greatest when it comes to doing code reviews and helping developers get their changes merged.', 'start': 3456.722, 'duration': 4.941}, {'end': 3469.206, 'text': 'ephemeral environments are temporary environments that contain a self contained version of the entire application.', 'start': 3464.084, 'duration': 5.122}, {'end': 3471.691, 'text': 'generally for every feature branch.', 'start': 3470.109, 'duration': 1.582}, {'end': 3478.9, 'text': "They're often spun up by a slack bot or automatically on every commit using DevOps platforms like layer CI itself or Heroku.", 'start': 3472.692, 'duration': 6.208}, {'end': 3487.371, 'text': 'Temporary environments are overtaking traditional CI platforms as the most valuable DevOps code review experience.', 'start': 3480.462, 'duration': 6.909}], 'summary': 'Linting and code style feedback, ephemeral environments for code reviews.', 'duration': 86.405, 'max_score': 3400.966, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY3400966.jpg'}, {'end': 3610.701, 'src': 'embed', 'start': 3577.745, 'weight': 2, 'content': [{'end': 3583.968, 'text': 'Well, the most common reason to adopt an Ephemeral Environment workflow is that it accelerates the software development lifecycle.', 'start': 3577.745, 'duration': 6.223}, {'end': 3590.772, 'text': 'Developers can review the results of changes visually, instead of needing to exclusively give feedback on the code change itself.', 'start': 3584.789, 'duration': 5.983}, {'end': 3596.275, 'text': 'Additionally, developers can share their work with non-technical collaborators, such as designers,', 'start': 3591.732, 'duration': 4.543}, {'end': 3598.336, 'text': 'as easily as sharing a link to the proposed version.', 'start': 3596.275, 'duration': 2.061}, {'end': 3610.701, 'text': 'So you could post a slack message like this saying Could you go to this link and give me feedback instead of needing to set up a zoom call to share your screen to get the other person to look at your proposed changes?', 'start': 3599.676, 'duration': 11.025}], 'summary': 'Adopting ephemeral environment workflow accelerates software development, allowing visual feedback and easier sharing with non-technical collaborators.', 'duration': 32.956, 'max_score': 3577.745, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY3577745.jpg'}], 'start': 2927.901, 'title': 'Code style, linting, and ephemeral environments', 'summary': 'Delves into the importance of adopting a global style guide, using linters and auto formatters for code consistency, and setting up automation for code review feedback, ultimately improving development speed. it also discusses the benefits of linting for bug catching and the advantages of ephemeral environments for accelerating the software development lifecycle.', 'chapters': [{'end': 3366.953, 'start': 2927.901, 'title': 'Code style and linting best practices', 'summary': 'Explores the importance of adopting a global style guide, using linters and auto formatters to maintain code style consistency, and setting up automation for code review feedback, ultimately improving the development speed of entire teams.', 'duration': 439.052, 'highlights': ['Most programming languages like Python and Go come with their own style guides and automation, such as PEP8 in Python and the standard formatter in Go, to maintain stylistic similarity. Programming languages like Python and Go provide built-in style guides and automation, such as PEP8 for Python, and the standard formatter in Go, to ensure uniform code style.', 'Automating linting and formatting within a CI system is cost-effective and convenient, allowing developers to receive quick stylistic feedback without human intervention. Automating linting and formatting within a CI system is cost-effective and convenient, enabling developers to swiftly receive stylistic feedback without human intervention.', 'Setting up a commit bot to automatically run linters, fix stylistic errors, and create a new branch with the linted code can streamline the code review process and prevent stylistic feedback from blocking commits. Implementing a commit bot to automatically run linters, fix stylistic errors, and create a new branch with linted code can streamline the code review process and prevent stylistic feedback from blocking commits.']}, {'end': 3697.162, 'start': 3369.516, 'title': 'Linting and ephemeral environments', 'summary': 'Discusses the benefits of linting for catching bugs and the advantages of ephemeral environments for accelerating the software development lifecycle, enabling visual feedback, and handling temporary and isolated resources.', 'duration': 327.646, 'highlights': ['Benefits of Ephemeral Environments Ephemeral environments accelerate the software development lifecycle by enabling visual feedback, sharing work with non-technical collaborators, and handling temporary and isolated resources.', 'Linters for Bug Detection Linters are easy to set up and can catch common programmatic errors like infinite loops, helping teams avoid writing unit tests and providing feedback without needing to push the code.', 'Setting up Ephemeral Environments The hardest part of setting up ephemeral environments involves dealing with state, such as databases and microservices, and the end goal should be to have a fresh copy of the database for every commit.']}], 'duration': 769.261, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY2927901.jpg', 'highlights': ['Automating linting and formatting within a CI system is cost-effective and convenient, enabling developers to swiftly receive stylistic feedback without human intervention.', 'Setting up a commit bot to automatically run linters, fix stylistic errors, and create a new branch with linted code can streamline the code review process and prevent stylistic feedback from blocking commits.', 'Ephemeral environments accelerate the software development lifecycle by enabling visual feedback, sharing work with non-technical collaborators, and handling temporary and isolated resources.', 'Linters are easy to set up and can catch common programmatic errors like infinite loops, helping teams avoid writing unit tests and providing feedback without needing to push the code.']}, {'end': 4255.563, 'segs': [{'end': 3770.023, 'src': 'embed', 'start': 3719.935, 'weight': 0, 'content': [{'end': 3723.839, 'text': 'Another hard problem to solve with ephemeral environments is the lifecycle.', 'start': 3719.935, 'duration': 3.904}, {'end': 3726.822, 'text': 'So when would you create them? And when you destroy them?', 'start': 3724.68, 'duration': 2.142}, {'end': 3733.598, 'text': 'A classic approach is to tie the lifecycle of a pull request to the lifecycle of an ephemeral environment.', 'start': 3727.97, 'duration': 5.628}, {'end': 3741.208, 'text': 'So if the developer opens a pull request, create an environment for them, keep it running 24 seven until the developer deletes the environment.', 'start': 3734.198, 'duration': 7.01}, {'end': 3745.132, 'text': 'biggest factor I consider there is cost.', 'start': 3743.271, 'duration': 1.861}, {'end': 3755.34, 'text': "If each ephemeral environment costs 10% of production, so 10% cheaper, and you have 30 open pull requests, you'd be quadrupling your monthly costs.", 'start': 3745.633, 'duration': 9.707}, {'end': 3759.863, 'text': "So you know, that's an expensive developer tool.", 'start': 3756.34, 'duration': 3.523}, {'end': 3768.261, 'text': 'Another approach is to create a chat ops bot that allows creating new environments for a specific branch with a specific timeout.', 'start': 3762.116, 'duration': 6.145}, {'end': 3770.023, 'text': 'So, for example,', 'start': 3768.902, 'duration': 1.121}], 'summary': 'Ephemeral environments tied to pull request lifecycle to manage costs and create chat ops bot for controlled environment creation.', 'duration': 50.088, 'max_score': 3719.935, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY3719935.jpg'}, {'end': 3900.263, 'src': 'embed', 'start': 3856.448, 'weight': 2, 'content': [{'end': 3862.992, 'text': 'this concept becomes continuous staging, where CI CD and ephemeral environments form a single CI CD flow,', 'start': 3856.448, 'duration': 6.544}, {'end': 3866.114, 'text': 'where a single base sets up all of the requirements for everything.', 'start': 3862.992, 'duration': 3.122}, {'end': 3875.821, 'text': 'And then that forks off into the unit tests but also the server but also the review environment but also the linter is everything comes from that common base.', 'start': 3866.755, 'duration': 9.066}, {'end': 3887.731, 'text': "If you're going to make them yourself, you should probably budget about a month per month of time it took to set up your environment.", 'start': 3879.965, 'duration': 7.766}, {'end': 3893.655, 'text': 'So if your production environment has many different microservices and has many different databases,', 'start': 3888.351, 'duration': 5.304}, {'end': 3896.237, 'text': "it'll be relatively difficult to set up an environment flow.", 'start': 3893.655, 'duration': 2.582}, {'end': 3900.263, 'text': 'large companies like Facebook have set this up for their internal pull requests.', 'start': 3897.28, 'duration': 2.983}], 'summary': 'Continuous staging integrates ci/cd, ephemeral environments, and common base, reducing environment setup time to about a month per microservice, as seen in large companies like facebook.', 'duration': 43.815, 'max_score': 3856.448, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY3856448.jpg'}, {'end': 3949.206, 'src': 'embed', 'start': 3921.9, 'weight': 4, 'content': [{'end': 3926.421, 'text': "you're doing just front end development, some popular choices are Vercel and Netlify.", 'start': 3921.9, 'duration': 4.521}, {'end': 3934.183, 'text': "But if you're doing full stack deployments, really the only choices available right now are layer ci itself and Heroku review apps.", 'start': 3927.041, 'duration': 7.142}, {'end': 3942.865, 'text': 'There are some options available in many source code platforms like Git lab has a environments feature.', 'start': 3935.143, 'duration': 7.722}, {'end': 3946.005, 'text': "But it's not really truly an ephemeral environments feature.", 'start': 3943.725, 'duration': 2.28}, {'end': 3949.206, 'text': 'So you should explore all of those options to make an informed decision.', 'start': 3946.165, 'duration': 3.041}], 'summary': "For front-end development, vercel and netlify are popular choices, while for full stack deployments, options are limited to layer ci, heroku review apps, and gitlab's environments feature.", 'duration': 27.306, 'max_score': 3921.9, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY3921900.jpg'}, {'end': 4023.79, 'src': 'embed', 'start': 3998.522, 'weight': 6, 'content': [{'end': 4005.884, 'text': 'can set up ephemeral environments which are small production deployments you can use to evaluate the changes live as a reviewer.', 'start': 3998.522, 'duration': 7.362}, {'end': 4014.847, 'text': "Again, let's say we're changing the color, this time back from blue to purple, and we'd like someone to be able to efficiently review our change,", 'start': 4006.464, 'duration': 8.383}, {'end': 4021.069, 'text': 'not just by looking at the test results, but also by looking at the ephemeral environment to run manual QA, you might say.', 'start': 4014.847, 'duration': 6.222}, {'end': 4023.79, 'text': "In this case, it's actually very easy to set up.", 'start': 4021.909, 'duration': 1.881}], 'summary': 'Set up ephemeral environments for live change review.', 'duration': 25.268, 'max_score': 3998.522, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY3998522.jpg'}, {'end': 4112.902, 'src': 'embed', 'start': 4085.334, 'weight': 7, 'content': [{'end': 4087.975, 'text': 'Here we have our tests running in the main layer file.', 'start': 4085.334, 'duration': 2.641}, {'end': 4094.519, 'text': 'The main layer file has again built all of the services, started all of the services.', 'start': 4089.676, 'duration': 4.843}, {'end': 4098.742, 'text': "And now it's running our Cypress tests the same way it did in the CI chapter.", 'start': 4095.02, 'duration': 3.722}, {'end': 4105.959, 'text': "But after those Cypress tests run, we'll have a second environment, which is inheriting from the first.", 'start': 4100.836, 'duration': 5.123}, {'end': 4110.701, 'text': 'And that second environment will have a clickable link that can be used for manual QA.', 'start': 4106.578, 'duration': 4.123}, {'end': 4112.902, 'text': "So let's see that here.", 'start': 4111.941, 'duration': 0.961}], 'summary': 'Main layer file runs cypress tests for ci, creating second environment with manual qa link.', 'duration': 27.568, 'max_score': 4085.334, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY4085334.jpg'}, {'end': 4222.88, 'src': 'embed', 'start': 4195.518, 'weight': 8, 'content': [{'end': 4200.16, 'text': "This means that you don't need 100% test coverage to be able to understand the nuance of a change.", 'start': 4195.518, 'duration': 4.642}, {'end': 4201.801, 'text': 'For every pull request,', 'start': 4200.821, 'duration': 0.98}, {'end': 4208.205, 'text': "you'll be able to spin up a new environment automatically and then wake up that environment when a review needs to be completed.", 'start': 4201.801, 'duration': 6.404}, {'end': 4214.196, 'text': "now that we're satisfied that the environment works correctly, we can merge the pull request.", 'start': 4210.535, 'duration': 3.661}, {'end': 4222.88, 'text': 'And from now on, all changes which edit the website can be manually QA.', 'start': 4218.098, 'duration': 4.782}], 'summary': 'Automated environment setup for pull requests reduces manual qa for website changes.', 'duration': 27.362, 'max_score': 4195.518, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY4195518.jpg'}], 'start': 3698.042, 'title': 'Ephemeral environments for devops', 'summary': 'Emphasizes the importance of using ephemeral environments for running end-to-end tests, lifecycle management, and cost considerations. it also discusses how to set up these environments for efficient and accurate testing processes, including creating fresh environments for each pull request.', 'chapters': [{'end': 4021.069, 'start': 3698.042, 'title': 'Ephemeral environments for devops', 'summary': 'Discusses the importance of using ephemeral environments for running end-to-end tests, lifecycle management, and cost considerations, emphasizing the need for continuous staging and the challenges of setting up environments internally.', 'duration': 323.027, 'highlights': ['Ephemeral environments cost 10% of production and can quadruple monthly costs with 30 open pull requests. The cost consideration of ephemeral environments is emphasized, with a warning that having 30 open pull requests can quadruple monthly costs if each environment costs 10% of production.', 'Lifecycle management is a hard problem to solve with ephemeral environments, and a classic approach is to tie the lifecycle of a pull request to the lifecycle of an ephemeral environment. The challenge of lifecycle management for ephemeral environments is highlighted, with a proposed classic approach of tying the lifecycle of a pull request to that of an ephemeral environment.', 'Continuous staging integrates CI/CD and ephemeral environments, providing a single base for setting up all requirements and forking off into various testing environments. The concept of continuous staging, integrating CI/CD and ephemeral environments, is discussed, highlighting the creation of a single base for all requirements and forking off into various testing environments.', 'Setting up internal environment flows may take about a month per month of time for the production environment and is recommended for larger companies with ample resources. The complexity and time required for setting up internal environment flows are mentioned, with a recommendation for larger companies to consider third-party providers due to the resource-intensive nature of the task.', 'Popular choices for ephemeral environments are Vercel, Netlify for front-end development, and LayerCI, Heroku for full-stack deployments. The popular choices for ephemeral environments, including Vercel, Netlify, LayerCI, and Heroku, are mentioned, with specific considerations for front-end and full-stack deployments.']}, {'end': 4255.563, 'start': 4021.909, 'title': 'Setting up ephemeral environments', 'summary': 'Explains how to set up ephemeral environments for testing and review, allowing the creation of fresh environments for each pull request and enabling manual qa, thereby ensuring efficient and accurate testing processes.', 'duration': 233.654, 'highlights': ['Ephemeral environment allows for the creation of fresh environments for each pull request, enabling efficient testing and review processes.', 'Manual QA can be conducted in the ephemeral environment, ensuring thorough testing and validation of changes.', 'The main layer file runs Cypress tests and builds services, providing a comprehensive testing environment for the application.', 'Ephemeral environments eliminate the need for 100% test coverage, as they enable the understanding of nuanced changes through the creation of new environments for each pull request.']}], 'duration': 557.521, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY3698042.jpg', 'highlights': ['Ephemeral environments cost 10% of production and can quadruple monthly costs with 30 open pull requests.', 'Lifecycle management is a hard problem to solve with ephemeral environments, and a classic approach is to tie the lifecycle of a pull request to the lifecycle of an ephemeral environment.', 'Continuous staging integrates CI/CD and ephemeral environments, providing a single base for setting up all requirements and forking off into various testing environments.', 'Setting up internal environment flows may take about a month per month of time for the production environment and is recommended for larger companies with ample resources.', 'Popular choices for ephemeral environments are Vercel, Netlify for front-end development, and LayerCI, Heroku for full-stack deployments.', 'Ephemeral environment allows for the creation of fresh environments for each pull request, enabling efficient testing and review processes.', 'Manual QA can be conducted in the ephemeral environment, ensuring thorough testing and validation of changes.', 'The main layer file runs Cypress tests and builds services, providing a comprehensive testing environment for the application.', 'Ephemeral environments eliminate the need for 100% test coverage, as they enable the understanding of nuanced changes through the creation of new environments for each pull request.']}, {'end': 4975.391, 'segs': [{'end': 4297.683, 'src': 'embed', 'start': 4256.103, 'weight': 1, 'content': [{'end': 4258.404, 'text': "In this one, we'll be talking about foundational concepts.", 'start': 4256.103, 'duration': 2.301}, {'end': 4263.567, 'text': "And primarily, when you talk about deploying, you're talking about VMs, and you're talking about containers.", 'start': 4258.884, 'duration': 4.683}, {'end': 4266.588, 'text': 'And containers are often also known as Docker.', 'start': 4264.347, 'duration': 2.241}, {'end': 4271.191, 'text': "So let's talk about the difference between those two before we talk about deploying anything.", 'start': 4267.529, 'duration': 3.662}, {'end': 4277.029, 'text': "When people talk about DevOps deployments, they're usually talking about deploying to Linux.", 'start': 4273.507, 'duration': 3.522}, {'end': 4280.472, 'text': 'A large portion of all deployments are to Linux servers.', 'start': 4277.59, 'duration': 2.882}, {'end': 4285.975, 'text': 'And containers are really only defined in terms of Linux in production as of right now.', 'start': 4281.372, 'duration': 4.603}, {'end': 4291.098, 'text': "So with all that in mind, let's talk about Linux in the abstract.", 'start': 4287.956, 'duration': 3.142}, {'end': 4297.683, 'text': "So what Linux really helps you do is take care of four things when you're writing programs.", 'start': 4292.419, 'duration': 5.264}], 'summary': 'Discussion on deploying to linux, focusing on vms and containers, with emphasis on the prevalence of linux in devops deployments.', 'duration': 41.58, 'max_score': 4256.103, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY4256103.jpg'}, {'end': 4382.294, 'src': 'embed', 'start': 4357.291, 'weight': 0, 'content': [{'end': 4363.574, 'text': 'So Linux takes care of all of that and make sure that the right files are on the right disks, and that programs have access to those files.', 'start': 4357.291, 'duration': 6.283}, {'end': 4366.37, 'text': "Finally, there's devices.", 'start': 4365.45, 'duration': 0.92}, {'end': 4371.151, 'text': "So even beyond disk memory and CPU, there's things like GPU.", 'start': 4367.01, 'duration': 4.141}, {'end': 4377.192, 'text': 'So for machine learning, you see GPU often, and things like network cards, which you use for connecting to the internet.', 'start': 4371.451, 'duration': 5.741}, {'end': 4382.294, 'text': 'Linux needs to take these individual resources and allocate them to processes.', 'start': 4378.473, 'duration': 3.821}], 'summary': 'Linux manages files, devices, and resources allocation for processes.', 'duration': 25.003, 'max_score': 4357.291, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY4357291.jpg'}, {'end': 4937.005, 'src': 'embed', 'start': 4873.311, 'weight': 3, 'content': [{'end': 4878.732, 'text': 'Various benchmarks show that CPUs and VMs are about 10 to 20% slower than containers.', 'start': 4873.311, 'duration': 5.421}, {'end': 4886.394, 'text': 'VMs also usually use 50 to 100% more storage because they need all of the things that an operating system would need.', 'start': 4879.833, 'duration': 6.561}, {'end': 4890.435, 'text': "duplicate containers don't need all of the files, they only need the application files.", 'start': 4886.394, 'duration': 4.041}, {'end': 4895.597, 'text': 'And finally, VMs use about 200 megabytes more memory for the operating system itself.', 'start': 4891.476, 'duration': 4.121}, {'end': 4900.597, 'text': "Again, containers don't need all of the operating system because it's the processes that are being lied to.", 'start': 4896.454, 'duration': 4.143}, {'end': 4905.22, 'text': "So VMs use more memory, they're slower, and they need more storage.", 'start': 4901.357, 'duration': 3.863}, {'end': 4910.503, 'text': 'So given these performance benefits, it looks like containers are almost always a better choice.', 'start': 4906.641, 'duration': 3.862}, {'end': 4912.505, 'text': 'And in most cases, they are.', 'start': 4911.424, 'duration': 1.081}, {'end': 4915.587, 'text': "However, there's a few cases where VMs are a better choice.", 'start': 4912.965, 'duration': 2.622}, {'end': 4917.628, 'text': 'Again, VMs mean virtual machines.', 'start': 4916.107, 'duration': 1.521}, {'end': 4925.674, 'text': "If you're running untrusted, so user supplied code, it's difficult to be confident that they can't escape a container.", 'start': 4919.71, 'duration': 5.964}, {'end': 4930.2, 'text': "This has gotten better in recent years, but it's long been a contentious point.", 'start': 4926.718, 'duration': 3.482}, {'end': 4933.122, 'text': 'Virtual machines are much older and much more mature.', 'start': 4931.181, 'duration': 1.941}, {'end': 4937.005, 'text': "So if you're running untrusted code, usually it's a good idea to put that within a container.", 'start': 4933.583, 'duration': 3.422}], 'summary': 'Containers outperform vms in terms of speed, storage, and memory usage by 10-20%, 50-100%, and 200mb respectively, making them a better choice in most cases. however, vms are preferable for running untrusted code due to security concerns.', 'duration': 63.694, 'max_score': 4873.311, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY4873311.jpg'}], 'start': 4256.103, 'title': 'Linux deployments and containers vs. vms', 'summary': "Covers foundational concepts in linux deployments, including the difference between vms and containers, linux's role in managing memory, processors, disk space, and devices, and the allocation of resources to processes. it also discusses the performance and use cases of containers and vms, with containers offering better performance and requiring less storage and memory, while vms are suitable for running untrusted code and emulating hardware devices.", 'chapters': [{'end': 4435.487, 'start': 4256.103, 'title': 'Foundational concepts in linux deployments', 'summary': "Discusses foundational concepts in linux deployments, covering the difference between vms and containers, linux's role in managing memory, processors, disk space, and devices, and its allocation of resources to processes.", 'duration': 179.384, 'highlights': ['Linux is crucial for managing memory, processors, disk space, and devices when writing programs, ensuring fair resource allocation to processes. Linux manages memory (RAM), processors, disk space, and devices (e.g., GPU, network cards) to ensure proper resource allocation to processes running on a system.', 'Containers, often referred to as Docker, are primarily defined in terms of Linux for production deployments. Containers, also known as Docker, are predominantly defined in terms of Linux for production deployments, distinguishing them from VMs.', 'The majority of DevOps deployments are to Linux servers, emphasizing the significance of Linux in the deployment landscape. A large portion of DevOps deployments are to Linux servers, highlighting the prevalent use of Linux in deployment scenarios.']}, {'end': 4975.391, 'start': 4436.488, 'title': 'Containers vs. vms: performance and use cases', 'summary': 'Discusses the use of containers and virtual machines (vms) for isolating programs and resources, highlighting the differences, with containers offering better performance, using less storage and memory, and vms being suitable for running untrusted code, scripts for different operating systems, and emulating hardware devices.', 'duration': 538.903, 'highlights': ['Containers offer better performance than VMs, with CPUs in VMs being about 10 to 20% slower than in containers, and VMs using about 50 to 100% more storage and 200 megabytes more memory for the operating system itself. Containers vs. VMs performance comparison: CPUs in VMs are 10 to 20% slower, VMs use 50 to 100% more storage, and 200 megabytes more memory for the operating system itself.', 'Containers are suitable for running programs within Linux, while VMs are powerful for running other operating systems such as Mac OS or Windows, emulating hardware devices, and running untrusted code. Containers are ideal for running programs within Linux, while VMs are versatile for running other operating systems, emulating hardware devices, and running untrusted code.', 'VMs are more mature and suitable for running untrusted code, scripts for different operating systems, and emulating hardware devices, while containers are better for most use cases due to their performance benefits. VMs are more mature and suitable for running untrusted code, scripts for different operating systems, and emulating hardware devices, while containers are generally better for most use cases due to their performance benefits.']}], 'duration': 719.288, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY4256103.jpg', 'highlights': ['Linux manages memory (RAM), processors, disk space, and devices (e.g., GPU, network cards) to ensure proper resource allocation to processes running on a system.', 'A large portion of DevOps deployments are to Linux servers, highlighting the prevalent use of Linux in deployment scenarios.', 'Containers, also known as Docker, are predominantly defined in terms of Linux for production deployments, distinguishing them from VMs.', 'Containers vs. VMs performance comparison: CPUs in VMs are 10 to 20% slower, VMs use 50 to 100% more storage, and 200 megabytes more memory for the operating system itself.', 'Containers are ideal for running programs within Linux, while VMs are versatile for running other operating systems, emulating hardware devices, and running untrusted code.', 'VMs are more mature and suitable for running untrusted code, scripts for different operating systems, and emulating hardware devices, while containers are generally better for most use cases due to their performance benefits.']}, {'end': 5677.319, 'segs': [{'end': 5091.687, 'src': 'embed', 'start': 5049.664, 'weight': 0, 'content': [{'end': 5051.905, 'text': "So if you log in, you're connecting to the back end.", 'start': 5049.664, 'duration': 2.241}, {'end': 5054.746, 'text': "If you're just viewing the landing page, you're connecting to the front end.", 'start': 5052.305, 'duration': 2.441}, {'end': 5060.806, 'text': "Let's say your app has enough traffic that users will notice if it goes down for a little while.", 'start': 5055.942, 'duration': 4.864}, {'end': 5067.132, 'text': 'How would you push a new version of the application without causing downtime? This is where rolling deployments come in.', 'start': 5061.827, 'duration': 5.305}, {'end': 5070.755, 'text': 'The high level algorithm for rolling deployment looks like this.', 'start': 5067.892, 'duration': 2.863}, {'end': 5077.26, 'text': "So you create an instance of the new version of the back end, say, you wait until it's up.", 'start': 5071.415, 'duration': 5.845}, {'end': 5081.444, 'text': 'So you keep trying to connect to it until you get a response that satisfactory.', 'start': 5077.681, 'duration': 3.763}, {'end': 5086.123, 'text': 'And then you delete an old version and wrap the traffic to the new version.', 'start': 5082.401, 'duration': 3.722}, {'end': 5091.687, 'text': 'If any instances of the old version still exist, go back to step one and repeat.', 'start': 5087.324, 'duration': 4.363}], 'summary': 'Rolling deployments minimize downtime by gradually replacing old instances with new ones.', 'duration': 42.023, 'max_score': 5049.664, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY5049664.jpg'}, {'end': 5165.799, 'src': 'embed', 'start': 5135.992, 'weight': 3, 'content': [{'end': 5141.557, 'text': "So what are the benefits of rolling deployments over other ways of deploying things? Well, they're well supported.", 'start': 5135.992, 'duration': 5.565}, {'end': 5145.24, 'text': 'Rolling deployments are relatively straightforward to implement in most cases.', 'start': 5142.057, 'duration': 3.183}, {'end': 5148.122, 'text': "They're natively supported and several orchestrators.", 'start': 5145.941, 'duration': 2.181}, {'end': 5151.325, 'text': "If you've heard of Kubernetes, for example, Kubernetes helps you with this.", 'start': 5148.342, 'duration': 2.983}, {'end': 5156.729, 'text': 'AWS, Amazon Elastic Beanstalk also supports rolling deployments.', 'start': 5151.945, 'duration': 4.784}, {'end': 5159.632, 'text': "they don't have huge bursts.", 'start': 5158.471, 'duration': 1.161}, {'end': 5165.799, 'text': "So, in another deployment strategy, which we'll talk about, if you had three versions of the back end,", 'start': 5160.153, 'duration': 5.646}], 'summary': 'Benefits of rolling deployments: well supported, straightforward, natively supported in kubernetes and aws elastic beanstalk, avoids huge bursts', 'duration': 29.807, 'max_score': 5135.992, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY5135992.jpg'}, {'end': 5268.958, 'src': 'embed', 'start': 5239.637, 'weight': 4, 'content': [{'end': 5243.421, 'text': 'The other problem is API compatibility, which is the biggest problem of rolling deployments.', 'start': 5239.637, 'duration': 3.784}, {'end': 5250.969, 'text': 'So, if you add a new version of an API endpoint to your backend and consume it in your front end, then,', 'start': 5244.386, 'duration': 6.583}, {'end': 5258.433, 'text': "since you're not switching them both at the same time, you might have version one of your backend serving a request for version two of your front end.", 'start': 5250.969, 'duration': 7.464}, {'end': 5260.474, 'text': "And then that API wouldn't exist.", 'start': 5259.053, 'duration': 1.421}, {'end': 5263.496, 'text': "So there'd be errors visible to the user for the duration of the deployment.", 'start': 5260.714, 'duration': 2.782}, {'end': 5268.958, 'text': "This can be mitigated with complicated routing techniques, but it's generally better to make APIs backwards compatible.", 'start': 5263.856, 'duration': 5.102}], 'summary': 'Api compatibility during rolling deployments can cause errors visible to users, mitigated through complicated routing or making apis backwards compatible.', 'duration': 29.321, 'max_score': 5239.637, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY5239637.jpg'}, {'end': 5389.274, 'src': 'embed', 'start': 5350.14, 'weight': 2, 'content': [{'end': 5356.803, 'text': "So in a blue green deployment strategy, where you're upgrading the JavaScript or the mern app, this is what that would look like.", 'start': 5350.14, 'duration': 6.663}, {'end': 5361.164, 'text': "So there's a blue version and a green version of the application,", 'start': 5357.783, 'duration': 3.381}, {'end': 5368.667, 'text': 'where each is a fully standalone stack but where each connects to a shared database and the database is not part of blue or green.', 'start': 5361.164, 'duration': 7.503}, {'end': 5370.928, 'text': "It's a shared resource used by both blue.", 'start': 5368.827, 'duration': 2.101}, {'end': 5377.351, 'text': 'green deployments are so called because they maintain two separate clusters, one named blue and one named green out of convention.', 'start': 5370.928, 'duration': 6.423}, {'end': 5381.959, 'text': 'If the current version of the application is deployed to blue,', 'start': 5378.291, 'duration': 3.668}, {'end': 5389.274, 'text': 'we deploy the new version to green and use it as a staging environment to ensure that the new version of the app works correctly before sending users to it.', 'start': 5381.959, 'duration': 7.315}], 'summary': 'Blue-green deployment maintains two separate clusters, blue and green, and uses green as a staging environment to ensure the new version works correctly before sending users to it.', 'duration': 39.134, 'max_score': 5350.14, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY5350140.jpg'}, {'end': 5493.299, 'src': 'embed', 'start': 5464.622, 'weight': 6, 'content': [{'end': 5468.945, 'text': "Additionally, blue green deployments can be extended to many different workflows, which we'll discuss.", 'start': 5464.622, 'duration': 4.323}, {'end': 5474.028, 'text': "There's a few notable drawbacks to blue green deployments.", 'start': 5471.066, 'duration': 2.962}, {'end': 5477.77, 'text': "it's difficult to deploy a hotfix, for example, to revert a change,", 'start': 5474.028, 'duration': 3.742}, {'end': 5482.673, 'text': 'because the old cluster might be running longer running tasks and unavailable to switch to.', 'start': 5477.77, 'duration': 4.903}, {'end': 5489.437, 'text': 'So if you have version one of the application, you switch over to version two, you realize version two is having problems.', 'start': 5483.493, 'duration': 5.944}, {'end': 5493.299, 'text': 'But might want to push a version three very quickly, which addresses those problems.', 'start': 5489.457, 'duration': 3.842}], 'summary': 'Blue green deployments have drawbacks, e.g. difficulty in deploying hotfixes, but they can be extended to different workflows.', 'duration': 28.677, 'max_score': 5464.622, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY5464622.jpg'}], 'start': 4976.952, 'title': 'Deployment strategies', 'summary': 'Discusses rolling deployments and their high-level algorithm, illustrating the process using an example mern app. it also compares rolling and blue green deployments, emphasizing their benefits, drawbacks, and specific characteristics of each strategy.', 'chapters': [{'end': 5134.271, 'start': 4976.952, 'title': 'Rolling deployments strategy', 'summary': 'Discusses rolling deployments as a popular deployment strategy, explaining its high-level algorithm and illustrating its process using an example mern app, highlighting its ability to update versions without causing downtime.', 'duration': 157.319, 'highlights': ['Rolling deployments are explained as a popular deployment strategy, ensuring application updates without causing downtime.', 'The high-level algorithm for rolling deployment is outlined, involving the creation of new version instances, waiting for their availability, and rerouting traffic.', 'The Mern app is used as an example to illustrate the process of rolling deployments, showcasing the replacement of old versions with new versions without causing downtime.']}, {'end': 5677.319, 'start': 5135.992, 'title': 'Rolling vs blue green deployments', 'summary': 'Explains the benefits and drawbacks of rolling deployments, emphasizing their ease of implementation and support, but highlighting potential issues with slow deployment speed and api compatibility. it then details blue green deployments, focusing on their conceptual simplicity, flexibility, and drawbacks such as difficulty in deploying hotfixes and transferring load between clusters.', 'duration': 541.327, 'highlights': ['Rolling deployments are well supported and straightforward to implement in orchestrators like Kubernetes and AWS Elastic Beanstalk, providing ease of implementation and support for deployment strategies.', 'The downsides of rolling deployments include slow deployment speed, which can take a long time to replace all versions, and API compatibility issues, resulting in errors visible to users during the deployment.', 'Blue green deployments are conceptually easy to understand, offering the ability to create two identical production environments and switch user traffic between them, allowing longer running tasks to continue during traffic switch.', 'Blue green deployments have drawbacks such as difficulty in deploying hotfixes, transferring load between clusters, and potential impact on shared services when one cluster modifies them, despite not being the live one.']}], 'duration': 700.367, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY4976952.jpg', 'highlights': ['Rolling deployments ensure application updates without causing downtime.', 'The high-level algorithm for rolling deployment involves creating new version instances, waiting for their availability, and rerouting traffic.', 'Mern app is used as an example to illustrate the process of rolling deployments.', 'Rolling deployments are well supported and straightforward to implement in orchestrators like Kubernetes and AWS Elastic Beanstalk.', 'The downsides of rolling deployments include slow deployment speed and API compatibility issues.', 'Blue green deployments offer the ability to create two identical production environments and switch user traffic between them.', 'Blue green deployments have drawbacks such as difficulty in deploying hotfixes and potential impact on shared services.']}, {'end': 6266.467, 'segs': [{'end': 5745.997, 'src': 'embed', 'start': 5678.363, 'weight': 0, 'content': [{'end': 5680.505, 'text': 'in the context of a blue green deployment.', 'start': 5678.363, 'duration': 2.142}, {'end': 5692.394, 'text': "a canary deployment would be to an extension which routes maybe 5% of user traffic to the new version of the application and check that those users don't have negative feedback before switching the rest of the users over.", 'start': 5680.505, 'duration': 11.889}, {'end': 5700.544, 'text': "So if blue was version one, green was version two, we'd have 95% going to version one, 5% going to version two.", 'start': 5692.854, 'duration': 7.69}, {'end': 5702.648, 'text': "we'd wait to see if anyone on version two complaint.", 'start': 5700.544, 'duration': 2.104}, {'end': 5708.839, 'text': "If not, then we'd route everyone to version two, and we'd shut off version one, and then put version three in that one.", 'start': 5703.349, 'duration': 5.49}, {'end': 5718.293, 'text': 'So blue green deployments are powerful and extensible deployment strategy that works well with teams that are deploying a few times per day.', 'start': 5711.448, 'duration': 6.845}, {'end': 5725.899, 'text': "The strategy only really starts being problematic and continuous deployment scenarios where there's many services being deployed many times per day.", 'start': 5719.014, 'duration': 6.885}, {'end': 5730.202, 'text': "All right, let's keep talking about deployments and I'll see you in the next talk.", 'start': 5725.919, 'duration': 4.283}, {'end': 5745.997, 'text': "Continuous deployment can sound daunting, but it's not actually as difficult as it might seem in many cases.", 'start': 5741.274, 'duration': 4.723}], 'summary': 'Canary deployment routes 5% of traffic to new version, checks for negative feedback, then switches rest of users. blue-green deployments work well with teams deploying a few times per day.', 'duration': 67.634, 'max_score': 5678.363, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY5678363.jpg'}, {'end': 5875.102, 'src': 'embed', 'start': 5848.484, 'weight': 4, 'content': [{'end': 5856.97, 'text': "So continuous deployment, we'd like it to run on merges to the main branch, we don't want to deploy a feature branches before they've been reviewed.", 'start': 5848.484, 'duration': 8.486}, {'end': 5860.392, 'text': 'For that, we can set up a very simple configuration.', 'start': 5858.131, 'duration': 2.261}, {'end': 5864.275, 'text': 'We could write this configuration file in any directory.', 'start': 5861.773, 'duration': 2.502}, {'end': 5866.516, 'text': "But let's write it in the API directory for now.", 'start': 5864.835, 'duration': 1.681}, {'end': 5875.102, 'text': "So we'll create another layer file will inherit from the testing layer file to make sure that the deployment runs after tests have passed.", 'start': 5868.217, 'duration': 6.885}], 'summary': 'Implement continuous deployment on main branch merges, not on feature branches, using a simple configuration file in the api directory.', 'duration': 26.618, 'max_score': 5848.484, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY5848484.jpg'}, {'end': 6128.949, 'src': 'embed', 'start': 6097.176, 'weight': 3, 'content': [{'end': 6103.398, 'text': 'So instead of needing to run it as an individual developer, you can simply run this SSH command within CI.', 'start': 6097.176, 'duration': 6.222}, {'end': 6108.36, 'text': 'And this idea of deploying automatically from a CI process is called continuous deployment.', 'start': 6103.718, 'duration': 4.642}, {'end': 6117.644, 'text': "So let's work through that whole process end to end once just to make sure that it's clear on the deployment automation side of things.", 'start': 6111.101, 'duration': 6.543}, {'end': 6128.949, 'text': "So let's change the color again for the main landing page just to make sure that it's visible if a change gets pushed correctly.", 'start': 6120.362, 'duration': 8.587}], 'summary': 'Continuous deployment allows for automatic deployment from a ci process, enabling efficient and visible changes in the main landing page.', 'duration': 31.773, 'max_score': 6097.176, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY6097176.jpg'}], 'start': 5678.363, 'title': 'Canary and continuous deployment', 'summary': 'Covers canary deployment, routing 5% user traffic to new app version, and continuous deployment process aiming to automate and reduce human intervention, and compatibility with teams deploying multiple times per day.', 'chapters': [{'end': 5745.997, 'start': 5678.363, 'title': 'Canary deployment strategy', 'summary': 'Discusses the concept of canary deployment, where 5% of user traffic is routed to the new version of the application to check for negative feedback before switching the rest, and its compatibility with teams deploying a few times per day.', 'duration': 67.634, 'highlights': ["Canary deployment routes 5% of user traffic to the new version to check for negative feedback before switching the rest. In the context of a blue green deployment, canary deployment routes 5% of user traffic to the new version of the application to check that those users don't have negative feedback before switching the rest of the users over.", 'Blue green deployments are powerful and extensible deployment strategy for teams deploying a few times per day. Blue green deployments are powerful and extensible deployment strategy that works well with teams that are deploying a few times per day.', "Continuous deployment can be less daunting than it seems in many cases. Continuous deployment can sound daunting, but it's not actually as difficult as it might seem in many cases."]}, {'end': 6266.467, 'start': 5747.218, 'title': 'Continuous deployment process', 'summary': 'Discusses the manual deployment process, automation using a continuous deployment system, setting up a configuration file for deployment, and the continuous integration and deployment (ci/cd) pipeline, aiming to automate the deployment process and reduce human intervention.', 'duration': 519.249, 'highlights': ['The deployment process is automated using a continuous deployment system, ensuring faster and efficient deployment. The chapter emphasizes the need for automating the deployment process due to the infeasibility of manual intervention as products scale, demonstrating the use of a continuous deployment system to automate the deployment process, resulting in faster and more efficient deployment.', 'Setting up a configuration file for deployment ensures that the deployment only runs after the tests have passed and on the main branch, enhancing the reliability and integrity of the deployment process. It illustrates the setup of a configuration file to control the deployment process, ensuring that it runs only after the tests have passed and on the main branch, thereby enhancing the reliability and integrity of the deployment process.', 'The continuous integration and deployment (CI/CD) pipeline streamlines the deployment process, running tests, building the application, and deploying it automatically, reducing the deployment time to about a minute. It explains the CI/CD pipeline, showcasing how it streamlines the deployment process by running tests, building the application, and deploying it automatically, ultimately reducing the deployment time to about a minute.']}], 'duration': 588.104, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY5678363.jpg', 'highlights': ['Canary deployment routes 5% of user traffic to the new version to check for negative feedback before switching the rest.', 'Continuous deployment can be less daunting than it seems in many cases.', 'Blue green deployments are powerful and extensible deployment strategy for teams deploying a few times per day.', 'The deployment process is automated using a continuous deployment system, ensuring faster and efficient deployment.', 'Setting up a configuration file for deployment ensures that the deployment only runs after the tests have passed and on the main branch, enhancing the reliability and integrity of the deployment process.', 'The continuous integration and deployment (CI/CD) pipeline streamlines the deployment process, running tests, building the application, and deploying it automatically, reducing the deployment time to about a minute.']}, {'end': 8277.809, 'segs': [{'end': 6354.708, 'src': 'embed', 'start': 6268.629, 'weight': 0, 'content': [{'end': 6276.633, 'text': 'After we merge it, the end to end test deploy process will run for this merge commit.', 'start': 6268.629, 'duration': 8.004}, {'end': 6289.13, 'text': 'And if we take a look at that, see that because we merged to the main branch, the deployment is already running in production.', 'start': 6277.753, 'duration': 11.377}, {'end': 6290.711, 'text': "we're creating a production build.", 'start': 6289.13, 'duration': 1.581}, {'end': 6297.216, 'text': 'And in a short period of time, the production server should have the latest version of our application running on it.', 'start': 6291.932, 'duration': 5.284}, {'end': 6299.738, 'text': "So here, it's restarting the production instance.", 'start': 6297.737, 'duration': 2.001}, {'end': 6304.462, 'text': 'And the snapshot is being taken.', 'start': 6303.241, 'duration': 1.221}, {'end': 6310.77, 'text': "So everything has succeeded, we've successfully prod pushed, if we go to our website, is now the shade of red that we've changed.", 'start': 6304.722, 'duration': 6.048}, {'end': 6318.274, 'text': "And that's what an end to end CI CD, ephemeral environment pipeline generally looks like at a very high level.", 'start': 6311.87, 'duration': 6.404}, {'end': 6322.916, 'text': "Alright, so let's talk more about deployment automation in the next section.", 'start': 6319.835, 'duration': 3.081}, {'end': 6341.646, 'text': "So we've talked about deployment strategies, but that's not the only thing in deployments.", 'start': 6337.745, 'duration': 3.901}, {'end': 6348.087, 'text': "Deployment strategies help you reduce downtime and deploy in a way that doesn't affect your users.", 'start': 6342.386, 'duration': 5.701}, {'end': 6354.708, 'text': "But another key consideration for deployment is making sure that there's enough resources for your containers or VMs.", 'start': 6348.907, 'duration': 5.801}], 'summary': 'After merging to main branch, end-to-end test deploy process runs, updating production server with latest application version.', 'duration': 86.079, 'max_score': 6268.629, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY6268629.jpg'}, {'end': 6465.548, 'src': 'embed', 'start': 6442.54, 'weight': 4, 'content': [{'end': 6454.375, 'text': 'The most popular technology at the time of this post or this video is AWS EC two spot instances, which acts exactly like cloud hosted VMs,', 'start': 6442.54, 'duration': 11.835}, {'end': 6457.438, 'text': 'but with large discounts if you provision them for short periods of time.', 'start': 6454.375, 'duration': 3.063}, {'end': 6465.548, 'text': 'Another popular technology for auto scaling is Kubernetes horizontal pod auto scaling, which sounds daunting.', 'start': 6458.62, 'duration': 6.928}], 'summary': 'Aws ec2 spot instances offer large discounts for short-term provisioning; kubernetes horizontal pod auto scaling is popular for auto scaling.', 'duration': 23.008, 'max_score': 6442.54, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY6442540.jpg'}, {'end': 6516.725, 'src': 'embed', 'start': 6489.202, 'weight': 3, 'content': [{'end': 6493.425, 'text': "And if you're using Google Cloud, there's resources for VMs and containers.", 'start': 6489.202, 'duration': 4.223}, {'end': 6498.588, 'text': 'Auto scaling is usually discussed on the timeline of one hour chunks of work.', 'start': 6494.325, 'duration': 4.263}, {'end': 6503.431, 'text': "If you took the concept of auto scaling and took it to its limit, you'd get serverless.", 'start': 6499.668, 'duration': 3.763}, {'end': 6510.295, 'text': 'Define resources that are quickly started and use them on the timeline of milliseconds, so one to 100 milliseconds.', 'start': 6504.231, 'duration': 6.064}, {'end': 6516.725, 'text': 'For example, a web server might not need to exist at all until a visitor requests a page.', 'start': 6511.664, 'duration': 5.061}], 'summary': 'Google cloud provides resources for vms and containers, with auto scaling in one-hour chunks. serverless allows resources to start in milliseconds, e.g., for web servers.', 'duration': 27.523, 'max_score': 6489.202, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY6489202.jpg'}, {'end': 6618.338, 'src': 'embed', 'start': 6573.174, 'weight': 5, 'content': [{'end': 6574.555, 'text': 'So in response to a trigger.', 'start': 6573.174, 'duration': 1.381}, {'end': 6580.996, 'text': "Within a few years, it's likely that serverless and auto scaling will converge into a single unified interface.", 'start': 6575.995, 'duration': 5.001}, {'end': 6584.277, 'text': "So I'm excited about that, as that's going to be the future of deployment.", 'start': 6581.456, 'duration': 2.821}, {'end': 6588.723, 'text': 'that ends our discussion of auto scaling and serverless.', 'start': 6586.182, 'duration': 2.541}, {'end': 6589.984, 'text': "I'll see you in the next talk.", 'start': 6589.123, 'duration': 0.861}, {'end': 6618.338, 'text': 'Another key concept and deployment automation is service discovery.', 'start': 6615.137, 'duration': 3.201}], 'summary': 'Serverless and auto scaling to converge in a few years, future of deployment.', 'duration': 45.164, 'max_score': 6573.174, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY6573174.jpg'}, {'end': 6761.603, 'src': 'embed', 'start': 6734.176, 'weight': 6, 'content': [{'end': 6737.577, 'text': "then, within the back end, we'd read an environment variable,", 'start': 6734.176, 'duration': 3.401}, {'end': 6742.338, 'text': "which is a dictionary of key value pairs that are easily set when you're deploying things.", 'start': 6737.577, 'duration': 4.761}, {'end': 6755.041, 'text': "So you'd say connect to the environment variable specifying the MongoDB port, and then connect to port 27017, which is the default MongoDB port.", 'start': 6743.458, 'duration': 11.583}, {'end': 6761.603, 'text': "And then when you're starting the back end, you just have to specify the IP address that MongoDB is running it.", 'start': 6757.062, 'duration': 4.541}], 'summary': 'Back end reads environment variable specifying mongodb port, default at 27017.', 'duration': 27.427, 'max_score': 6734.176, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY6734176.jpg'}, {'end': 6806.312, 'src': 'embed', 'start': 6776.769, 'weight': 7, 'content': [{'end': 6781.87, 'text': "But you'll know that you need to start caring about complicating your service discovery when you see one of the following.", 'start': 6776.769, 'duration': 5.101}, {'end': 6784.13, 'text': 'So you need zero downtime deployments.', 'start': 6782.53, 'duration': 1.6}, {'end': 6790.992, 'text': "You can't hard code things like this if you want to do rolling deployments, because you can't easily automate where the arrows point to.", 'start': 6784.911, 'duration': 6.081}, {'end': 6795.733, 'text': "you can't automatically change the IP address if you're doing such a simple deployment strategy.", 'start': 6790.992, 'duration': 4.741}, {'end': 6801.114, 'text': "for example, if you have more than a couple microservices, it's going to get hard to remember where they all are.", 'start': 6795.733, 'duration': 5.381}, {'end': 6806.312, 'text': "if you're deploying to several environments, like if you have a developer environment, a staging environment,", 'start': 6801.67, 'duration': 4.642}], 'summary': 'Service discovery becomes essential for scalable, automated deployments and managing multiple microservices across different environments.', 'duration': 29.543, 'max_score': 6776.769, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY6776769.jpg'}, {'end': 6843.017, 'src': 'embed', 'start': 6814.295, 'weight': 8, 'content': [{'end': 6818.056, 'text': "So let's focus on zero downtime deployments, because they're illustrative of the broader problem.", 'start': 6814.295, 'duration': 3.761}, {'end': 6824.251, 'text': "Before that, though, let's talk about reverse proxies, which are another crucial system design and DevOps concept.", 'start': 6818.789, 'duration': 5.462}, {'end': 6827.152, 'text': 'The idea for a zero downtime deployment is simple.', 'start': 6824.571, 'duration': 2.581}, {'end': 6832.073, 'text': "As we've seen, you start a new version of the back end and front end, you wait till they're up.", 'start': 6827.712, 'duration': 4.361}, {'end': 6835.514, 'text': 'And then you shut off the old version of the back end and front end.', 'start': 6832.753, 'duration': 2.761}, {'end': 6838.815, 'text': 'So this happens in both rolling and bluegreen deployments.', 'start': 6836.375, 'duration': 2.44}, {'end': 6843.017, 'text': "However, it's difficult to update the IP addresses in DNS itself.", 'start': 6839.276, 'duration': 3.741}], 'summary': 'Zero downtime deployments involve updating back end and front end versions simultaneously, using rolling or bluegreen deployments, while facing challenges in updating dns ip addresses.', 'duration': 28.722, 'max_score': 6814.295, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY6814295.jpg'}, {'end': 7126.849, 'src': 'embed', 'start': 7098.159, 'weight': 11, 'content': [{'end': 7100.281, 'text': 'This is what proxy passing means and nginx.', 'start': 7098.159, 'duration': 2.122}, {'end': 7102.823, 'text': 'So you see this proxy pass directive.', 'start': 7101.021, 'duration': 1.802}, {'end': 7105.425, 'text': 'this is all very complicated.', 'start': 7104.105, 'duration': 1.32}, {'end': 7107.566, 'text': "It's just an illustrative point of.", 'start': 7105.885, 'duration': 1.681}, {'end': 7109.706, 'text': 'if you were to implement this yourself, how would you do it?', 'start': 7107.566, 'duration': 2.14}, {'end': 7114.847, 'text': 'The most common thing used in industry is service discovery by using DNS itself.', 'start': 7111.006, 'duration': 3.841}, {'end': 7121.688, 'text': 'So DNS, we thought of before as the slow protocol that might take days to propagate changes across the network.', 'start': 7115.507, 'duration': 6.181}, {'end': 7123.729, 'text': 'But you can run DNS locally.', 'start': 7122.328, 'duration': 1.401}, {'end': 7126.849, 'text': "And that's the industry standard.", 'start': 7125.169, 'duration': 1.68}], 'summary': 'Proxy passing explained with emphasis on using dns for service discovery.', 'duration': 28.69, 'max_score': 7098.159, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY7098159.jpg'}, {'end': 7299.643, 'src': 'embed', 'start': 7263.447, 'weight': 9, 'content': [{'end': 7269.829, 'text': 'And then the proxy would forward the request there, the request to be fulfilled, and it would go back to the proxy and then back to the user.', 'start': 7263.447, 'duration': 6.382}, {'end': 7281.049, 'text': 'So the conclusion of all of this is that service discovery is tricky but vitally important as a foundational building block for these deployment strategies and for deployment automation in general.', 'start': 7272.162, 'duration': 8.887}, {'end': 7286.012, 'text': 'If you configure service discovery in an appropriate manner for your deployments.', 'start': 7282.049, 'duration': 3.963}, {'end': 7289.875, 'text': 'so DNS based in a Kubernetes cluster, for example,', 'start': 7286.012, 'duration': 3.863}, {'end': 7296.1, 'text': 'it makes significantly easier for developers to have microservices that talk to each other instead of having a developer have to write,', 'start': 7289.875, 'duration': 6.225}, {'end': 7299.643, 'text': 'connect to MongoDB at and then deal with where MongoDB actually is.', 'start': 7296.1, 'duration': 3.543}], 'summary': 'Service discovery is vital for deployment strategies and automation, making it easier for developers to have microservices that communicate with each other.', 'duration': 36.196, 'max_score': 7263.447, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY7263447.jpg'}, {'end': 7489.549, 'src': 'embed', 'start': 7459.975, 'weight': 13, 'content': [{'end': 7462.955, 'text': "And we'd need to match it with relevant logs in the other three services.", 'start': 7459.975, 'duration': 2.98}, {'end': 7470.877, 'text': "Let's take a look at elk, a popular open source log aggregation stack named after its three components, Elasticsearch, log stash and cabana.", 'start': 7463.295, 'duration': 7.582}, {'end': 7475.418, 'text': "If we installed it in our burn app, we'd get three new services.", 'start': 7471.997, 'duration': 3.421}, {'end': 7482.119, 'text': "So the user's web browser, again, would connect to our front end and back end, the back end would connect to Mongo.", 'start': 7476.638, 'duration': 5.481}, {'end': 7489.549, 'text': 'And all of these services the browser, the front end, the back end and Mongo would all send logs to log stash.', 'start': 7482.86, 'duration': 6.689}], 'summary': 'Elk stack in burn app would add 3 new services, connecting to frontend, backend, and mongo, with all services sending logs to logstash.', 'duration': 29.574, 'max_score': 7459.975, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY7459975.jpg'}, {'end': 7714.622, 'src': 'embed', 'start': 7682.929, 'weight': 14, 'content': [{'end': 7686.614, 'text': 'The final piece of the puzzle is ensuring that logs are only visible to administrators.', 'start': 7682.929, 'duration': 3.685}, {'end': 7692.992, 'text': "As logs can contain sensitive information like tokens, it's important that only authenticated users can access them.", 'start': 7687.549, 'duration': 5.443}, {'end': 7697.515, 'text': "You wouldn't want to expose Kibana to the internet without some way of authenticating.", 'start': 7693.433, 'duration': 4.082}, {'end': 7704.439, 'text': 'My favorite way of doing this is to add a reverse proxy like nginx again, our friend nginx,', 'start': 7697.795, 'duration': 6.644}, {'end': 7707.561, 'text': 'and then have the auth request mechanism check that the user is logged in.', 'start': 7704.439, 'duration': 3.122}, {'end': 7714.622, 'text': 'So in our backend, we could add something like this, which simply returns a successful status.', 'start': 7708.757, 'duration': 5.865}], 'summary': 'Logs should be visible only to authenticated administrators to protect sensitive information like tokens, achieved by using a reverse proxy like nginx for authentication.', 'duration': 31.693, 'max_score': 7682.929, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY7682929.jpg'}, {'end': 7892.005, 'src': 'embed', 'start': 7839.4, 'weight': 12, 'content': [{'end': 7842.802, 'text': 'So log aggregation is a key tool for diagnosing problems in production.', 'start': 7839.4, 'duration': 3.402}, {'end': 7847.225, 'text': "It's relatively simple to install a turnkey solution like elk or CloudWatch.", 'start': 7843.123, 'duration': 4.102}, {'end': 7851.428, 'text': 'And it makes diagnosing and triaging problems in production significantly easier.', 'start': 7847.866, 'duration': 3.562}, {'end': 7853.49, 'text': "That's it for log aggregation.", 'start': 7852.389, 'duration': 1.101}, {'end': 7854.43, 'text': "I'll see you in the next talk.", 'start': 7853.61, 'duration': 0.82}, {'end': 7871.34, 'text': "The last topic we're going to talk about is metric aggregation.", 'start': 7868.919, 'duration': 2.421}, {'end': 7875.961, 'text': 'Metrics are simply data points that tell you how healthy production is.', 'start': 7872.42, 'duration': 3.541}, {'end': 7881.302, 'text': 'So, as you can see on the screen, things like CPU usage, memory usage,', 'start': 7876.961, 'duration': 4.341}, {'end': 7886.663, 'text': 'disk IO file system fullness are all important production metrics that you might care about.', 'start': 7881.302, 'duration': 5.361}, {'end': 7892.005, 'text': 'If log aggregation is the first tool to set up for production monitoring, metrics monitoring would be the second.', 'start': 7886.863, 'duration': 5.142}], 'summary': 'Log aggregation simplifies diagnosing problems; metric aggregation monitors production health.', 'duration': 52.605, 'max_score': 7839.4, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY7839400.jpg'}, {'end': 7966.574, 'src': 'embed', 'start': 7934.556, 'weight': 17, 'content': [{'end': 7939.682, 'text': 'Prometheus, a tool originally deployed at SoundCloud, is one of the most popular metric servers.', 'start': 7934.556, 'duration': 5.126}, {'end': 7941.865, 'text': 'And this is what it looks like.', 'start': 7940.984, 'duration': 0.881}, {'end': 7945.067, 'text': 'similarly structured to elk.', 'start': 7943.126, 'duration': 1.941}, {'end': 7947.528, 'text': 'inputs are sent to the retrieval.', 'start': 7945.067, 'duration': 2.461}, {'end': 7954.89, 'text': 'things like nodes would send how much disk usage they have to the Prometheus server, but also how long services are taking.', 'start': 7947.528, 'duration': 7.362}, {'end': 7958.191, 'text': 'elk itself would parse numbers out of logs and send them to Prometheus.', 'start': 7954.89, 'duration': 3.301}, {'end': 7966.574, 'text': 'And then Prometheus figures out what to get services from using service discovery from the previous video.', 'start': 7959.492, 'duration': 7.082}], 'summary': 'Prometheus, a popular metric server, collects node disk usage and service response times using service discovery.', 'duration': 32.018, 'max_score': 7934.556, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY7934556.jpg'}], 'start': 6268.629, 'title': 'Automated deployment and performance management', 'summary': 'Covers topics on automated deployment processes, auto scaling, service discovery, dns and nginx, application performance management, log and metric aggregation, including technologies such as kubernetes, aws ec2, elasticsearch, kibana, fluentd, datadog, logdna, prometheus, and grafana, with a focus on end-to-end testing, zero downtime deployments, and log aggregation for production problem diagnosis.', 'chapters': [{'end': 6354.708, 'start': 6268.629, 'title': 'Automated deployment process', 'summary': 'Discusses the automated deployment process, including the end-to-end testing deploy process, merging to the main branch triggering the deployment in production, and the importance of deployment strategies and resource management for containers or vms.', 'duration': 86.079, 'highlights': ['The end to end test deploy process runs after merging, triggering the deployment in production, resulting in the latest version of the application running on the production server in a short period of time.', 'Deployment automation involves restarting the production instance, taking a snapshot, and ensuring successful prod push, reflecting changes on the website, demonstrating an end-to-end CI/CD ephemeral environment pipeline.', 'Deployment strategies aim to reduce downtime and minimize user impact, while the consideration of resource allocation for containers or VMs is crucial for efficient deployments.']}, {'end': 6732.223, 'start': 6355.508, 'title': 'Auto scaling and serverless', 'summary': 'Discusses the concept of auto scaling and serverless, highlighting the need for dynamically provisioning resources based on usage patterns, the technologies commonly used for auto scaling such as aws ec2 spot instances and kubernetes horizontal pod auto scaling, and the convergence of serverless and auto scaling into a unified interface in the future.', 'duration': 376.715, 'highlights': ['The need for dynamically provisioning resources based on usage patterns is highlighted, with an example of the requirement for 20 times more workers from the highest points to the lowest points in the day. The usage pattern demonstrates the need for 20 times more workers from the highest points to the lowest points in the day, emphasizing the importance of dynamically provisioning resources based on usage.', 'The technologies commonly used for auto scaling, including AWS EC2 spot instances and Kubernetes horizontal pod auto scaling, are discussed, with emphasis on their practical application and integration with cloud providers. The technologies commonly used for auto scaling, such as AWS EC2 spot instances and Kubernetes horizontal pod auto scaling, are explained, highlighting their practical application and integration with cloud providers.', 'The convergence of serverless and auto scaling into a single unified interface in the future is mentioned, indicating a potential shift in deployment practices and the future direction of resource provisioning. The convergence of serverless and auto scaling into a single unified interface is anticipated, suggesting a potential shift in deployment practices and the future direction of resource provisioning.']}, {'end': 7096.618, 'start': 6734.176, 'title': 'Service discovery and zero downtime deployments', 'summary': 'Discusses the importance of service discovery and zero downtime deployments, highlighting the use of environment variables, reverse proxies, and hash tables to automate routing decisions and enable seamless updates, facilitating efficient deployment strategies for scalability and reliability.', 'duration': 362.442, 'highlights': ['The use of environment variables for specifying MongoDB port and IP address simplifies configuration and enhances security for simple product deployment. Environment variables are used to specify the MongoDB port and IP address, facilitating simple and secure product deployment.', 'Challenges and signs indicating the need for service discovery, such as zero downtime deployments and managing multiple microservices across different environments. The challenges of zero downtime deployments and managing multiple microservices across different environments indicate the need for service discovery.', 'The crucial role of reverse proxies in zero downtime deployments, enabling seamless routing of user requests to the appropriate version of the front end or back end. Reverse proxies play a crucial role in zero downtime deployments by directing user requests to the appropriate front end or back end version.', 'Automating routing decisions using hash tables to enable service discovery, allowing for seamless updates and routing of user traffic to new application versions. Using hash tables for service discovery enables automated routing decisions and seamless updates for routing user traffic to new application versions.']}, {'end': 7320.401, 'start': 7098.159, 'title': 'Service discovery with dns and nginx', 'summary': 'Explains the concept of service discovery using dns and nginx, emphasizing the industry standard of running dns locally and its role in simplifying deployment strategies, such as in kubernetes clusters, by decoupling application logic from deployment logic.', 'duration': 222.242, 'highlights': ['DNS is the industry standard for service discovery, allowing for running DNS locally and simplifying deployment strategies, particularly in Kubernetes clusters. Running DNS locally is the industry standard, making it significantly easier for developers to have microservices that talk to each other, decoupling application logic from deployment logic, and simplifying deployment in Kubernetes clusters.', 'Nginx can utilize DNS-based service discovery to dynamically resolve IP addresses of services, simplifying configuration and deployment automation. Nginx can use DNS-based service discovery to dynamically resolve IP addresses, simplifying configuration and deployment automation by decoupling the application logic from the deployment logic.', 'Service discovery plays a vital role as a foundational building block for deployment strategies and deployment automation, significantly easing the development and deployment processes. Service discovery is emphasized as a foundational building block for deployment strategies and deployment automation, significantly easing the development and deployment processes by decoupling application logic from deployment logic.']}, {'end': 7749.733, 'start': 7321.062, 'title': 'Application performance management', 'summary': 'Introduces the concept of log aggregation in application performance management, emphasizing its importance in diagnosing production problems and ensuring logs are only visible to administrators.', 'duration': 428.671, 'highlights': ["Log aggregation is essential for diagnosing production problems, as it allows companies like Google to map every request to a unique ID and easily search and analyze logs from various services. (e.g., Google's single search might hit five different services before being returned to the user)", 'ELK (Elasticsearch, Logstash, Kibana) is a popular open source log aggregation stack that efficiently collects logs from different services, extracts relevant information, stores them in Elasticsearch, and allows administrators to query and view logs in production. (e.g., Logstash extracts and tags log messages, while Kibana queries Elasticsearch for logs matching specific criteria)', 'Ensuring logs are only visible to administrators is crucial to protect sensitive information, and a recommended method is to use a reverse proxy like Nginx for authentication. (e.g., adding a reverse proxy like Nginx and configuring it to check if the user is an admin before granting access to logs)']}, {'end': 8277.809, 'start': 7750.711, 'title': 'Log and metric aggregation for devops', 'summary': 'Discusses the importance of log aggregation for diagnosing problems in production, including popular platforms like elasticsearch, kibana, fluentd, datadog, and logdna, and the significance of metric aggregation in monitoring production health, with examples of metrics such as request fulfillment time, request counts, and server resources. it also highlights the use of prometheus and grafana as common tools for metric analysis.', 'duration': 527.098, 'highlights': ['The importance of log aggregation for diagnosing problems in production Log aggregation simplifies diagnosing and triaging problems in production, and platforms like Elasticsearch, Kibana, FluentD, DataDog, and LogDNA are commonly used for this purpose.', 'Significance of metric aggregation in monitoring production health Metric aggregation helps in monitoring production health, with examples of important metrics such as request fulfillment time, request counts, and server resources, and tools like Prometheus and Grafana are commonly used for this purpose.', 'Popular log aggregation platforms Platforms like Elasticsearch, Kibana, FluentD, DataDog, and LogDNA are commonly used for log aggregation in production environments.', 'Examples of important production metrics Important production metrics include request fulfillment time, request counts, and server resources, which are crucial for identifying performance and stability issues.', 'Use of Prometheus and Grafana for metric analysis Prometheus and Grafana are commonly used for analyzing production metrics and visualizing time series data for monitoring the health of production deployments.']}], 'duration': 2009.18, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/j5Zsa_eOXeY/pics/j5Zsa_eOXeY6268629.jpg', 'highlights': ['End-to-end test deploy process ensures latest application version in short time', 'Deployment automation involves restarting production instance and taking snapshot', 'Deployment strategies aim to reduce downtime and minimize user impact', 'Dynamically provisioning resources based on usage patterns is crucial', 'Technologies for auto scaling like AWS EC2 spot instances and Kubernetes', 'Convergence of serverless and auto scaling into a unified interface anticipated', 'Environment variables simplify MongoDB port and IP address configuration', 'Challenges of zero downtime deployments indicate need for service discovery', 'Reverse proxies play crucial role in zero downtime deployments', 'Automating routing decisions using hash tables enables service discovery', 'DNS simplifies deployment strategies, particularly in Kubernetes clusters', 'Nginx utilizes DNS-based service discovery for dynamic IP resolution', 'Log aggregation essential for diagnosing production problems', 'ELK stack efficiently collects and stores logs, allowing administrators to query', 'Ensuring logs are only visible to administrators is crucial for security', 'Log aggregation simplifies diagnosing and triaging problems in production', 'Metric aggregation helps in monitoring production health', 'Prometheus and Grafana commonly used for analyzing production metrics']}], 'highlights': ['The course aims to help regular developers and engineering practitioners transition towards a DevOps engineering role (target audience).', 'DevOps methodology emphasizes continuously integrating user feedback, enabling products to be built better (user feedback integration).', 'The three pillars of DevOps engineering are pull request automation, deployment automation, and application performance management, which help in building, testing, releasing, deploying, and monitoring (pillars of DevOps engineering).', 'Continuous deployment strategies automate releasing and deploying after a change is known to be good, with a focus on automation and tools like Spinnaker by Netflix (continuous deployment strategies).', 'Ephemeral environments accelerate the software development lifecycle by enabling visual feedback, sharing work with non-technical collaborators, and handling temporary and isolated resources (ephemeral environments).', 'Containers vs. VMs performance comparison: CPUs in VMs are 10 to 20% slower, VMs use 50 to 100% more storage, and 200 megabytes more memory for the operating system itself (containers vs. VMs performance comparison).', 'Rolling deployments ensure application updates without causing downtime (rolling deployments).', 'Canary deployment routes 5% of user traffic to the new version to check for negative feedback before switching the rest (canary deployment).', 'The continuous integration and deployment (CI/CD) pipeline streamlines the deployment process, running tests, building the application, and deploying it automatically, reducing the deployment time to about a minute (CI/CD pipeline).', 'Prometheus and Grafana commonly used for analyzing production metrics (metric aggregation).']}