I've written a lot of posts over the years, so organized them by category.
You can also see the full list.
25 Aug 2019 | GraphQL Typed Root Pattern |
21 Jan 2018 | Micro Service Testing at Scale |
18 Aug 2017 | Compassionate Code Reviews |
12 Aug 2017 | Tools, Productivity, and Investing in Yourself |
13 Apr 2013 | Services Should Come with Stubs |
15 Sep 2012 | Building Sane Rich User Interfaces |
24 Nov 2010 | Why I'm a Static Typing Bigot |
22 Jul 2010 | Dammit, MySQL |
09 Jul 2010 | Why I Don't Like Mocks |
07 Aug 2018 | Integration Test is a Useless Term |
08 Jul 2018 | Avoid Using External Files in Tests |
20 Jun 2018 | Skepticism About Record/Replay Tests |
28 Nov 2017 | Using Given/When/Then For Tests |
30 Sep 2017 | Dealing with Selenium API Gotchas |
23 Aug 2017 | The Futility of Cross-System Integration Testing |
26 Jun 2017 | The Curse of Webapps Being Visual for TDD |
07 Jan 2017 | Obsessively Simple Test Values |
29 Nov 2015 | The Holy Grail of Database Testing |
25 May 2014 | The Pain of Small Methods |
12 Apr 2013 | East-Oriented Programming |
26 Dec 2012 | High Level Assertions |
15 Dec 2012 | Good Test, Bad Test |
23 Jul 2012 | Faking at the Right Level |
28 Mar 2020 | Always Separate User Intent |
02 Jul 2018 | The Half-Truth of GRPC & GraphQL Consistency |
29 May 2018 | Applying Virtual DOM to Systems Integrations |
16 Dec 2016 | First Principles |
22 Jul 2016 | Staffing a Front-End Team |
24 Jun 2016 | Stuck on a Dead Framework |
11 Aug 2015 | REST is Aging, GraphQL is the New Thing |
08 Feb 2014 | Dependency Injection Thought Experiment |
27 Jan 2014 | Using Your Database as a Queue |
07 Jan 2013 | DHH vs. Fowler |
07 Oct 2012 | Brief Dependency Injection Skeptic |
16 Jun 2012 | Abstracting Types Across Domains |
08 May 2012 | What's Wrong with a Schema? |
15 Apr 2011 | Command Query Responsibility Segregation with S3 and JSON |
17 Mar 2011 | Framework-less Dependency Injection |
15 Jul 2010 | Code Generation Is Not Evil |
15 Jan 2010 | Changing My Style |
24 Jun 2009 | Achieving Durability |
30 Jun 2018 | Shape is a Better Term Than Object |
13 Jun 2018 | Thoughts on Go (from a JVM Programmer) |
30 May 2018 | Is Haskell's Complexity Artificial? |
28 Jan 2014 | Can Java Be Good Enough? |
08 Mar 2013 | Stay in the Language |
17 Apr 2012 | Continually Improving Browser Technology |
17 Jan 2010 | Caller-Side Structural Typing |
12 May 2009 | Dynamic Keywords |
06 Feb 2009 | Boojay is Promising |
22 Feb 2014 | What I Would Remove from GWT--Basically Everything |
30 Aug 2012 | Tessell Gets Member Changed Events |
23 Jun 2012 | CSS Quirk, Collapsing Margins |
16 Jun 2012 | ErraiUI Initial Impression |
10 Dec 2011 | todomvc in Tessell |
14 Oct 2011 | Sane AJAX Testing in Selenium |
03 Oct 2011 | A GWT Developer's Reaction to Dart |
23 Nov 2010 | GWT Handler Registrations |
30 Aug 2010 | Doubting GMail-style Loading Indicators |
13 Aug 2010 | Collecting User Actions with GWT |
07 Jul 2010 | GWT Seamless Deployments |
28 Jun 2010 | gwt-mpv-apt 1.1 |
07 Apr 2010 | GWT View Generation |
31 Mar 2010 | GWT MVP Tables |
02 Nov 2012 | Joist Execute Class |
24 Jun 2012 | Joist Snapshots, A 2nd-Level Cache Alternative |
29 Mar 2012 | Joist Builder Defaults |
21 Mar 2012 | Joist, the Java ORM for Me |
22 Aug 2010 | Joist Tip, Fast Database Resets |
15 Aug 2010 | Joist vs. Hibernate SQL |
16 Jul 2010 | Joist/ORM Prefetching |
14 Jul 2009 | Validation with Objects Instead Of Annotations |
05 Sep 2019 | Hooks Don't Have To Be Functional |
28 Mar 2018 | Stubs in TypeScript using Mapped Types |
20 Mar 2018 | Variations on a State Machine |
16 Mar 2018 | Are Classes and Prototypes that Different? |
29 Dec 2014 | Trait Rules of Thumb |
29 Dec 2014 | Spark Size Tracking |
12 Feb 2014 | Spark Report Patterns |
22 Jan 2013 | What Makes Spark Exciting |
29 Dec 2012 | Spark Test |
14 Dec 2012 | Scala Implicit Conversion with Tuples |
04 Oct 2011 | Why No One Uses Scala's Structural Typing |
10 Mar 2010 | Lift Templating s/is/was a Joke |
10 Sep 2009 | Running ScalaTest Spec Tests from Eclipse |
13 Jul 2009 | Scala Per-Instance Singletons |
27 Nov 2015 | Using Byteman To Debug Logging |
07 Oct 2014 | Moving to Gradle |
03 Oct 2014 | jOOQ Went Commercial |
01 Apr 2014 | JDK 1.8/1.7 Compatibility Gotcha |
29 Aug 2012 | Optional Folders in Eclipse |
22 Jun 2012 | How to Sanely Use Ivy's Artifact Tags |
28 Feb 2011 | Preferred Build Setup |
18 Jul 2010 | Publishing to Maven Repos with Ivy |
21 Jul 2009 | Bindgen 2.0 Released |
29 Apr 2009 | The IBM JDK is Awesome |
23 Apr 2009 | Ivy is Useful |
16 Feb 2009 | Grails Stacktraces |
18 Jan 2009 | JavaFX Decompiled |
10 Jan 2009 | War-less Development with Jetty |
15 Jul 2018 | Mono vs. Project Repos? Hurray, software sucks |
27 Jun 2018 | I Forgot How Much I Don't Like Pull Requests |
03 Mar 2017 | Writing Emails Asking for Help |
04 Feb 2017 | Gmail Filter Tips |
16 Sep 2016 | The One True Way Of Indentation |
09 Aug 2015 | MoreUnit Supports Custom Languages |
26 May 2014 | From xmonad to i3 on Ubuntu 14.04 |
03 Feb 2014 | Copy & Extend, A Great Way To Learn |
07 Sep 2013 | If you cherry pick, your branch model is wrong |
01 Dec 2012 | One Click VNC |
14 Sep 2012 | Screencasts in Linux |
24 Mar 2012 | Private Static Factory Method Chord |
21 Apr 2011 | Modern Code Generation Talk |
21 Aug 2010 | git workshop |
05 Mar 2010 | Moving an existing git repo into svn |
04 Mar 2010 | git config |
13 Dec 2009 | Sprunge And Dropbox |
23 Aug 2009 | Port 80 to Port 8080 |
19 Feb 2009 | Old School Bell Trick |