Skip to content

Commit

Permalink
Edit pass for early release
Browse files Browse the repository at this point in the history
  • Loading branch information
brikis98 committed Jun 8, 2024
1 parent af430e8 commit 4087fef
Show file tree
Hide file tree
Showing 15 changed files with 1,074 additions and 962 deletions.
276 changes: 211 additions & 65 deletions docs/02.html

Large diffs are not rendered by default.

68 changes: 39 additions & 29 deletions docs/03.html
Original file line number Diff line number Diff line change
Expand Up @@ -1936,7 +1936,9 @@ <h3 id="_how_ad_hoc_scripts_stack_up">How Ad Hoc Scripts Stack Up</h3>

<div class="paragraph">

<p>Here&#8217;s a general rule with ad hoc scripts:</p>
<p>Ad hoc scripts have always been, and will always be, a big part of software delivery. They are the glue and duct tape

of the DevOps world. However, they are not the best choice as a primary tool for managing infrastructure as code.</p>

</div>

Expand Down Expand Up @@ -3038,12 +3040,6 @@ <h3 id="_how_configuration_management_tools_stack_up">How Configuration Manageme

</div>

<div class="paragraph">

<p>Here&#8217;s the general rule on configuration management tools:</p>

</div>

<div class="admonitionblock tip">

<table>
Expand Down Expand Up @@ -3590,7 +3586,17 @@ <h3 id="_how_server_templating_tools_stack_up">How Server Templating Tools Stack

<div class="paragraph">

<p>You can summarize this as follows:</p>
<p>Note that the different server templating tools have slightly different purposes. Packer is typically used to create

images that you run directly on top of production servers, such as an AMI that you run in your production AWS account.

Vagrant is typically used to create images that you run on your development computers, such as a VirtualBox image that

you run on your Mac or Windows laptop. Docker is typically used to create images of individual applications. You can

run the Docker images on production or development computers, as long as some other tool has configured that computer

with the Docker Engine.</p>

</div>

Expand Down Expand Up @@ -3626,22 +3632,6 @@ <h3 id="_how_server_templating_tools_stack_up">How Server Templating Tools Stack

<div class="paragraph">

<p>Note that the different server templating tools have slightly different purposes. Packer is typically used to create

images that you run directly on top of production servers, such as an AMI that you run in your production AWS account.

Vagrant is typically used to create images that you run on your development computers, such as a VirtualBox image that

you run on your Mac or Windows laptop. Docker is typically used to create images of individual applications. You can

run the Docker images on production or development computers, as long as some other tool has configured that computer

with the Docker Engine.</p>

</div>

<div class="paragraph">

<p>As I mentioned a few times, server templating tools are powerful, but they don&#8217;t work by themselves. You need another

tool to actually deploy and manage the images you create, such as provisioning tools, which are the focus of the next
Expand Down Expand Up @@ -5576,7 +5566,17 @@ <h3 id="_how_provisioning_tools_stack_up">How Provisioning Tools Stack Up</h3>

<div class="paragraph">

<p>This can be summarized as follows:</p>
<p>Provisioning tools should be your go-to option for managing infrastructure. In fact these days, many provisioning tools

can be used to not only manage traditional infrastructure (e.g., servers), but many other aspects of software delivery

as well. For example, you can use OpenTofu to manage your version control system (e.g., using the

<a href="https://github.com/integrations/terraform-provider-github">GitHub provider</a>), metrics and dashboards (e.g., using

the <a href="https://github.com/grafana/terraform-provider-grafana">Grafana provider</a>), and your on-call rotation (e.g., using

the <a href="https://github.com/PagerDuty/terraform-provider-pagerduty">PagerDuty provider</a>), tying them all together with code.</p>

</div>

Expand Down Expand Up @@ -5610,6 +5610,14 @@ <h3 id="_how_provisioning_tools_stack_up">How Provisioning Tools Stack Up</h3>

</div>

<div class="paragraph">

<p>Although I&#8217;ve been comparing IaC tools this entire blog post, the reality is that you&#8217;ll probably need

to use multiple IaC tools together, as discussed in the next section.</p>

</div>

</div>

</div>
Expand All @@ -5620,7 +5628,11 @@ <h2 id="_using_multiple_iac_tools_together">Using Multiple IaC Tools Together</h

<div class="paragraph">

