Skip to content
0:00 / 0:00

#functionalarchitecture#pitofsuccess#purefunctions

Functional architecture - The pits of success - Mark Seemann

NDC Conferences

230K subscribers • 107 videos on Hallway • Conference channel

YouTube
  • Recommended by 7 people: 5 on Hacker News, 1 in engineering communities and 1 curated list.
  • A classic. People kept recommending it from 2018 to 2025.
  • Presented by Mark Seemann, software architect and developer
  • An opinion. It argues one side of a question engineers disagree on.

Intermediate. Assumes working knowledge.

151K views10 years ago7 recommendations

Software designProgramming languagesSoftware architectureFunctional programmingDesign patterns

Mark Seemann explains how functional programming naturally leads to software architecture best practices, creating a pit of success.

Object-oriented architects and developers have, over the years, learned many hard lessons about successfully designing systems with object-oriented programming. This has led to a plethora of ‘best practices’ that are painfully passed on from older to younger generations via books, lectures, consulting, blog posts, etc. Many of these ‘best practices’ must be explicitly taught, because they don’t evolve naturally from object-oriented programming. Surprisingly, many of these hard-won ‘best practices’ fall naturally into place when applying functional programming. Instead of deliberate design, functional programming forms pits of success where you naturally fall into the same ‘best practices’ that you have to deliberately work for in object-oriented programming. In this session, you’ll learn about a handful of such ‘best practices’, and how functional programming automatically lead you there, without your explicit effort. NDC Conferences ndcsydney.com ndcconferences.com

Why it's here

7 people recommend this

What people say. Highly recommended for demonstrating how a functional approach naturally leads to clean architecture and a pit of success.

Moments people linked to

adamklon Hacker News • Recommends

On “A Theory of Software Architecture”

…of ramp up. Of course, this isn't the solution to every problem (it obviously depends on the domain you are working in, for me its webDev and backends), but I think maybe its a good way for people to start. Edit: Here is a great talk demonstrating that by following a simple functional approach, your code can naturally fall into a “pit of success”: link to this video…

Xunjinon Hacker News • Recommends

On “Habits of Expert Software Designers (2019)”

His videos about functional programming are amazing (Mark Seemann). "Pit of success" is one of the best. link to this video

u/Raziel_LOKin r/functionalprogramming • Recommends

