My favorite talks

These are the talks that have had a huge impact on how I approach software development

Min-maxing Software Costs Konstantin Kudryashov

Gaming software costs using 3 rules

  • Own everything you write
  • Try not to write anything
  • Reuse everything else

Things I Believe Now That I'm Old Ross Tuck

Advice on advice

  • Consider the source, consider the context
  • Be open to advice, use the advice, meditate on it
  • Give advice, collect advice

The Silver Bullet Syndrome Hadi Hariri

There is no silver bullet...

Software is Details Kevlin Henney

Programming is a design activity. Programming is a commitment to details. Knowledge is the very currency of software. Details count.

All the Little Things Sandi Metz

Want better apps? Make smaller things... yeah that's it.

7 minutes, 26 seconds, and the Fundamental Theorem of Agile Software Development J. B. Rainsberger

Great explanation on how to use TDD to reduce accidental complication

Making Badass Developers Kathy Sierra

Half-a-skill beats a half-assed skill. Practice does not make perfect. Practice makes permanent.

Scaling Yourself Scott Hanselman

If it's not improving my life in some way, it's mental clutter and it's out. Excellent advice on how to end the day without guilt.

Model-Minded Development George Fairbanks

Programming is theory building. Programming is distributed cognition.

Boundaries Gary Bernhardt

Best explanation of the actor model I've seen. Functional core, imperative shell.

The art of destroying software Greg Young

Never write big programs. Your code should be easy to delete. Optimize for your ability to rewrite yor system.

Connascence Examined Jim Weirich

Connascence in software are those things that need to change together. It is important because change is expensive.

Event Storming Alberto Brandolini

DDD is for rewriting software frequently. Event storming is an act of deliberate collective learning. Value is in the interaction between people

Testing Lessons from Extreme Programmers Elisabeth Hendrickson

Effective testing involves a whole team effort. This talk also introduced me to the concept of exploratory testing .

Workflows of refactoring Martin Fowler

The only reason to refactor is to deliver more functionality more quickly. The types are: TDD, litter pickup, comprehension, preparatory and long term refactoring

The Transformation Priority Premise Robert Martin

Every new test adds a new constraint. As the tests gets more specific, the code must get more generic. Every change that makes the code more generic is a transformation.

Metaphors We Compute By Alvaro Videla

To program is to write to another programmer about our solution to a problem. Metaphors are a tool to do so, for instance, without types we just have operations on streams of bytes

Real conversations in BDD Liz Keogh

Having conversations is more important than capturing conversations. Having conversations is more important than automating conversations. BDD is about conversations, examples and scenarios

Hexagonal Rails Matt Wynne

Your domain model is in the communication patterns between your objects

Overkill Katrina Owen

Mastery is hard. Practice simple things intensely. Challenge yourself

Your code sucks, let's fix it Rafael Dohms

Object calisthenics: A variety of simple, exercises to achieve better OO design and code quality

Unbreakable Domain Models Mathias Verraes

Use objects as a consistency boundary. Make the implicit explicit. Protect your invariants

Nothing is Something Sandy Metz

Pay attention to your objects messages. Always seek for abstractions, because nothing is always something

Modelling by example Konstantin Kudriashov

Use BDD scenarios to drive the design of your core domain model. Reduce translation costs by using the ubiquitous language in both your scenarios and your model.

You can’t fight Conway’s law Avraham Poupko

Conway's law: Any organization that designs a system will inevitably produce a design whose structure is a copy of the organization's communication structure.

Integrated Tests Are A Scam J. B. Rainsberger

The more integrated tests we have, the less design feedback we get. It produces a positive feedback loop of negative feelings.

Design matters Rebecca Wirfs-Brock

Reshape your design heuristics based on what you learn from your designs

Fast test, slow test Gary Bernhardt

The goals of tests: prevent regression, prevent fear (of breaking something), prevent bad design. What makes a unit test? 1. They test only one object's behavior, 2. Other classes can't break it

Development, by the numbers Anthony Ferrara

How can we objectively quantify whether code is good or if it needs improving?

Seven ineffective coding habits of many programmers Kevlin Henney

Noisy code, unsustainable spacing, lego naming, underabstraction, unencapsulated state, getters and setters, uncohesive tests

Tackling Complexity in the Heart of Software Eric Evans

What does Domain-Driven Design look like in 2017? We have more experience now. We have better tools now. We have an architectural environment better suited to DDD.

The Insufficiency of Good Design Sarah Mei

It's the communication patterns in a group rather than the individuals within it that determine whether or not they produce good code together. Your team's communication patterns are the best predictor of the quality of the code you produce.

The Magic Tricks of Testing Sandy Metz

Why do you hate your tests? They're slow. They're fragile. They're expensive. There's a few tricks to fix these problems. They'll make your tests: thorough, stable, fast, and few.

Visualise, Document & Explore your Software Architecture Simon Brown

The C4 model offers 4 diagrams to communicate software architecture: System Context, Containers, Components and Code. Documentation should describe what the code doesn't.

Software that Fits in Your Head Dan North

Code is not asset, code is cost. Code should be stabilised or killed off fast!

Shared mental models Jessica Kerr

Systems are more than their parts and more than the interaction between the parts. You don’t hire star developers, put them together, and poof get a great team. It’s the other way around. When developers form a great team, the team makes us into great developers.

Committing to quality Ulrika Malmgren

3 factors which impact quality in software teams: the conversations they have, the ways they work and how much they care about their craft (testing & programming).