Skip to Main Content

Ship of Feceus

Pronunciation: [ship uhv fee-see-uhs]


A common flaw in enterprise-level software development, whereby continuity and back-compatibility is prioritized above all other concerns. This prioritization causes obsolete or poor choices made early in project development to hamstring future development. Common signs that you are working on a Ship of Feceus include reinventing the wheel in ways that make no sense without historical context, or completely eschewing evolving standards among your peers, in favor of an “incremental solution”. Incremental changes are certainly preferred over breaking changes, and not all back-compatible changes are a Ship of Feceus, but often times a large change either requires many smaller, user-invisible refactorings to be released first, to prepare for the eventual change, or it requires a single breaking change to do the job right.

Variations: The Grandfather’s Ass, Rebuilding the Shit-to Shrine

Related Terms: Technical Debt, Spaghetti CodeDefactoringNot Invented Here
read more »

What’s so bad about HTML Comments as structure?

I’ve been getting a lot of traffic recently, due to my detailed critiques of some of the choices being made by the developers of WordPress’s new Gutenberg editor. One point I keep mentioning is the problem with storing post structure as HTML comments. It’s been brought to my attention that I often gloss over this issue with a general dismissal, without detailing why I am so dead set against it. To me, a lot of these issues seem obvious, but to others they might not. I’ve got a unique blend of formal Computer Science training and in-the-trenches work on both Enterprise and OSS projects, that may lend a different viewpoint than most.

To that end, I wanted to put out a hyper-focused post, to explain all of the issues I see with the new WP Post Grammar structure. read more »

The Gutenberg that could have been

I have been very vocal in the WordPress community about the fundamental issues I see with the new visual editor being bundled with version 5.0. One response I keep hearing is “how would you do it differently?” So, I thought I’d outline a hypothetical roadmap for the Gutenberg that might have been. read more »


Use Carbon Fields on Cloudways

I recently attempted to use Carbon Fields to generate custom metaboxes for a site hosted on Cloudways with PHP 7. I discovered, much to my dismay, that cloudways doesn’t support some of the multi-byte string functions in PHP (namely mb_strtolower) which is required for Carbon Fields.

For the benefit of those googling for answers, the site shows a blank white screen, and the error log contains PHP Fatal error: Uncaught Error: Call to undefined function Carbon_Fields\\Field\\mb_strtolower()

I’ve had no luck so far working with the CloudWays support team, but I will update this post if I hear back from their tier 3 technicians. I also reached out to HTMLburger, the makers of Carbon  Fields, to see if they can implement a workaround internally.

In the mean time, I was able to get the plugin running by importing the mb_string shim class from Patchwork Framework, by Nicolas Grekas. I’ve included a modified single file version of the shim with support checking added for each function, that you can import into your project to get Carbon Fields working, until Cloudways resolves the problem properly.

This is not a perfect replacement, as it is UTF-8 centric, so may behave unexpectedly with other character encodings, but it will at least get you up and running. Please, Cloudways, fix this.

read more »