<p>Although I&#8217;ve been comparing IaC tools this entire blog post, here&#8217;s the reality:</p>
<p>Each of the tools you&#8217;ve seen in this blog post has strengths and weaknesses. No one of them

can do it all, so for most real-world scenarios, you&#8217;ll need to use several different tools, and it&#8217;s your job to pick

the right tool(s) for the job.</p>

</div>

Expand Down Expand Up @@ -5656,9 +5668,7 @@ <h2 id="_using_multiple_iac_tools_together">Using Multiple IaC Tools Together</h

<div class="paragraph">

<p>Each of the tools you&#8217;ve seen has strengths and weaknesses, so it&#8217;s your job to pick the right tools for the job. The

following sections show three common combinations I&#8217;ve seen work well at a number of companies.</p>
<p>The following sections show three common combinations I&#8217;ve seen work well at a number of companies.</p>

</div>

Expand Down
12 changes: 6 additions & 6 deletions docs/04.html
Original file line number Diff line number Diff line change
Expand Up @@ -8556,7 +8556,7 @@ <h2 id="comparison_orchestration_options">Comparing Orchestration Options</h2>

<p>You&#8217;ve now seen the most common approaches to orchestration: server orchestration, VM orchestration, container

orchestration, and serverless orchestration. <a href="04.html#orchestration_core_problems_comparison">Table 4</a> shows how these orchestration
orchestration, and serverless orchestration. <a href="04.html#orchestration_core_problems_comparison">Table 5</a> shows how these orchestration

approaches compare in their ability to solve the core orchestration problems introduced in the beginning of the

Expand Down Expand Up @@ -8602,7 +8602,7 @@ <h2 id="comparison_orchestration_options">Comparing Orchestration Options</h2>

<table id="orchestration_core_problems_comparison" class="tableblock frame-all grid-all stretch">

<caption class="title">Table 4. How orchestration approaches compare in terms of the core orchestration problems</caption>
<caption class="title">Table 5. How orchestration approaches compare in terms of the core orchestration problems</caption>

<colgroup>

Expand Down Expand Up @@ -8924,15 +8924,15 @@ <h2 id="comparison_orchestration_options">Comparing Orchestration Options</h2>

that they varied across a number of other dimensions, such as speed, ease of learning, and so on.

<a href="04.html#orchestration_attributes_comparison">Table 5</a> shows how the different orchestration approaches compare across these
<a href="04.html#orchestration_attributes_comparison">Table 6</a> shows how the different orchestration approaches compare across these

dimensions, which I&#8217;ll refer to as the <em>core orchestration attributes</em>:</p>

</div>

<table id="orchestration_attributes_comparison" class="tableblock frame-all grid-all stretch">

<caption class="title">Table 5. How orchestration approaches compare in terms of core orchestration attributes</caption>
<caption class="title">Table 6. How orchestration approaches compare in terms of core orchestration attributes</caption>

<colgroup>

Expand Down Expand Up @@ -9170,9 +9170,9 @@ <h2 id="comparison_orchestration_options">Comparing Orchestration Options</h2>

<div class="paragraph">

<p>I hope that next time you need to deploy an app, you can use <a href="04.html#orchestration_core_problems_comparison">Table 4</a> and
<p>I hope that next time you need to deploy an app, you can use <a href="04.html#orchestration_core_problems_comparison">Table 5</a> and

<a href="04.html#orchestration_attributes_comparison">Table 5</a> to pick the right tool for the job.</p>
<a href="04.html#orchestration_attributes_comparison">Table 6</a> to pick the right tool for the job.</p>

</div>

Expand Down
108 changes: 54 additions & 54 deletions docs/05.html
Original file line number Diff line number Diff line change
Expand Up @@ -3036,7 +3036,7 @@ <h4 id="_always_use_version_control">Always use version control</h4>

<div class="paragraph">

<p>The single most important best practice with version control is the following:</p>
<p>The single most important best practice with version control is: use it.</p>

</div>

Expand Down Expand Up @@ -3586,9 +3586,11 @@ <h2 id="_build_system">Build System</h2>

<p>Most software projects use a <em>build system</em> to automate important operations, such as compiling the code, downloading

dependencies, packaging the app for deployment, running automated tests, and so on. The build system serves the
dependencies, packaging the app for deployment, running automated tests, and so on. The build system serves two

following key role in software projects:</p>
audiences: the developers on your team, who run the build steps as part of local development, and various

