Hi, we're Arkency
Ruby / RailsSoftware / engineering practiceTesting / QAEngineering blogs
- Posts
- 484 from 21 Sep 2012 to 29 Sep 2026
- Posting
- monthly (20 in the last year)
- Kind
- company blog
- Feed
- https://blog.arkency.com/feed.xml
2026 17
- AI-Native Rails
- 6 levels of knowledge management maturity in organizations
- TERAZ - live collective ambient experience made with Rails & Tone.js
- We are all juniors again
- Maintaining an organizational knowledge graph with an LLM and event sourcing
- 3 example process managers in Rails
- Ingress is not the owner of the invariant
- Let Your AI Assistant Explore the Event Store with res-mcp
- Inspect Your Event Store From the Terminal With the res CLI
- What's New in Rails Event Store 3.0
- Storing data as a sequence of events - RubyConfAt lightning talk supplement
- RailsEventStore 2.19: Starting Gun for 3.0
- The Rails Way in 2026
- Rails apps have layers but no modules
- Getting nondeterministic agent into deterministic guardrails
- The timezone bug that hid in plain sight for months
- Stop using DateTime in 2026 (unless you work for UNESCO)
2025 20
- Adding multi-tenancy to a DDD Rails app
- Rewrite with Confidence: Validating Business Rules Through Isolated Testing
- Making race condition tests deterministic with Concurrent::CyclicBarrier and seam
- The Joy of a Single-Purpose Class: From String Mutation to Message Composition
- Rails 8 upgrade story: duplicate keys sneaking into our JSON responses
- Evolving event names and payloads in Rails Event Store without breaking history
- Watch out for this one deprecation warning when upgrading from Rails 7.1 to 7.2 on Heroku
- Breaking the Singleton: How to Reload Ruby Singleton Instance
- Stop concatenating URLs with strings — Use proper tools instead
- 5 gems you no longer need with Rails
- I do not blindly trust setting things in new_framework_defaults initializers anymore
- Batch mapper in RailsEventStore - how initial idea evolved into experimental feature
- Multi tenant applications with horizontal sharding and Rails Event Store
- Installing Precompiled Native Gems with bundle lock --add-platform
- Rails: when "nothing changed" is the best feature
- Implementing an Inventory Module in Ruby on Rails: Handling Concurrency with Database Locks and SKIP LOCKED
- Is your Rails application special?
- Ractor - getting started
- Improve your user experience with Turbo Frames
- Turbo Frames and the Extra DOM Node – How to Handle It?
2024 12
- The difference between Turbo Streams and Turbo Frames
- Smooth Ruby and Rails upgrades
- How to add index to a big table of your Rails app
- Conditionally Enable GZIP on Heroku with Rack::Deflater: Reduce Response Size Significantly
- How to use Hotwire Turbo Streams effectively?
- Replace aasm with Rails Enum today
- Do you tune out Ruby deprecation warnings?
- How to get burned by 16 years old hack in 2024
- How to add a loading animation to your turbo frame with TailwindCSS
- Upcasting events in RailsEventStore
- Completely custom Zeitwerk inflector
- The mysterious litany of require_dependecy calls
2023 16
- Repository implementation on ActiveRecord
- A crucial detail in implementing an async read model builder
- Temporary databases for development
- Who calls who? — a simple events heuristic
- Six ways to prevent a monkey-patch drift from the original code
- The most underused pattern in Ruby
- How to become 10x developer with a help of ChatGPT
- Few static analysis tricks to bulletproof your application
- The most important boundary in your app
- How to write a good incident postmortem
- Tracking down not resolving constants in Ruby with parser
- Offloading write side with a read model
- First class json(b) handling in Rails Event Store
- Replaying events in RailsEventStore
- How to build Read models with bi-temporal events
- Effortless debugging with those 4 linking classes from RailsEventStore
2022 17
- Speed up aggregate roots loading with snapshot events
- Sometimes it's worth to test your framework features
- Handling third-party webhooks with Rails Event Store
- Take advantage of Turbo Streams in event handlers
- Verifying Content-Security Policy with Selenium and Cuprite
- Fixing the past and dealing with the future using bi-temporal EventSourcing
- How we got struck by 5–year–old implementation
- Be careful with turbo and view components
- Test which reminded me why I don't really like RSpec
- The final trick when moving from Rails CRUD to Event Sourcing
- Simplify your system debugging by introducing event store linking
- Tune up your esbuild config with plugins and cleanup your assets directory
- How I migrated a Rails app from Webpack to esbuild and got smaller and faster JS builds
- Which one to use? eql? vs equal? vs == ? Mutant Driven Development of Country Value Object
- Keep your team up to date on production data changes
- Notify Honeybadger about errors after few occurances
- Don't waste your time on assets compilation on Heroku
2021 31
- The Difference Between a Cache and a Read Model, an example
- A lesser known capability of Ruby's JSON.parse
- Audit log with event sourcing
- Limit your automatic retries
- Semantic blind spot in Ruby case statement
- Fighting the primitive obsession with Value objects
- How to build a read model with Rails Event Store Projection
- When in doubt, signal!
- Decorate your runner session like a pro
- Rails console trick I had no idea about
- How to balance the public APIs of an open-source library — practical examples from RailsEventStore
- Zeitwerk-based autoload and workarounds for single-file-many-classes problem
- Explaining Rack — desugaring Rack::Builder DSL
- Rack apps mounted in Rails — how to protect access to them?
- How to speed up Netlify build, twice
- Write once, publish in many places, keep SEO happy
- 'render' is not your final word in your Rails controller's action
- How to delete jobs from Sidekiq Retries
- Disadvantages of Pull Requests
- Code review of an Order object implemented as a state machine
- Use ActiveAdmin like a boss
- 7 simple ways to make remote work feel less lonely
- Recording real requests with WebMock
- Discord-to-Slack bot hosted on repl.it
- 3 tips to tune your VCR in tests
- Testing cursor-based pagination with Webmock
- The Goodies in Rails Event Store 2.x
- How well Rails developers actually test their apps
- Gradual automation in Ruby
- 4 strategies when you need to change a published event
- Low-boilerplate process manager
2020 27
- Rails multitenancy story in 11 snippets of code
- Multitenancy with Postgres schemas: key concepts explained
- What surprised us in Postgres-schema multitenancy
- Anti-IF framework - if/else based on type
- People's experiences with approaches to multitenancy
- Painless Rails upgrades
- Don't blindly apply software patterns
- Rails multiple databases support in Rails Event Store
- Introducing EventStoreClient - a ruby implementation for EventStore DB
- Comparison of approaches to multitenancy in Rails apps
- Upgrading a trivial Rails app from Ruby 2.3.1 to 2.7 and from Rails 4.2.6 to 6.0.3
- Avoid coupling between Bounded Contexts using Weak Schema
- Overcome 10k rows database limit on Heroku by upgrading the database plan
- Practical use of Ruby PStore
- Update Rails Event Store to v1.0.0 - walkthrough
- Rails Event Store 1.0 — The Past, Present and Future
- Most controversial rules in Arkency
- Rename stream in Rails Event Store with zero downtime
- Managing Rails Event Store Subscriptions — How To
- Catchup subscriptions with Rails Event Store
- How to work remotely and not get crazy
- Rails connections, pools and handlers
- Remote Mob Programming — review of ideas and the book
- Remote collaborative modeling
- Ultimate guide to 3rd party calls from your Aggregate
- Legacy Rails DDD Migration strategy — from read models, through events to aggregates
- How to migrate large database tables without a headache
2019 10
- Rubyʼs raise Exception.new or raise Exception — they're both the same
- OOP Refactoring: from a god class to smaller objects
- Unexpected benefits of storing commands
- 10 lessons learnt from the Ruby Refactoring Kata - Tennis Game
- Heuristics for choosing bounded context for an event handler
- How many Ruby programmers are there in the world?
- Using streams to build read models
- A scary side of ActiveRecord's find
- Optimizing test suites when using Rails Event Store
- Patterns for asynchronous read models in infrastructure without order guarantee
2018 25
- Modeling passing time with events
- Serverless Slack bot on Lambda with Ruby (and what’s the less pleasant part about it)
- I was a CRUDoholic
- Image Placeholder for your development environment
- What I've learnt at RESCON
- 3 ways to make your ruby object thread-safe
- Big events vs Small events — from the perspective of refactoring
- Command sourcing — why I am considering it
- Event scout rule
- Use channels, not direct messages — 9 tips
- Doing more on reads vs writes
- Removing magic with magic
- Rewriting deprecated APIs with parser gem
- Correlation id and causation id in evented systems
- Using singleton objects as default arguments in Ruby
- What I've learned at Arkency and why I am leaving
- Ruby Event Store - use without Rails
- Rails Event Store - better APIs coming
- How to use Algolia without coupling to ActiveRecord::Base
- Your search index is a read model (and API 😉) in the Searching bounded context
- How Algolia built their frontend search widgets with React.js by following redux principles
- The anatomy of search pages
- Building custom search is hard and boring
- Testing React.js components with Jest in Rails+Webpacker+Webpack environment
- Process Managers revisited
2017 78
- Using ruby parser and AST tree to find deprecated syntax
- On ActiveRecord callbacks, setters and derived data
- How to get an audit log with RailsEventStore today
- Why Event Sourcing basically requires CQRS and Read Models
- Event Sourcing is a transferable skill
- Quarantine your non-deterministic tests with a time limit
- Safely migrating hasandbelongstomany associations to Rails 4
- Decoding JSON with unknown structure with Elm
- Interview with Scott Bellware (Eventide co-creator) about micro-services in Ruby, event sourcing, autonomous services, SOA, dumb pipes, EventStore and mis-representation of terms in IT
- Make your JSON API tests clean with linter
- A bug that only appears once a year
- Application Services — 10 common doubts answered
- Relative Testing vs Absolute Testing
- Make your Ruby code more modular and functional with polymorphic aggregate classes
- Two ways for testing preloading/eager-loading of ActiveRecord associations in Rails
- Using state_machine with event sourced entities
- Event-sourcing whole app — opinions
- Could we drop Symbols from Ruby?
- One simple trick to make Event Sourcing click
- Which ruby version am I using — how to check?
- How to overwrite tojson (asjson) in Active Record models in Rails
- Composable RSpec matchers
- All the ways to generate routing paths in Rails
- Custom application configuration variables in Rails 4 and 5
- Rails components — neither engines nor gems
- Physical separation in Rails apps
- How mutation testing causes deeper thinking about your code + constructor for an included module in Ruby
- What I learnt from Jason Fried about running a remote/async software company
- Making tmux work for you
- How to setup development work with RailsEventStore and mutant
- How to find records where column is not null or empty in Rails 4 or 5
- DATABASE_URL examples for Rails DB connection strings
- Why we follow the Rails repo structure in Rails Event Store
- Interview with Sergii Makagon about hanami-events, domain-driven design, remote work, blogging and more
- inject vs eachwithobject
- Testing deprecations warnings with RSpec
- The === (case equality) operator in Ruby
- How to connect to and use ActiveRecord outside of Rails?
- What I learned from reading spreadsheet_architect code
- That one time I used recursion to solve a problem
- Domain Driven Rails
- My fruitless, previous attempts at not losing history of changes in Rails apps
- My first 10 minutes with Eventide
- How to add a default value to an existing column in a Rails migration
- When DDD clicked for me
- How to quickly add graphs and charts to Rails app
- nil?, empty?, blank? in Ruby on Rails - what's the difference actually?
- Monitoring Sidekiq queues with middlewares
- Non-coding activities in a software project
- How to keep yourself motivated for blogging?
- Handle sidekiq processing when one job saturates your workers and the rest queue up
- How to safely store API keys in Rails apps
- The easiest posts to write for a programming blog
- Using influxdb with ruby
- Tracking dead code in Rails apps with metrics
- What I learnt today from reading gems' code
- Dogfooding Process Manager
- Test critical paths in your app with ease thanks to Dependency Injection
- Acceptance testing using actors/personas
- Testing cookies in Rails
- Handling SVG images with Refile and Imgix
- Passive aggresive events - code smell
- Self-hosting Event Store on Digital Ocean
- The vision behind Rails, DDD and the RailsEventStore ecosystem
- What's inside the Rails DDD workshop application?
- Conditionality is filtering. Don't filter control flow, filter data.
- All Rails service objects as one Ruby class
- Reliable notifications between two apps or microservices
- Why classes eventually reach 50 columns and hundreds of methods
- Prototypes in Ruby and the strange story of dup
- Ruby code I no longer write
- A potential problem with PStore and Rails
- How to unit test classes which depend on Rails models?
- yield default object
- Fluent Interfaces in Ruby ecosystem
- Why Smalltalk instead of Ruby
- Run your tests on production!
- On upcoming immutable string literals in Ruby
2016 62
- Event sourced domain objects in less than 150 LOC
- Why would you even want to listen about DDD?
- Safer Rails database migrations with Soundcloud's Large Hadron Migrator
- Patterns for dealing with uncertainty
- Recovering unbootable NixOS instance using Hetzner rescue mode
- Testable Javascript with pure functions
- Async/Remote: make work a better place
- Educate about DDD/CQRS/Event Sourcing at the Facebook group
- Dealing with randomly failing tests from a team perspective
- One request can be multiple commands
- Ruby exceptions are 4400 times faster than ActiveRecord::Base#create
- Rails and adapter objects: different implementations in production and tests
- The typical Ruby bugs with changing the last line in a method
- Overcommunication is required for async/remote work
- Running bash command from Ruby (with your bash_profile)
- The esthetics of a Ruby service object
- Developers as DDD bounded contexts representatives
- Hourly Billing is Nuts
- The freelancer in you that wants to be FREE
- To blog or to write code?
- How we save money by using DDD and Process Managers in our Rails app
- Minimal decoupled subsystems in your rails app
- Command bus in a Rails application
- Phases of refactoring complex Rails apps
- Two dimensions of a Rails developer's growth
- respond_to |format| is useful even without multiple formats
- The quotes from the Post Rails Book Bundle books
- Implementing & Testing SOAP API clients in Ruby
- Always present association
- Domain Events Schema Definitions
- Cover all test cases with #permutation
- API of the future
- Rails Refactoring Podcast #6 - Frontend Friendly Rails
- Mutation testing of Rails views
- Is Rails a good fit for writing rich frontend applications?
- Use ES2015 with Rails today - what & how
- See how we create books. Live
- Porting a Rails frontend from CoffeeScript to ES6 and JSX - examples
- One more step to DDD in a legacy rails app
- The story behind our Rails TDD & DDD video class
- 70% off the Rails / TDD / DDD / mutant video class until 11pm 19.05.2016 CEST
- Ruby On Rails Custom Software Development
- Domain Events over Active Record Callbacks
- The anatomy of Domain Event
- Packaging ruby programs in NixOS
- How I hunted the most odd ruby bug
- Custom type-casting with ActiveRecord, Virtus and dry-types
- Creating new content types in Rails 4.2
- Using anonymous modules and prepend to work with generated code
- The smart way to check health of a Rails app
- How and why should you use JSON API in your Rails API?
- Private classes in Ruby
- Testing aggregates with commands and events
- How to teach React.js properly? A quick preview of wroc_love.rb workshop agenda
- Rails: MVP vs prototype
- How RSpec helped me with resolving random spec failures
- From legacy to DDD: What are those events anyway?
- Where and why I'm still using Rails
- Drop this before validation and just use a setter method
- One event to rule them all
- Loading all data when starting Flux SPA
- From legacy to DDD: Start with publishing events
2015 69
- Stable Circle CI builds with PhantomJS for larger Rails-backed frontend apps
- A single Rails API endpoint to accept all changes to the app state
- In-Memory Fake Adapters
- Monitoring services and adapters in your Rails app with Honeybadger, NewRelic and #prepend
- A Simple feature toggle for a Rails app
- Arkency React.js resources
- Slack-driven blogposts
- Creating custom Heroku buildpack for Webpack and Ruby on Rails integration
- Rolling back complex apps
- Run it in a background job, after a commit, from a service object
- Advantages of working on a legacy application
- Do you have a framework for dealing with emergencies?
- Testing Event Sourced application - the read side
- Sanitizing html input: youtube iframes, css inline styles and customization
- CQRS example in the Rails app
- Testing race conditions in your Rails app
- How can Rails developers benefit from reading the Arkency books?
- Three most telling files in legacy Rails apps
- Null Object pattern in practice
- Testing an Event Sourced application
- Am I ignored in my async team?
- Arkency goes React
- Subscribing for events in railseventstore
- Thanks to repositories...
- How good are your Ruby tests? Testing your tests with mutant
- You can use CoffeeScript classes with React - pros and cons
- Start using ES6 with Rails today
- Using domain events as success/failure messages
- Introducing Read Models in your legacy application
- Building a React.js event log in a Rails admin panel
- One year of React.js in Arkency
- How to store emoji in a Rails app with a MySQL database
- Building an Event Sourced application using railseventstore
- Extract a service object using SimpleDelegator
- Mutation testing and continuous integration
- On my radar: RethinkDB + React.js + Rails
- Why I want to introduce mutation testing to the railseventstore gem
- Beautiful confirm window with React
- Bring CommonJS to your asset pipeline
- The Event Store for Rails developers
- Rails meets React.js is out: What you can find inside?
- How to store large files on MongoDB?
- Gulp - a modern approach to asset pipeline for Rails developers
- Implementing Game Dashboard With React.js
- How to use Greg's Event Store from ruby
- Stream pagination in Greg's Event Store
- Why saving data using MongoHQ takes so long?
- Tracking down unused templates
- Your solid tool for event sourcing - EventStore examples
- Explaining Greg's Event Store
- Why use Event Sourcing
- Fast introduction to Event Sourcing for Ruby programmers
- Blogging: your English is good enough, but
- Configurable dependencies in Angular.js
- You get feature toggle for free in event-driven systems
- You don't need to wait for your backend: Decisions and Consequences
- Extract a service object in any framework
- Use your gettext translations in your React components
- Blogging - start from the middle
- How to get anything done? - 4 tips
- How to split routes.rb into smaller parts?
- The reasons why programmers don't blog
- My favorite ActiveSupport features
- The Beginners Guide to jQuery.Deferred and Promises for Ruby programmers
- Adding videos embedded in a page to a sitemap
- Upgrade capybara-webkit to 1.4 and save your time
- Ruby Exceptions Equality
- It's easy to miss a higher level concept in an app
- The categories of validations
2014 51
- Does everyone in your team write good code?
- Beyond the Rails Way
- rails-refactoring.com podcast #1
- Don't forget about eager_load when extending autoload paths
- Frontend performance tips for web developers
- You can move React.js root component around
- How to start using Arrays in Rails with PostgreSQL
- How to persist hashes in Rails applications with PostgreSQL
- Unit tests vs class tests
- Instantiating Service Objects
- React.js and Dynamic Children - Why the Keys are Important
- Behind the scenes
- How to start using UUID in ActiveRecord with PostgreSQL
- React.js and Google Charts
- Adapters 101
- Concurrency patterns in RubyMotion
- How we structure our front-end Rails apps with React.js
- Burnout - do you need to change your job?
- Truncating UTF8 Input For Apple Push Notifications (APNS) in Ruby
- SSH authentication in 4 flavors
- RubyMotion app with Facebook SDK
- Using ruby Range with custom classes
- Ruby background processes with upstart user jobs
- Hidden features of Ruby you may not know about
- 6 front-end techniques for Rails developers. Part I: From big ball of mud to separated concerns
- Why we use React.js in our Rails projects
- 4 ways to early return from a rails controller
- Code style matters
- Developer matters
- RubyMine basic navigation features (that make you move around code fast)
- Microservices - 72 resources
- Service objects as a way of testing Rails apps (without factory_girl)
- From Rails to RubyMotion: basic toolkit
- Create, run and manage your Ruby background processes with upstart
- My journey to Arkency world
- Real-time Web Apps
- Take most out of async textual standups
- Effective async communication
- Async & remote - toolbox
- Would you love to work remotely (and asynchronously)?
- Mastering Rails Validations: Objectify
- Mastering Rails Validations: Contexts
- The biggest obstacle to start with Continuous Deployment - database migrations
- Zero uptime deploy
- Don't call controller from background job, please. Do it differently!
- 2 ways to deal with big and complicated features
- Sitemaps with a bit of Metal
- Rails Refactoring: the aha! moments
- Pretty, short urls for every route in your Rails app
- 37 signals was not lying, you win by being remote
- Stop including Enumerable, return Enumerator instead
2013 27
- Rails and SOA: Do I really need to have this big app?
- CoffeeScript acceptance tests
- 3 ways to do eager loading (preloading) in Rails 3, 4, 5 and 6
- Chronos vs Kairos: Find out how you think about time when working on a project
- Developers oriented project management: What our new book is all about?
- Developers oriented project management: Take the first task
- Developers oriented project management: Leave tasks unassigned
- Services - what are they and why we need them?
- Developers oriented project management: Story of size 1
- Throw away Sprockets, use UNIX!
- Developers oriented project management
- Testing client-side views in Rails apps
- Single Table Inheritance - Problems and solutions
- CoffeeScript tests for Rails apps
- Ruby and AOP: Decouple your code even more
- Are we abusing at_exit?
- Implementing worker threads in Rails
- How to track ActiveRecord model statistics
- The A Team
- Is it cute or ugly?
- Naming in OOP
- Introducing hexagonal.js
- Web is no longer request-reply
- Black-box Ruby tests
- Rails API - my simple approach
- You don't inject for tests
- Blogging for developers