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
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).