diff --git a/website/docs/internals/graph.html.md b/website/docs/internals/graph.html.md
index 684156433e..e2de628f58 100644
--- a/website/docs/internals/graph.html.md
+++ b/website/docs/internals/graph.html.md
@@ -21,6 +21,12 @@ effectively use Terraform. The details are documented here for
those who wish to learn about them without having to go
spelunking through the source code.
+For some background on graph theory, and a summary of how
+Terraform applies it, see the HashiCorp 2016 presentation
+[_Applying Graph Theory to Infrastructure as Code_](https://www.youtube.com/watch?v=Ce3RNfRbdZ0).
+This presentation also covers some similar ideas to the following
+guide.
+
## Graph Nodes
There are only a handful of node types that can exist within the
diff --git a/website/intro/getting-started/dependencies.html.md b/website/intro/getting-started/dependencies.html.md
index ea388f8635..ea279aa236 100644
--- a/website/intro/getting-started/dependencies.html.md
+++ b/website/intro/getting-started/dependencies.html.md
@@ -129,40 +129,52 @@ first.
## Implicit and Explicit Dependencies
-Most dependencies in Terraform are implicit: Terraform is able
-to infer dependencies based on usage of attributes of other
-resources.
+By studying the resource attributes used in interpolation expressions,
+Terraform can automatically infer when one resource depends on another.
+In the example above, the expression `${aws_instance.example.id}` creates
+an _implicit dependency_ on the `aws_instance` named `example`.
-Using this information, Terraform builds a graph of resources.
-This tells Terraform not only in what order to create resources,
-but also what resources can be created in parallel. In our example,
-since the IP address depended on the EC2 instance, they could
-not be created in parallel.
+Terraform uses this dependency information to determine the correct order
+in which to create the different resources. In the example above, Terraform
+knows that the `aws_instance` must be created before the `aws_eip`.
-Implicit dependencies work well and are usually all you ever need.
-However, you can also specify explicit dependencies with the
-`depends_on` parameter which is available on any resource. For example,
-we could modify the "aws\_eip" resource to the following, which
-effectively does the same thing and is redundant:
+Implicit dependencies via interpolation expressions are the primary way
+to inform Terraform about these relationships, and should be used whenever
+possible.
+
+Sometimes there are dependencies between resources that are _not_ visible to
+Terraform. The `depends_on` argument is accepted by any resource and accepts
+a list of resources to create _explicit dependencies_ for.
+
+For example, perhaps an application we will run on our EC2 instance expects
+to use a specific Amazon S3 bucket, but that dependency is configured
+inside the application code and thus not visible to Terraform. In
+that case, we can use `depends_on` to explicitly declare the dependency:
```hcl
-resource "aws_eip" "ip" {
- instance = "${aws_instance.example.id}"
- depends_on = ["aws_instance.example"]
+# New resource for the S3 bucket our application will use.
+resource "aws_s3_bucket" "example" {
+ # NOTE: S3 bucket names must be unique across _all_ AWS accounts, so
+ # this name must be changed before applying this example to avoid naming
+ # conflicts.
+ bucket = "terraform_getting_started_guide"
+ acl = "private"
+}
+
+# Change the aws_instance we declared earlier to now include "depends_on"
+resource "aws_instance" "example" {
+ ami = "ami-2757f631"
+ instance_type = "t2.micro"
+
+ # Tells Terraform that this EC2 instance must be created only after the
+ # S3 bucket has been created.
+ depends_on = ["aws_s3_bucket.example"]
}
```
-If you're ever unsure about the dependency chain that Terraform
-is creating, you can use the [`terraform graph` command](/docs/commands/graph.html) to view
-the graph. This command outputs a dot-formatted graph which can be
-viewed with
-[Graphviz](http://www.graphviz.org/).
-
## Non-Dependent Resources
-We can now augment the configuration with another EC2 instance.
-Because this doesn't rely on any other resource, it can be
-created in parallel to everything else.
+We can continue to build this configuration by adding another EC2 instance:
```hcl
resource "aws_instance" "another" {
@@ -171,19 +183,20 @@ resource "aws_instance" "another" {
}
```
-You can view the graph with `terraform graph` to see that
-nothing depends on this and that it will likely be created
-in parallel.
+Because this new instance does not depend on any other resource, it can
+be created in parallel with the other resources. Where possible, Terraform
+will perform operations concurrently to reduce the total time taken to
+apply changes.
-Before moving on, remove this resource from your configuration
-and `terraform apply` again to destroy it. We won't use the
-second instance anymore in the getting started guide.
+Before moving on, remove this new resource from your configuration and
+run `terraform apply` again to destroy it. We won't use this second instance
+any further in the getting started guide.
## Next
-In this page you were introduced to both multiple resources
-as well as basic resource dependencies and resource attribute
-interpolation.
+In this page you were introduced to using multiple resources, interpolating
+attributes from one resource into another, and declaring dependencies between
+resources to define operation ordering.
-Moving on, [we'll use provisioners](/intro/getting-started/provision.html)
+In the next section, [we'll use provisioners](/intro/getting-started/provision.html)
to do some basic bootstrapping of our launched instance.