Working with side effects in functional programming, where to put the impure functions? Hi all, I have learned quite a handful of fp in JS and playing with a little project I was wondering where to put the impure code when working in a project with fp. I like this talk because the guy presenting gives some hints how, and uses a lot of DDD terminology which makes it easier for me to understand. [video He explains how elm and other languages does it by having a runtime that run side effects on behalf of the core domain. I looked it up but there is not much about it. Question is: Does anyone know how or have any examples of how people usually achieve this? Thanks

awesome-talkscurated list on GitHubRecommends

Under “Functional Programming”

Functional architecture - The pits of success by **Mark Seemann** (NDC Sydney 2016) 1:00:09

pwmon Hacker News • Recommends

On “Functional core, imperative shell (2012)”

The goal is that everything in the core is pure data types and functions. Now, depending on your problem domain, your core can be small or huge compared to the shell. Your question was all about IO/effects. They are impure and belong to the shell. If what you work on does mostly IO then you will have a lot of impure code lying around by definition. Still, the idea is that you should keep the amount of time spent in impure land minimal, ie. drop into pure structures/computation as soon as possible during program execution and only dip out of on occasions when you have to do IO. Here is a good talk about these ideas: link to this video

adamklon Hacker News • Recommends

On “Software engineering topics I changed my mind on”

…valuable aspect of functional programming. That is a thought process that you can apply in pretty much any language that will give you the biggest bang for your buck. Edit: Here’s some great examples of the benefits of functional thinking without going off the deep end. 1. Boundaries by Gary Bernhardt - link 2. Pits of Success by Mark Seemann - link to this video 3. Grokking Simplicity by Eric Normand - link…

kirseon Hacker News • Recommends

On “F# Good and Bad”

Mark Seemann has a good talk on this called the "functional pits of success" -> link to this video Of all the languages I've used nothing is quite as fun as refactoring an F# app down to nothing. Expressive power is king in F# with the whole .NET ecosystem behind it.

tubthumper8on Hacker News • Recommends

On “Why F#?”

"pit of success" from the previous comment might refer to this video, which is long but good especially to adjust to a different mindset link to this video

u/hypmraljin r/dotnet • Mentions

STATE OF F# / F# for next project Hello everyone & Please accept my apologies for the long post! **Firstly, little bit of background**. I am working for the startup company which I have co-funded and I am in charge of all technical decisions. Our only product is B2C app and we have pretty small tech team (2 people on the mobile app and most of the time only me on the backend, but hopefully we will hire more devs in future). Even though I have been programming since before high school (mostly C & C#), this was my first real world project (probably not important but I was 21 then, and 25 now), and as it is not hard to imagine that I have butchered Domain - now we have anaemic Domain model a…
33View on Reddit

u/TheSilverNimbusin r/functionalprogramming • Mentions

On “Which Functional Language with strong typing to learn?”

…e before getting into this site. In the talks and on this site, he talks about the functional programming topics with a very humorous and easy-to-understand language. You should really check these out! Here are a few talks of his I highly recommend (with little to no knowledge of functional programming or F# required): * *F# for C# Programmers* | link to this video * *The Functional Programmer's Toolkit* | link to this video * *The Power of Composition* | link to this video * *The Lazy Programmer's Guide to Writing Thousands of Tests* | link to this video * *Domain Modeling Made Functional* | link to this video * *Functional Design Patterns* | link to this video You can also check out this talk that I found interesting, which includes some F#, functional…

u/phadejin r/haskell • Mentions

On “Hexagonal Architecture and Free Monad: Two related design patterns?”

Functional architecture - The pits of success by Mark Seemann talks (also) about Hexagonal Architecture (aka Ports and Adapters, or Onion Architecture) link to this video > These books are so big ["Agile Software Development, Principles, Patterns, and Practices" or "Dependency Injection in .NET"] should be a telltale sign for us: If we need that many pages 700 and 500 respectively to explain a concept, maybe we start to think there should be a better way. That relates to the fact that Hexagonal Architecture is hard to achieve in Classical OOP. --- It's not about Free Monad is the thing we use an FP. The key is that we use **pure functions**. --- In the first step towards better architecture it'…

u/ArchieTectin r/functionalprogramming • Mentions

On “Any example of a good business domain model designed functionally?”

I was mistaken, it was a lecture by Mark Seeman, and you are absolutely right. link to this video

u/ahusbyin r/functionalprogramming • Mentions

On “Method design: If a method is also a pure function, should it be 'static'?”

…e impossible to keep up, as if gravity itself is working against them. Ideally we want to use a language with a gravitational pull towards your desired code style. In other words, if you are trying to do functional programming with other people you should be using another language than Java. On the gravity metaphor, I found this talk interesting: link to this video…

truculenton Hacker News • Mentions

On “Learning Haskell is no harder than learning any other programming language”

> I don’t have that talent, focus and skill. Same. I'm perfectly happy to fall into the pit of success1. 1. link to this video

kirseon Hacker News • Mentions

On “Dark’s new backend will be in F#”

good default behavior and how it nudges programmers to favor predictable and composable solutions Agree. Mark Seeman calls these the "Functional pits of success" link to this video I think the toughest thing about F# is that it doesn't offer as many Google-able easy solutions, so I'm stuck using it for utility and client libs at work. Trying to get a whole team onboard is a non-starter. It takes a good 6-12 months to adjust the mindset and most people are just looking to come into work, find their tough questions on StackOverflow and head out for the day.

scnson Hacker News • Mentions

On “The problem of effects in Rust (2020)”

Yeah, me too. They published quite a lot of papers using it 0. The datalog integration is pretty nice too, haven't gotten to learning Prolog yet, but seeing how concise a sudoku solver can be implemented in it was an experience. (edit) you can import Java, Kotlin and Scala in it too, those are automatically Impure. Would enable purely functional architecture 1 and falling into the "Pit of success" 2. 0 link 1 link 2 link to this video