A software engineer website

design

2024

Event sourcing migrations retrospective -

Designing strongly typed range -

Haskell Legacy: Adding features -

Haskell Legacy: Pure projection -

Haskell Legacy: CQRS -

Haskell Legacy: Going event-first -

Haskell Legacy: Reversing writes -

Haskell Legacy: Creating events -

Haskell Legacy: Extracting business logic and introducing effects -

Haskell Legacy: Testing -

Haskell Legacy: Introduction -

OOP has not invented encapsulation -

Types for building and types for running -

Types strengthening -

eDSLs for tests -

Type-driven development applied: librarian -

Types and Tests -

Architecture Heuristic YNIA: Events metadata -

Haskell: imports vs exports -

Haskell refactorings -

Bypassing Prometheus SDK push model -

Naming has a social convention -

Prescriptivism and Descriptivism -

Screaming Architecture -

2023

Architecture Heuristic YNIA: Participants -

From custom Monad to Polysemy -

Implementation-oriented Monad -

Architecture Heuristic YNIA: Queues -

Haskell Type Reflection Anti-pattern -

QuasiQuoting Smart Constructors -

Witness functions -

Test-Driven Development Freedom -

What a good design is -

New library: kill-bool -

Abaks: OpenAPI -

Abaks: Views -

Abaks: A word on testing -

Abaks: Drivers -

Abaks: Interface Adapters - API -

Abaks: Testing Use Cases -

Abaks: Use Cases -

Abaks: testing core domain -

Abaks: commands -

Abaks: events -

Abaks: initial requirements -

Polysemy: Scoped -

Polysemy: Opaque -

Polysemy: Onion architecture -

Polysemy: Design heuristics: Hiding vs Exposing -

Polysemy: Design heuristics: Dispatcher -

Polysemy: Design heuristics: Hiding interpreters -

Design for collaboration -

Polysemy: 1.9.0.0 released! -

Polysemy: Design heuristics: Grouping interpreters -

Polysemy: Design heuristics: Effects layering -

Polysemy: Design heuristics: Split by responsibility -

Polysemy: Design heuristics: IO hunting -

Polysemy: Async gotchas -

Polysemy: Strategy internals -

Polysemy: Changing return -

Polysemy: IO -

Polysemy: NonDet -

Polysemy: AtomicState -

Polysemy: Fixpoint -

Polysemy: Bundle -

Polysemy: Higher order Effects and combined interpreters -

Polysemy: Final vs Embed -

Polysemy: Tactics binding deprecated workaround -

Polysemy: Tactics binding -

Polysemy: Strategies binding -

Polysemy: Async -

Polysemy: Higher-order effects with Final -

Polysemy: Final -

Polysemy: Higher-order effects introductions -

Polysemy: Input -

Polysemy: Embed -

2022

Polysemy: Interceptors to buffer -

Polysemy: Introduction to Interceptors -

Polysemy: Tagged effects -

Polysemy: Interpretation and effects inline injection -

Polysemy: Interpretation and effects injection -

Polysemy: Introduction to Effect interpretation -

Polysemy: Introduction to Effect definition -

Polysemy: EffectRow design -

Polysemy: EffectRow -

Polysemy: Introduction to interpreters -

Polysemy: An introduction -

Problems before solution -

Write for debug -

User Driven Design -