56,966 blogs · [ { "id": "01a0875e-260d-72bc-9250-d9160dc6bc0c", "title": "I don't use the term technical debt", "url": "https://charemza.name/blog/posts/software/communication/I-dont-use-the-term-technical-debt-and-neither-should-you/", "published_at": "2026-01-04T08:35:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9160ebe0175", "title": "It's not done if...", "url": "https://charemza.name/blog/posts/software/communication/not-done-if-there-are-more-steps-to-take/", "published_at": "2025-10-19T21:30:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9160ec1232f", "title": "It's not a hack to satisfy known requirements", "url": "https://charemza.name/blog/posts/agile/over-engineering/not-a-hack-to-meet-requirements/", "published_at": "2025-10-04T14:10:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9160f269d37", "title": "Ordering work: a skill and culture gap", "url": "https://charemza.name/blog/posts/agile/deliver-value-daily/ordering-work-skill-culture-gap/", "published_at": "2025-10-03T08:50:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9160f74fb8b", "title": "6 rules when making data dashboards", "url": "https://charemza.name/blog/posts/data/visualisation/six-rules-for-making-dashboards/", "published_at": "2024-02-04T13:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9161029786b", "title": "Questions to ask yourself when talking with users", "url": "https://charemza.name/blog/posts/users/support/questions-to-ask-yourself-when-communicating-with-users/", "published_at": "2022-08-14T16:15:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9161083d175", "title": "How to offer better downloads", "url": "https://charemza.name/blog/posts/http/downloads/how-to-offer-better-downloads/", "published_at": "2021-02-28T07:20:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9161108184f", "title": "S3 is not a filesystem", "url": "https://charemza.name/blog/posts/s3/s3-is-not-a-filesystem/", "published_at": "2021-02-14T13:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9161133bdb6", "title": "Django's transaction.atomic()", "url": "https://charemza.name/blog/posts/django/postgres/transactions/not-as-atomic-as-you-may-think/", "published_at": "2020-10-10T11:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d91612071d39", "title": "JavaScript task queue", "url": "https://charemza.name/blog/posts/javascript/async/javascript-queue-with-concurrency-limit/", "published_at": "2020-05-17T11:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d91612c00d1e", "title": "I admit it: I like Python's asyncio", "url": "https://charemza.name/blog/posts/python/asyncio/I-like-python-asyncio/", "published_at": "2020-05-08T18:50:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d91612dbc576", "title": "Streaming: a skill gap?", "url": "https://charemza.name/blog/posts/streaming/data/streaming-not-just-for-big-data/", "published_at": "2020-02-02T10:40:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d916134fd411", "title": "Python generators", "url": "https://charemza.name/blog/posts/python/streaming/python-streaming-pipelines-and-generators/", "published_at": "2020-01-12T11:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d916138ff605", "title": "Mini HTTP guide for developers", "url": "https://charemza.name/blog/posts/abstractions/http/http-guide-for-developers/", "published_at": "2020-01-04T16:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d916147edce7", "title": "The core S3 API is beautiful", "url": "https://charemza.name/blog/posts/http/s3/the-core-s3-api-is-beautiful/", "published_at": "2019-12-31T08:10:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d916154a5965", "title": "Questions to ask yourself when considering a dependency", "url": "https://charemza.name/blog/posts/methodologies/dependencies/questions-to-ask-yourself-when-considering-a-dependency/", "published_at": "2019-12-29T12:40:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9161618c243", "title": "You might not need a class", "url": "https://charemza.name/blog/posts/python/state/you-might-not-need-a-class/", "published_at": "2019-05-09T20:35:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d916162f5864", "title": "I admit it: I like Python's ternary operator", "url": "https://charemza.name/blog/posts/python/syntax/python-ternary-operator/", "published_at": "2019-03-09T10:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9161716ee90", "title": "Reducing risk of release day", "url": "https://charemza.name/blog/posts/git/workflows/reducing-risk-of-release-day/", "published_at": "2019-03-02T22:30:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d91617f687f5", "title": "S3 path/pseudo-folder locking", "url": "https://charemza.name/blog/posts/python/asyncio/s3-path-locking/", "published_at": "2018-11-18T18:50:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9161835d321", "title": "Python asyncio read/write lock", "url": "https://charemza.name/blog/posts/python/asyncio/read-write-lock/", "published_at": "2018-11-11T14:50:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d91618fede8e", "title": "You might not need Boto 3", "url": "https://charemza.name/blog/posts/aws/python/you-might-not-need-boto-3/", "published_at": "2018-10-28T11:15:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d91619f4fbf4", "title": "Questions to ask yourself when handling exceptions", "url": "https://charemza.name/blog/posts/patterns/error-handling/questions-to-ask-yourself-when-handling-exceptions/", "published_at": "2018-07-23T23:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9161a01ec2d", "title": "Structured data in environment variables", "url": "https://charemza.name/blog/posts/software-engineering/devops/structured-data-in-environment-variables/", "published_at": "2018-07-07T12:30:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9161ae614dc", "title": "Programming design choices in the face of changing requirements", "url": "https://charemza.name/blog/posts/software-engineering/agile/programming-design-choices-in-the-face-of-changing-requirements/", "published_at": "2018-02-25T12:30:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9161ba7ddbc", "title": "Type simplicity", "url": "https://charemza.name/blog/posts/software-engineering/type-safety/type-simplicity/", "published_at": "2018-01-04T20:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9161c064a1e", "title": "Questions to ask yourself when writing tests", "url": "https://charemza.name/blog/posts/methodologies/testing/questions-to-ask-yourself-when-writing-tests/", "published_at": "2018-01-01T20:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9161c59ae99", "title": "The list monad's bind", "url": "https://charemza.name/blog/posts/haskell/monad/list-monad-bind/", "published_at": "2017-06-10T10:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9161cad1a3a", "title": "Hidden structure", "url": "https://charemza.name/blog/posts/haskell/functor/hidden-structure-in-haskell/", "published_at": "2017-05-22T10:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9161cba546d", "title": "The beauty and the horror of Haskell monads", "url": "https://charemza.name/blog/posts/haskell/monad/haskell-beauty-horror-monads/", "published_at": "2017-05-06T10:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9161cf80902", "title": "Haskell do notation protects you from parentheses", "url": "https://charemza.name/blog/posts/haskell/monad/haskell-do-notation-parentheses/", "published_at": "2017-04-21T10:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9161d5bc3ac", "title": "Long files are not the enemy", "url": "https://charemza.name/blog/posts/programming/refactoring/long-files-are-not-the-enemy/", "published_at": "2017-04-02T10:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9161d9a1a22", "title": "Avoid stateful variables", "url": "https://charemza.name/blog/posts/programming/pure/how-i-gently-prod-myself-to-write-purer-code/", "published_at": "2017-02-12T10:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9161e6adad1", "title": "Non atomic deployments", "url": "https://charemza.name/blog/posts/devops/aws/non-atomic-deployments/", "published_at": "2017-02-06T10:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9161f0411fe", "title": "Overriding methods is spaghetti in disguise", "url": "https://charemza.name/blog/posts/oop/patterns/overriding-methods-is-branching-in-diguise/", "published_at": "2017-01-09T10:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9161fa5f760", "title": "E2E Tests: Test as a user would", "url": "https://charemza.name/blog/posts/angularjs/e2e/test-as-a-user/", "published_at": "2016-12-25T10:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d916208d5220", "title": "Reasons to not use page objects in E2E tests", "url": "https://charemza.name/blog/posts/angularjs/e2e/consider-not-using-page-objects-in-e2e-tests/", "published_at": "2016-12-18T10:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d91620d76e76", "title": "Say no to more optional arguments", "url": "https://charemza.name/blog/posts/programming/smells/say-no-to-more-optional-arguments/", "published_at": "2016-12-10T16:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9162129fc3b", "title": "Pragmatic Purity", "url": "https://charemza.name/blog/posts/programming/pure/pragmatic-purity/", "published_at": "2016-12-09T16:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d91621d0c74e", "title": "Blue-Green Deployment of Static Site on S3", "url": "https://charemza.name/blog/posts/devops/aws/blue-green-deployment-static-site-s3/", "published_at": "2016-10-30T16:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d91621dcae9a", "title": "Defer node stream processing", "url": "https://charemza.name/blog/posts/node/streams/defer-stream-until-promise-resolved/", "published_at": "2015-12-31T10:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9162262975c", "title": "Animating elements moving between lists", "url": "https://charemza.name/blog/posts/angularjs/animation/angularjs-animate-elements-between-lists/", "published_at": "2015-07-19T10:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9162328ec50", "title": "Throttled variable changes", "url": "https://charemza.name/blog/posts/angularjs/templates/angularjs-throttled-variable-changes/", "published_at": "2014-12-20T10:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d91623621875", "title": "Same-domain iframe communication", "url": "https://charemza.name/blog/posts/angularjs/iframe/same-domain-iframe-communication/", "published_at": "2014-07-27T09:19:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d91623ce8fdd", "title": "AngularJS Transclude", "url": "https://charemza.name/blog/posts/angularjs/transclude/angularjs-transclude/", "published_at": "2014-07-27T09:19:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9162497a700", "title": "AngularJS Promises", "url": "https://charemza.name/blog/posts/angularjs/promises/angularjs-promises/", "published_at": "2014-04-12T09:19:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d91624b1c747", "title": "ECONNRESET Errors in node.js", "url": "https://charemza.name/blog/posts/node.js/socket.io/nodejs-socketio-express-econnreset-same-port/", "published_at": "2013-08-14T19:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d91625acaeec", "title": "Dependency-Based Cache Invalidation", "url": "https://charemza.name/blog/posts/php/caching/dependency-based-cache-invalidation/", "published_at": "2013-07-25T09:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9162666d1c3", "title": "About This Site", "url": "https://charemza.name/blog/posts/aws/hosting/about-this-site/", "published_at": "2013-07-14T09:00:00+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9162759b8b8", "title": "JQuery UI Datepicker Incorrect Century", "url": "https://charemza.name/blog/posts/jquery/datepicker/jquery-ui-datepicker-incorrect-century/", "published_at": "2013-01-27T07:55:30+00:00" }, { "id": "01a0875e-260d-72bc-9250-d916277b4841", "title": "Thinking Fast and Slow", "url": "https://charemza.name/blog/posts/books/psychology/thinking-fast-and-slow/", "published_at": "2013-01-20T07:55:30+00:00" }, { "id": "01a0875e-260d-72bc-9250-d9162781dbf0", "title": "AWS Load Balancer", "url": "https://charemza.name/blog/posts/aws/load-balancer/long-posts-duplicated/", "published_at": "2013-01-19T07:55:30+00:00" } ] posts Claim your blog
Back to charemza.name
Blog · corpus.blog/blogs/charemza.name/posts

charemza.name

charemza.name

2026

2025

2024

2022

2021

2020

2019

2018

2017

2016

2015

2014

2013