Project management best practices: Standup

Daily team check-ins keep small projects aligned, surface blockers early, and prevent developers from disappearing into isolated work.

Project management best practices: User stories & Issues

Clear, well-scoped issues reduce misunderstandings and rework in Linear. User stories, acceptance criteria, backlog priority, and rough estimates keep work actionable.

Project management best practices: Budget control

Keeping project estimates aligned with the remaining budget prevents overruns when requirements change and project management overhead shifts.

How to iterate over an Enumerable, returning the first truthy result of a block ("map-find")

Need the first derived value from a collection without mapping everything twice; Ruby can do it in one pass with break or lazy filter_map.

Matching Unicode characters in a Ruby regexp

Ruby 1.9+ \w and \d stay ASCII-only; Unicode-aware POSIX character classes match letters, digits, and other script-specific characters.

Using tig

tig is a terminal interface for browsing Git history, diffs, status, and stashes with keyboard-driven navigation.

PSA: "index: true" in Rails migrations does not work as you'd expect

index: true is silently ignored in some Rails migration methods like add_column, so missing database indexes can go unnoticed and hurt query performance.

Don't forget: Automatically remove join records on has_many :through associations

has_many :through associations can leave orphaned join rows after deleting a parent record. dependent: :destroy removes the join records while keeping the associated records.

Capybara: Waiting for pending AJAX requests after a test

Selenium tests can fail when pending AJAX calls are aborted as Capybara closes the browser tab. Blocking new requests and waiting for in-flight work reduces flaky teardown errors.

How to discard ActiveRecord's association cache

ActiveRecord association data can stay stale after changes; reset clears the cache without querying, while reload fetches fresh rows immediately.

Differences between transactions and locking

Concurrent database access needs two different tools: transactions for atomic multi-row changes and locks for exclusive access; using the wrong one causes lost updates and deadlocks.

Understanding z-index: it's about stacking contexts

z-index only matters inside a stacking context, so huge values rarely help. isolation: isolate creates a new context with minimal side effects.

How to: Context-dependent word expansion in RubyMine

Context-dependent word completion in RubyMine speeds coding and reduces typos; Cyclic Expand Word can be remapped on German keyboards.

How to combine "change", "up", and "down" in a Rails migration

Rails migrations need path-specific logic for data updates while keeping rollback support. reversible, up_only, and reverting? handle direction-dependent SQL safely.

Heads up: JavaScript does not like big numbers

JavaScript numbers lose precision above Number.MAX_SAFE_INTEGER, because values are stored as double-precision floats. BigInt handles arbitrary large integers.

PSA: Chrome and Firefox do not always clear session cookies on exit

Chrome and Firefox can retain session cookies on exit when reopening tabs from the last session, so browser shutdown does not always end cookie lifetime.

Your Cronjobs should not rely on a perfect schedule

Cron jobs can miss their scheduled run because of network or hardware failures, so recurring work should resume safely after delays by tracking the last successful execution.

Do not use transparent PNGs for iOS favicons

Transparent apple-touch-icon images on iOS turn black in Safari, so solid backgrounds prevent ugly home-screen and bookmark icons.

PSA: Umlauts are not always what they seem to be

Visually identical umlauts can be different Unicode forms, breaking searches, comparisons, and output. String#unicode_normalize in Ruby 2.2 aligns them for reliable matching.

ActiveRecord: validate_uniqueness_of is case sensitive by default

Rails uniqueness validation treats username and USERNAME as different by default, which can conflict with MySQL’s case-insensitive comparisons and unique indexes.

How Ruby method lookup works

Ruby method dispatch follows a fixed lookup chain across singleton classes, prepended modules, class methods, included modules, and superclasses.

Don't build randomness into your factories

Random values in factories make tests flaky and hide failures; fixed defaults and sequences keep test data predictable.

Cancelling the ActiveRecord callback chain

ActiveRecord callback chains can halt or roll back transactions differently across Rails versions, and accidental false returns may stop legacy callbacks.

Whitelist Carrierwave attributes correctly

Strong Parameters for CarrierWave uploads need more than the file field; cache and removal flags keep images across validation errors and enable deletion.