Module
IDE Basics

How well do you really know the debugger in your IDE? In this first free module we delve into the hidden features and capabilities within the IDE.

Duration: 93 minutes.

Start
...
free

Introduction (9:54)

Introduction and overview of the course

...
free

Program Control Flow (9:15)

Step-over is just the start. Do you know jump to line? Do you know force return? Force throw?

...
free

Watch and Evaluate (10:09)

The watch area is one we all know and most of us know we can change the values of variables there. But do you know about object marking?

...
free

Breakpoints (17:30)

Do you REALLY know breakpoints? Tracepoints? Watchpoints? Why do people advise against method breakpoints?

...
free

Streams and Collections (7:27)

When iterating or reviewing a collection of elements it's hard to focus on the problematic datapoint. Learn how to analyze the data more effectively...

...
free

Watch (11:27)

The watch area is probably the most amazing part of the debugger. With entry renderers you will get a level of insight into the app that you could never imagine!

...
free

Threading (8:54)

Concurrency and parallelism are some of the hardest problems in computer science. Debuggers can do a lot to help us when dealing with these issues!

...
free

Memory Debugging (6:43)

When we run into memory related issues we often reach to the profiler. It's a great tool but it's also a blunt instrument. Debuggers can change the story in the last mile

...
free

Remote Debugging (11:58)

Remote debugging isn't challenging or advanced. That's the problem. It's a security flaw and a tremendous risk.

Module
Theory

The scientific method that underlies the debugging process...

Duration: 77 minutes.

Start
...
premium

The Checklist (10:26)

In the next few videos we tackle the scientific method that underlies the debugging process. We will also discuss the methodology we should follow when tracking and fixing bugs. By following this process we can shorten the time spent debugging.

...
premium

"It works on my machine" (10:31)

What do you do when you can't reproduce an issue that a customer is experiencing?

...
premium

Isolating Assumptions (13:32)

How do you know what are your assumptions so you can verify them as part of the debugging process?

...
premium

Common Problems and Solutions (15:44)

This module was a bit heavy on theory, in this video we give concrete examples you can use.

...
premium

Elimination (6:55)

The process of elimination is where we often make mistakes when debugging.

...
premium

Process (6:24)

There's a standard bureaucratic process to bug resolution. That's a "Good Thing". It helps us avoid regressions and collisions.

...
premium

Tips and Tricks (13:42)

Here are some common debugging tips I picked up over the past 30 years.

Module
Tools

Use these external tools to get deep insight into your applications, locally and in production.

Duration: 60 minutes.

Start
...
premium

dtrace (11:35)

One of the most innovative tools for production debugging...

...
premium

strace (7:01)

strace isn't as powerful as dtrace, but its simplicity is a superpower in its own right.

...
premium

git-bisect (8:37)

git as a debugging tool? bisect is a "magical" feature of git. It helps us pinpoint the specific commit that triggered a regression.

...
premium

jmxterm (9:54)

JMX and management APIs give us a level of insight that's hard to achieve otherwise.

...
premium

jhsdb (9:14)

jhsdb is a Serviceability Agent tool. Serviceability Agent is a JDK component used to provide snapshot debugging, performance analysis and to get an in-depth understanding of the Hotspot JVM and the Java application executed by the Hotspot JVM.

...
premium

WireShark (10:12)

WireShark lets us inspect the network and verify the underlying behavior of our code and protocols.

...
premium

tcpdump (4:20)

tcpdump is the perfect companion to WireShark. It lets us get debug information from a customer or production.

Module
Code

Learn how to write code that fails in a better way. Code that's easy to debug and fix.

Duration: 53 minutes.

Start
...
premium

Logging Basics (5:35)

Logging is the oldest debugging in the world. It's pre-cognitive debugging. It's immensely important, yet we often don't give it enough thought...

...
premium

Overlogging and Best Practices A (9:10)

Overlogging is too often overlooked but can bring a company down. We also discuss the best practices in logging.

...
premium

Overlogging and Best Practices B (7:33)

The second part of the best practices guide.

...
premium

Testing Basics (8:56)

Debugging and testing are two vastly different subjects. There are many books on testing, and this course isn���t about testing. Yet both debugging and testing have a few convergence points of interest which we need to cover.

...
premium

Test Driven Development (6:50)

TDD isn't an alternative to debugging or a replacement to it. We cover the good, bad and ugly of TDD.

...
premium

Fail-Safe and Fail-Fast (5:46)

Fail-fast is typically easier to debug; a failure is immediate and usually obvious. A fail-safe implementation will be more robust and will survive in a hostile production environment...

...
premium

Defining Failure (9:25)

The discussion of failure is often very binary. Code fails or succeeds, there's a crash or "it works". This is a very problematic state of mind. A crash or downtime is bad. But by no means is it the only type of failure, or even the worst type of failure.

Module
Kubernetes Debugging

Fixing issues at "Kubernetes Scale" is different. In this module we review the complexities of k8s debugging.

Duration: 32 minutes.

Start
...
premium

Kubernetes Introduction A (9:30)

Despite the title of this module and video, a lot of the ideas explained here aren���t unique to Kubernetes and can apply to all large-scale distributed systems. These two videos try to teach k8s to developers as opposed to DevOps.

...
premium

Kubernetes Introduction B (7:20)

Continues the discussion of Kubernetes basics.

...
premium

The Problem with Kubernetes (6:06)

Before we reach the debugger and go through the entire process, we need to understand the core problem. A core idea in Kubernetes is that one shouldn't modify container instances. If you do that, you might cause issues as Kubernetes brings up new instances.

