41554 blogs · [ { "id": "01a087a5-3923-710c-b008-03090a3570ec", "title": "AI versus Throughput", "url": "https://michaelnygard.com/blog/2026/05/ai-versus-throughput/", "published_at": "2026-05-11T18:02:14+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f739c4c3d", "title": "AI Versus Microservices", "url": "https://michaelnygard.com/blog/2026/05/ai-versus-microservices/", "published_at": "2026-05-09T14:39:41+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f747ab32e", "title": "Constrain the Provider to Liberate Callers", "url": "https://michaelnygard.com/blog/2024/02/constrain-the-provider-to-liberate-callers/", "published_at": "2024-02-27T11:43:48+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f752f4e57", "title": "Rule of Eights", "url": "https://michaelnygard.com/blog/2023/05/rule-of-eights/", "published_at": "2023-05-28T15:29:28+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f75fd03d4", "title": "The Bad Idea Game", "url": "https://michaelnygard.com/blog/2023/05/the-bad-idea-game/", "published_at": "2023-05-02T11:34:46+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f76f08ecf", "title": "Everything We Build Has a Future Cost", "url": "https://michaelnygard.com/blog/2023/04/everything-we-build-has-a-future-cost/", "published_at": "2023-04-16T15:53:29+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f77c919a3", "title": "Four Meanings of Priorities", "url": "https://michaelnygard.com/blog/2023/04/four-meanings-of-priorities/", "published_at": "2023-04-12T12:20:11+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f77cdb5b5", "title": "Transactions Aren't Everything", "url": "https://michaelnygard.com/blog/2023/04/transactions-arent-everything/", "published_at": "2023-04-06T00:00:00+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f78b1d26a", "title": "Counterfactuals are not Causality", "url": "https://michaelnygard.com/blog/2021/06/counterfactuals-are-not-causality/", "published_at": "2021-06-19T16:27:50+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f798e5c6e", "title": "\"Manual\" and \"Automated\" are just words", "url": "https://michaelnygard.com/blog/2020/10/manual-and-automated-are-just-words/", "published_at": "2020-10-15T18:35:45+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f7a3d0969", "title": "Blocker? Pre-requisite.", "url": "https://michaelnygard.com/blog/2020/09/blocker-pre-requisite./", "published_at": "2020-09-22T15:27:07+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f7b10c5ad", "title": "Delay Induces Lamination", "url": "https://michaelnygard.com/blog/2020/09/delay-induces-lamination/", "published_at": "2020-09-21T00:00:00+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f7bbaa601", "title": "Complexity Collapse", "url": "https://michaelnygard.com/blog/2020/09/complexity-collapse/", "published_at": "2020-09-20T16:53:00+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f7c6a2d14", "title": "Staggering Skeleton", "url": "https://michaelnygard.com/blog/2020/09/staggering-skeleton/", "published_at": "2020-09-20T01:09:53+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f7cc113a3", "title": "Weakness Invites Competition", "url": "https://michaelnygard.com/blog/2020/09/weakness-invites-competition/", "published_at": "2020-09-15T00:00:00+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f7d9c03c8", "title": "Scaffold or Straightjacket?", "url": "https://michaelnygard.com/blog/2020/08/scaffold-or-straightjacket/", "published_at": "2020-08-27T00:00:00+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f7e65ad76", "title": "Deleting From Databases is Not Cleanup", "url": "https://michaelnygard.com/blog/2020/08/deleting-from-databases-is-not-cleanup/", "published_at": "2020-08-05T00:00:00+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f7f5996e5", "title": "Narrow but Deep?", "url": "https://michaelnygard.com/blog/2020/07/narrow-but-deep/", "published_at": "2020-07-27T12:20:35+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f7ffff4da", "title": "Consequences are not Pros or Cons", "url": "https://michaelnygard.com/blog/2020/06/consequences-are-not-pros-or-cons/", "published_at": "2020-06-28T00:00:00+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f80e13004", "title": "Why did we stop at 2?", "url": "https://michaelnygard.com/blog/2020/06/why-did-we-stop-at-2/", "published_at": "2020-06-24T00:00:00+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f8141b28b", "title": "Time Emerges From Events", "url": "https://michaelnygard.com/blog/2020/06/time-emerges-from-events/", "published_at": "2020-06-19T00:33:35+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f81586b8a", "title": "Reading List", "url": "https://michaelnygard.com/blog/2020/04/reading-list/", "published_at": "2020-04-27T13:36:55+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f818f974d", "title": "Shared Mutable Team State", "url": "https://michaelnygard.com/blog/2019/03/shared-mutable-team-state/", "published_at": "2019-03-21T13:36:55+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f81d80545", "title": "My Favorite Bit of Language Design", "url": "https://michaelnygard.com/blog/2018/12/my-favorite-bit-of-language-design/", "published_at": "2018-12-26T14:08:55+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f82911f06", "title": "Networking Topics", "url": "https://michaelnygard.com/blog/2018/09/networking-topics/", "published_at": "2018-09-30T17:59:52+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f83541314", "title": "Joyful Isolation", "url": "https://michaelnygard.com/blog/2018/09/joyful-isolation/", "published_at": "2018-09-27T14:08:55+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f837bd32e", "title": "Evolving Away From Entities", "url": "https://michaelnygard.com/blog/2018/04/evolving-away-from-entities/", "published_at": "2018-04-28T21:48:10+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f83dfa888", "title": "Data is the New Oil", "url": "https://michaelnygard.com/blog/2018/03/data-is-the-new-oil/", "published_at": "2018-03-02T22:11:35+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f8464309c", "title": "Coherence Penalty for Humans", "url": "https://michaelnygard.com/blog/2018/01/coherence-penalty-for-humans/", "published_at": "2018-01-09T18:22:23+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f848e898f", "title": "Services By Lifecycle", "url": "https://michaelnygard.com/blog/2018/01/services-by-lifecycle/", "published_at": "2018-01-05T20:00:44+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f858d75ab", "title": "The Entity Service Antipattern", "url": "https://michaelnygard.com/blog/2017/12/the-entity-service-antipattern/", "published_at": "2017-12-05T18:53:44+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f8598c55a", "title": "Keep 'Em Separated", "url": "https://michaelnygard.com/blog/2017/11/keep-em-separated/", "published_at": "2017-11-27T21:45:31+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f85b963d2", "title": "Root Cause Analysis as Storytelling", "url": "https://michaelnygard.com/blog/2017/11/root-cause-analysis-as-storytelling/", "published_at": "2017-11-08T23:01:06+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f86afd8a7", "title": "Release It Second Edition in Beta", "url": "https://michaelnygard.com/blog/2017/08/release-it-second-edition-in-beta/", "published_at": "2017-08-24T13:09:51+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f86b84cf8", "title": "Spectrum of Change", "url": "https://michaelnygard.com/blog/2017/06/spectrum-of-change/", "published_at": "2017-06-23T16:26:33+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f87ad884e", "title": "Queuing for QA", "url": "https://michaelnygard.com/blog/2017/05/queuing-for-qa/", "published_at": "2017-05-02T01:40:29+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f87efcad6", "title": "Availability and Stability", "url": "https://michaelnygard.com/blog/2016/11/availability-and-stability/", "published_at": "2016-11-27T19:26:17+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f884fcff1", "title": "Fault, Error, Failure", "url": "https://michaelnygard.com/blog/2016/11/fault-error-failure/", "published_at": "2016-11-27T19:01:50+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f88e174b0", "title": "Power Systems", "url": "https://michaelnygard.com/blog/2016/09/power-systems/", "published_at": "2016-09-05T15:14:18+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f89a5d0dc", "title": "Remember DAT?", "url": "https://michaelnygard.com/blog/2016/07/remember-dat/", "published_at": "2016-07-29T18:18:11+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f8a9d9786", "title": "QA Instability Implies Production Instability", "url": "https://michaelnygard.com/blog/2016/07/qa-instability-implies-production-instability/", "published_at": "2016-07-14T15:06:11+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f8b460822", "title": "Wittgenstein and Design", "url": "https://michaelnygard.com/blog/2016/07/wittgenstein-and-design/", "published_at": "2016-07-10T14:27:27+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f8bd7b8c4", "title": "In Love With Your Warts", "url": "https://michaelnygard.com/blog/2016/04/in-love-with-your-warts/", "published_at": "2016-04-08T18:24:17+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f8c4bf199", "title": "Some Useful Techniques From Bygone Eras", "url": "https://michaelnygard.com/blog/2016/03/some-useful-techniques-from-bygone-eras/", "published_at": "2016-03-02T19:06:44+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f8c4e5e6b", "title": "Generalized Minimalism", "url": "https://michaelnygard.com/blog/2016/02/generalized-minimalism/", "published_at": "2016-02-29T16:22:43+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f8cb6efef", "title": "Redeeming the Original Sin", "url": "https://michaelnygard.com/blog/2016/02/redeeming-the-original-sin/", "published_at": "2016-02-12T16:24:38+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f8d4b79fd", "title": "What's Lost With a DevOps Team", "url": "https://michaelnygard.com/blog/2016/01/whats-lost-with-a-devops-team/", "published_at": "2016-01-27T21:03:28+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f8dcfa041", "title": "Give Them The Button!", "url": "https://michaelnygard.com/blog/2015/10/give-them-the-button/", "published_at": "2015-10-23T15:37:45+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f8e2a7821", "title": "C9D9 on Architecture for Continuous Delivery", "url": "https://michaelnygard.com/blog/2015/10/c9d9-on-architecture-for-continuous-delivery/", "published_at": "2015-10-18T14:29:01+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f8eb34a29", "title": "Software Eats the World", "url": "https://michaelnygard.com/blog/2015/10/software-eats-the-world/", "published_at": "2015-10-03T22:10:31+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f8ef2cae4", "title": "Microservices versus Lean", "url": "https://michaelnygard.com/blog/2015/08/microservices-versus-lean/", "published_at": "2015-08-11T11:38:51+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f8fdf9efa", "title": "Development is Production", "url": "https://michaelnygard.com/blog/2015/08/development-is-production/", "published_at": "2015-08-06T13:06:33+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f8fed7ae7", "title": "The Fear Cycle", "url": "https://michaelnygard.com/blog/2015/07/the-fear-cycle/", "published_at": "2015-07-15T12:11:38+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f90ce706b", "title": "Components and Glue", "url": "https://michaelnygard.com/blog/2015/06/components-and-glue/", "published_at": "2015-06-17T12:08:34+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f9123a8dd", "title": "Faceted Identities", "url": "https://michaelnygard.com/blog/2015/06/faceted-identities/", "published_at": "2015-06-12T11:48:23+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f91a53c19", "title": "Inverted Ownership, Part 2", "url": "https://michaelnygard.com/blog/2015/05/inverted-ownership-part-2/", "published_at": "2015-05-26T11:22:39+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f91bc1af4", "title": "Inverted Ownership", "url": "https://michaelnygard.com/blog/2015/05/inverted-ownership/", "published_at": "2015-05-08T13:44:43+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f91ebc237", "title": "The Perils of Semantic Coupling", "url": "https://michaelnygard.com/blog/2015/04/the-perils-of-semantic-coupling/", "published_at": "2015-04-29T11:03:21+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f92ae2065", "title": "Maneuverability", "url": "https://michaelnygard.com/blog/2015/04/maneuverability/", "published_at": "2015-04-23T10:13:21+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f935f1be5", "title": "Bad Layering", "url": "https://michaelnygard.com/blog/2015/04/bad-layering/", "published_at": "2015-04-14T11:28:22+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f94572c75", "title": "People Don't Belong to Organizations", "url": "https://michaelnygard.com/blog/2015/04/people-dont-belong-to-organizations/", "published_at": "2015-04-11T20:45:57+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f950b89be", "title": "Glue Fleet and Compojure Together Using Protocols", "url": "https://michaelnygard.com/blog/2011/01/glue-fleet-and-compojure-together-using-protocols/", "published_at": "2011-01-15T20:09:08+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f96038378", "title": "Metaphoric Problems in REST Systems", "url": "https://michaelnygard.com/blog/2011/01/metaphoric-problems-in-rest-systems/", "published_at": "2011-01-14T16:12:13+00:00" }, { "id": "01a087a5-3924-7089-9eaa-678f969b03a0", "title": "Metaphoric Problems in REST Systems (audio)", "url": "https://michaelnygard.com/blog/2011/01/metaphoric-problems-in-rest-systems-audio/", "published_at": "2011-01-14T16:02:52+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a2306edda8a", "title": "Time motivates architecture", "url": "https://michaelnygard.com/blog/2010/04/time-motivates-architecture/", "published_at": "2010-04-21T13:00:00+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a2306f523a4", "title": "Circuit Breaker in Scala", "url": "https://michaelnygard.com/blog/2010/04/circuit-breaker-in-scala/", "published_at": "2010-04-21T11:00:00+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a2307833edc", "title": "The Future of Software Development", "url": "https://michaelnygard.com/blog/2010/04/the-future-of-software-development/", "published_at": "2010-04-20T11:00:00+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a2308774a48", "title": "Failover: Messy Realities", "url": "https://michaelnygard.com/blog/2010/04/failover-messy-realities/", "published_at": "2010-04-19T11:00:00+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a230907f5a3", "title": "Life's Little Frustrations", "url": "https://michaelnygard.com/blog/2010/04/lifes-little-frustrations/", "published_at": "2010-04-18T23:24:40+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a2309fe6b3c", "title": "Topics in Architecture", "url": "https://michaelnygard.com/blog/2010/01/topics-in-architecture/", "published_at": "2010-01-03T23:16:06+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a230a60e77c", "title": "\"If the last one goes, we'll be up here all night!\"", "url": "https://michaelnygard.com/blog/2009/12/if-the-last-one-goes-well-be-up-here-all-night/", "published_at": "2009-12-18T21:54:21+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a230a6567a2", "title": "Coupling and Coevolution", "url": "https://michaelnygard.com/blog/2009/12/coupling-and-coevolution/", "published_at": "2009-12-03T17:12:03+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a230b3f28c9", "title": "GMail Outage Was a Chain Reaction", "url": "https://michaelnygard.com/blog/2009/09/gmail-outage-was-a-chain-reaction/", "published_at": "2009-09-02T14:25:03+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a230be110a9", "title": "Hadoop versus VPN", "url": "https://michaelnygard.com/blog/2009/07/hadoop-versus-vpn/", "published_at": "2009-07-31T15:03:13+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a230c18c89d", "title": "An AspectJ Circuit Breaker", "url": "https://michaelnygard.com/blog/2009/07/an-aspectj-circuit-breaker/", "published_at": "2009-07-16T14:01:15+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a230c9502f0", "title": "Two New Circuit Breaker Implementations", "url": "https://michaelnygard.com/blog/2009/07/two-new-circuit-breaker-implementations/", "published_at": "2009-07-16T12:35:45+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a230ccbb589", "title": "Workmen, tools, etc.", "url": "https://michaelnygard.com/blog/2009/05/workmen-tools-etc./", "published_at": "2009-05-21T01:17:03+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a230d2736c5", "title": "Minireview: Beginning Scala", "url": "https://michaelnygard.com/blog/2009/05/minireview-beginning-scala/", "published_at": "2009-05-18T19:41:57+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a230d92a979", "title": "Units of Measure in Scala", "url": "https://michaelnygard.com/blog/2009/05/units-of-measure-in-scala/", "published_at": "2009-05-08T03:00:09+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a230e71c89b", "title": "Kudos to Relevance and Clojure", "url": "https://michaelnygard.com/blog/2009/05/kudos-to-relevance-and-clojure/", "published_at": "2009-05-06T06:18:26+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a230ef80a25", "title": "JAOO Australia in 1 Month", "url": "https://michaelnygard.com/blog/2009/04/jaoo-australia-in-1-month/", "published_at": "2009-04-03T17:12:06+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a230f4d27fe", "title": "Quantum Backups", "url": "https://michaelnygard.com/blog/2009/03/quantum-backups/", "published_at": "2009-03-20T13:40:54+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a230fd6e896", "title": "Update: Sun Cloud API Not the Same as Amazon", "url": "https://michaelnygard.com/blog/2009/03/update-sun-cloud-api-not-the-same-as-amazon/", "published_at": "2009-03-19T12:29:33+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a2310b259d6", "title": "Can you make that meeting?", "url": "https://michaelnygard.com/blog/2009/03/can-you-make-that-meeting/", "published_at": "2009-03-18T20:55:13+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a23111b0c5f", "title": "Amazon as the new Intel", "url": "https://michaelnygard.com/blog/2009/03/amazon-as-the-new-intel/", "published_at": "2009-03-18T16:31:07+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a23112c60db", "title": "Getting Real About Reliability", "url": "https://michaelnygard.com/blog/2009/03/getting-real-about-reliability/", "published_at": "2009-03-16T22:10:02+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a23112f575b", "title": "Reliability Math", "url": "https://michaelnygard.com/blog/2009/02/reliability-math/", "published_at": "2009-02-28T05:20:16+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a2311d0e6d9", "title": "2009 Calendar as OmniGraffle Stencil", "url": "https://michaelnygard.com/blog/2009/02/2009-calendar-as-omnigraffle-stencil/", "published_at": "2009-02-28T05:10:32+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a2311dcf242", "title": "Fast Iteration versus Elegant Design", "url": "https://michaelnygard.com/blog/2009/02/fast-iteration-versus-elegant-design/", "published_at": "2009-02-21T22:00:42+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a23124fd8a3", "title": "Why Do Enterprise Applications Suck?", "url": "https://michaelnygard.com/blog/2009/02/why-do-enterprise-applications-suck/", "published_at": "2009-02-21T04:23:55+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a23126ce2eb", "title": "Tracking and Trouble", "url": "https://michaelnygard.com/blog/2009/02/tracking-and-trouble/", "published_at": "2009-02-19T17:55:27+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a231336dc1c", "title": "Booklist", "url": "https://michaelnygard.com/blog/2009/02/booklist/", "published_at": "2009-02-15T00:10:34+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a2313ab54ba", "title": "Cold Turkey", "url": "https://michaelnygard.com/blog/2009/02/cold-turkey/", "published_at": "2009-02-14T04:10:23+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a23142b4a5f", "title": "Subtle Interactions, Non-local Problems", "url": "https://michaelnygard.com/blog/2009/02/subtle-interactions-non-local-problems/", "published_at": "2009-02-12T15:54:57+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a2314ae71af", "title": "Combining here docs and blocks in Ruby", "url": "https://michaelnygard.com/blog/2009/02/combining-here-docs-and-blocks-in-ruby/", "published_at": "2009-02-06T16:43:21+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a2314f5c353", "title": "Beautiful Architecture", "url": "https://michaelnygard.com/blog/2009/02/beautiful-architecture/", "published_at": "2009-02-05T21:45:56+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a23150e474c", "title": "Another Cause of TNS-12541", "url": "https://michaelnygard.com/blog/2009/02/another-cause-of-tns-12541/", "published_at": "2009-02-05T21:13:21+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a23156e67f6", "title": "Using a custom WindowProc from Ruby", "url": "https://michaelnygard.com/blog/2009/01/using-a-custom-windowproc-from-ruby/", "published_at": "2009-01-26T15:24:06+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a23160a4773", "title": "OTUG Tonight", "url": "https://michaelnygard.com/blog/2009/01/otug-tonight/", "published_at": "2009-01-20T18:09:02+00:00" }, { "id": "01a087a5-3925-70ed-9274-0a23168cd884", "title": "Attack of Self-Denial, 2008 Style", "url": "https://michaelnygard.com/blog/2008/12/attack-of-self-denial-2008-style/", "published_at": "2008-12-13T16:42:09+00:00" } ] posts Claim your blog
Back to michaelnygard.com
Blog · corpus.blog/blogs/michaelnygard.com/posts

michaelnygard.com

michaelnygard.com

2026

2024

2023

2021

2020

2019

2018

2017

2016

2015

2011

2010

2009

2008