scripts, which run the build steps as part of automating your software delivery process.</p>

</div>

Expand Down Expand Up @@ -4138,43 +4140,9 @@ <h3 id="_dependency_management">Dependency Management</h3>

else to solve certain problems for you, instead of having to solve everything yourself from scratch (and maintain it

all). If you want to maximize that leverage, then here&#8217;s a key rule:</p>

</div>

<div class="admonitionblock tip">

<table>

<tr>
all). If you want to maximize that leverage, make sure to never copy &amp; paste dependencies into your codebase. If you

<td class="icon">

<div class="title">Tip</div>

</td>

<td class="content">

<div class="title">Key takeaway #3</div>

<div class="paragraph">

<p>Use a dependency management tool to pull in dependencies—not copy &amp; paste.</p>

</div>

</td>

</tr>

</table>

</div>

<div class="paragraph">

<p>Why not copy &amp; paste? If you copy &amp; paste a dependency, you run into a variety of problems:</p>
copy &amp; paste a dependency, you run into a variety of problems:</p>

</div>

Expand Down Expand Up @@ -4256,6 +4224,36 @@ <h3 id="_dependency_management">Dependency Management</h3>

</div>

<div class="admonitionblock tip">

<table>

<tr>

<td class="icon">

<div class="title">Tip</div>

</td>

<td class="content">

<div class="title">Key takeaway #3</div>

<div class="paragraph">

<p>Use a dependency management tool to pull in dependencies—not copy &amp; paste.</p>

</div>

</td>

</tr>

</table>

</div>

<div class="paragraph">

<p>Let&#8217;s try out an example with the Node.js sample app and NPM.</p>
Expand Down Expand Up @@ -4682,7 +4680,21 @@ <h2 id="automated_testing">Automated Testing</h2>

code</em> works the way you expect it to. The main reason to write automated tests is not that tests prove the

correctness of your code (they don&#8217;t) or that you&#8217;ll catch all bugs with tests (you won&#8217;t), but the following:</p>
correctness of your code (they don&#8217;t) or that you&#8217;ll catch all bugs with tests (you won&#8217;t), but that a good suite of

automated tests gives you the confidence to make changes quickly.</p>

</div>

<div class="paragraph">

<p>The key word is <em>confidence</em>: tests provide a psychological benefit as much as a technical one. If you have a good test

suite, you don&#8217;t have to keep the state of the whole program in your head. You don&#8217;t have to worry about breaking other

people&#8217;s code. You don&#8217;t have to repeat the same boring, error-prone manual testing over and over again. You just run a

single test command and get rapid feedback on whether things are working.</p>

</div>

Expand Down Expand Up @@ -4718,18 +4730,6 @@ <h2 id="automated_testing">Automated Testing</h2>

<div class="paragraph">

<p>The key word is <em>confidence</em>: tests provide a psychological benefit as much as a technical one. If you have a good test

suite, you don&#8217;t have to keep the state of the whole program in your head. You don&#8217;t have to worry about breaking other

people&#8217;s code. You don&#8217;t have to repeat the same boring, error-prone manual testing over and over again. You just run a

single test command and get rapid feedback on whether things are working.</p>

</div>

<div class="paragraph">

<p>There are many types of automated tests:</p>

</div>
Expand Down Expand Up @@ -6828,13 +6828,13 @@ <h4 id="_the_test_pyramid">The test pyramid</h4>

<p>The answer is: a mix of all of them! Each type of test has different types of errors they can catch, plus different

strengths and weaknesses, as summarized in <a href="05.html#test_strengths_weaknesses">Table 6</a>:</p>
strengths and weaknesses, as summarized in <a href="05.html#test_strengths_weaknesses">Table 7</a>:</p>

</div>

<table id="test_strengths_weaknesses" class="tableblock frame-all grid-all stretch">

<caption class="title">Table 6. A comparison of different types of automated tests</caption>
<caption class="title">Table 7. A comparison of different types of automated tests</caption>

<colgroup>

Expand Down
Binary file modified docs/images/ch1/architecture-evolution-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/ch1/architecture-evolution-2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/ch1/architecture-evolution-3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/ch1/architecture-evolution-4.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/ch1/architecture-evolution-5.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/ch1/architecture-evolution-6.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/ch1/architecture-evolution-7.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/ch1/architecture-evolution-8.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/ch1/architecture-evolution-9.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 4087fef

Please sign in to comment.