...
premium

Source Debugging in Kubernetes (4:01)

Debugging using the tools we described up until now is great. We can solve many problems using these tools. But they are not debuggers; solving problems deep within the code is hard without debuggers. The best approach is to reproduce the problem without Kubernetes and outside of production, but in some cases, this just isn���t an option.

...
premium

Kubernetes Configuration Issues (5:29)

We need to understand issues with target containers and what OPS are dealing with every day. If you're lucky enough to have a DevOps engineer on staff, then you probably don't need to know a lot of the problems we discuss here. It's still worthwhile to build some basic knowledge about the problems we can run into with Kubernetes configurations since there's a lot of overlap.

Module
Serverless Debugging

Like many things in software, the benefits of serverless (or Platform as a Service) are great. We can ignore infrastructure complexities and focus on code. Scaling becomes seamless and, when compared to some alternatives: affordable. Performance is also great under the right conditions. Here���s where engineers expect the other shoe, what���s the downside?

Duration: 19 minutes.

Start
...
premium

Serverless Debugging Introduction (9:48)

Serverless debugging could be viewed as an oxymoron. It���s a managed, deeply controlled, and disconnected environment. We don���t have most of the typical debugging tools at our disposal. The distributed and controlled nature of the environment essentially blocks any chance of remote debugging.

...
premium

Serverless Local Debugging (4:06)

Simpler webservices can be debugged locally. It���s still unpleasant and not nearly as helpful.

...
premium

Using Feature Flags (5:26)

Feature flags aren���t specifically related to serverless debugging. They are a great tool for lowering the risk of testing in production. In a serverless environment, these are one of the chief mitigating capabilities.

Module
Fullstack Debugging

I define fullstack as a process of submitting a pull request that covers all the parts required to implement a feature, backend, database, frontend and configuration. It doesn���t make us an expert in all of these; far from it. It means we work on a vertical feature and enter domains where our knowledge is cursory. This is good, when we have a reviewer who is a domain expert and can guide us through the pitfalls of the domain.

Duration: 42 minutes.

Start
...
premium

Fullstack Debugging (6:16)

The definition of fullstack is shifting like quicksand to match whatever the observer considers to be the stack. I���ve seen some definitions that include OPS aspects into the mix. A more common definition follows the process of writing both the front end and the backend.

...
premium

Frontend Debugging (8:21)

Frontend debugging is much more than console.log (although we will discuss that too). The debuggers built into the browser have fantastic tricks up their respective sleeves.

...
premium

Frontend Logging (8:42)

We discussed logging in the 4th module, but frontend logging is different in many regards. The first big difference is the quality of debugging via printing. As you may recall I���m a big advocate of using tracepoints instead of logging. Tracepoints are still superior to print statements in most regards, but in front end programming the difference isn���t as pronounced.

...
premium

Frontend Networking and Storage (4:45)

In the 3rd module we discussed Wireshark, which is an amazing tool for observing network traffic. The tools within the browser exceed it for most common use cases and make debugging network performance and bugs stupid simple. Many problems express themselves in the frontend, either via the console or the network monitor. I���ll skip the discussion of performance, since that is a subject so big it warrants its own book. In this case I want to highlight tricks for debugging using these network consoles.

...
premium

The Database Layer (4:43)

Debugging database-related issues is a massive subject that is hard to cover in a generic debugging course. Issues are often very database specific and as a result we need to make some wide sweeping generalizations about the database and caching layers.

...
premium

Database Failures and Solutions (10:07)

In this section we discuss common database failures and the strategies to debug or avoid such failures.

Module
Observability and Monitoring

These tools provide actionable insight into our production systems. This isn���t a new idea, but with the rising complexity we have due to containerization, orchestration, and microservices, these tools have become essential. It���s rare to find a modern deployment that doesn���t use several such tools. Tool vendors focus their sales, marketing, functionality and documentation on the DevOps market which makes the tools less ���actionable��� to the developer community.

Duration: 45 minutes.

Start
...
premium

Observability (5:33)

If you search the web for the definition of monitoring and observability, you���ll end up with almost as many definitions as there are results. Before we go into the nitty gritty of textbook definitions, I���d like to focus on why we need these things at all. What purpose do they serve?

...
premium

Pillars of Observability (5:43)

Logs, Metrics and Distributed Tracing are the pillars of observability. Here we go through them from a birds eye view.

...
premium

Prometheus (5:47)

Since its release in 2012, it has become the de-facto standard for many monitoring needs. As a result, it became the second hosted Cloud Native Computing Foundation project after Kubernetes itself. The ubiquity, portability, simplicity and performance of Prometheus keep it a popular option even a decade after its release.

...
premium

Grafana and OpenTelemetry (7:32)

If you search the web for the definition of monitoring and observability, you���ll end up with almost as many definitions as there are results. Before we go into the nitty gritty of textbook definitions, I���d like to focus on why we need these things at all. What purpose do they serve?

...
premium

Culture of Observability (9:09)

Up until now this module covered a small set of tools that we have at our disposal as engineers. At the very least, the tools we can request from the DevOps team. If I just list all the tools available with a short blurb, this might become the longest and least interesting module. There are many tools. They often have merit, value, and necessity. This is a rapidly evolving field, and even if we dedicated the entire course just to these tools and their capabilities, we might run out of space.

...
premium

Developer Observability (12:15)

If you search the web for the definition of monitoring and observability, you���ll end up with almost as many definitions as there are results. Before we go into the nitty gritty of textbook definitions, I���d like to focus on why we need these things at all. What purpose do they serve?