{ "uuid": [ { "value": "44e71b80-61a3-4376-83aa-3b975401942b" } ], "langcode": [ { "value": "en" } ], "type": [ { "target_id": "daily_email", "target_type": "node_type", "target_uuid": "8bde1f2f-eef9-4f2d-ae9c-96921f8193d7" } ], "revision_timestamp": [ { "value": "2025-05-11T09:00:00+00:00" } ], "revision_uid": [ { "target_type": "user", "target_uuid": "b8966985-d4b2-42a7-a319-2e94ccfbb849" } ], "revision_log": [], "status": [ { "value": true } ], "uid": [ { "target_type": "user", "target_uuid": "b8966985-d4b2-42a7-a319-2e94ccfbb849" } ], "title": [ { "value": "Contrib-first doesn't mean building for every use case" } ], "created": [ { "value": "2025-03-10T00:00:00+00:00" } ], "changed": [ { "value": "2025-05-11T09:00:00+00:00" } ], "promote": [ { "value": false } ], "sticky": [ { "value": false } ], "default_langcode": [ { "value": true } ], "revision_translation_affected": [ { "value": true } ], "path": [ { "alias": "\/daily\/2025\/03\/10\/contrib-first", "langcode": "en" } ], "body": [ { "value": "\n
Most Drupal projects include writing custom code to add functionality required for that project or that doesn't yet exist.<\/p>\n\n
Some of this may be identified as code that could be contributed back to the Drupal community and uploaded to Drupal.org as reusable code for others to use.<\/p>\n\n
Usually, this involves \"cleaning up\" the code to make it ready to be open sourced - ensuring it complies with coding standards, follows best practices and doesn't contain any sensitive or project-specific data.<\/p>\n\n
Unfortunately, this doesn't always happen as the next project or task is waiting to be started, and the code is never contributed.<\/p>\n\n
I like to do contrib-first or contrib-driven development, where the code is open sourced upfront, developed in the open and used on the project as I'm developing it.<\/p>\n\n
A common argument to this approach is that it takes too much time.<\/p>\n\n
I assume that's because people think I need to cover every use case and situation in the module because I'm open sourcing it.<\/p>\n\n
That's not true.<\/p>\n\n
When I wrote modules like System User<\/a>, Null User<\/a> and Private Message Queue<\/a>, I wrote the same code I'd have written if I was going to contribute it later - but I didn't need to clean it up afterwards.<\/p>\n\n I didn't need to ensure it didn't contain anything I'd need to remove.<\/p>\n\n It wasn't a big task to open source them as they were already open sourced.<\/p>\n\n If other people want to use the module and need additional features, they could open an issue, submit a patch or create their own patches.<\/p>\n\n Just because code has been open sourced doesn't mean it needs to do everything for everyone.<\/p>\n\n ",
"format": "full_html",
"processed": "\n Most Drupal projects include writing custom code to add functionality required for that project or that doesn't yet exist.<\/p>\n\n Some of this may be identified as code that could be contributed back to the Drupal community and uploaded to Drupal.org as reusable code for others to use.<\/p>\n\n Usually, this involves \"cleaning up\" the code to make it ready to be open sourced - ensuring it complies with coding standards, follows best practices and doesn't contain any sensitive or project-specific data.<\/p>\n\n Unfortunately, this doesn't always happen as the next project or task is waiting to be started, and the code is never contributed.<\/p>\n\n I like to do contrib-first or contrib-driven development, where the code is open sourced upfront, developed in the open and used on the project as I'm developing it.<\/p>\n\n A common argument to this approach is that it takes too much time.<\/p>\n\n I assume that's because people think I need to cover every use case and situation in the module because I'm open sourcing it.<\/p>\n\n That's not true.<\/p>\n\n When I wrote modules like System User<\/a>, Null User<\/a> and Private Message Queue<\/a>, I wrote the same code I'd have written if I was going to contribute it later - but I didn't need to clean it up afterwards.<\/p>\n\n I didn't need to ensure it didn't contain anything I'd need to remove.<\/p>\n\n It wasn't a big task to open source them as they were already open sourced.<\/p>\n\n If other people want to use the module and need additional features, they could open an issue, submit a patch or create their own patches.<\/p>\n\n Just because code has been open sourced doesn't mean it needs to do everything for everyone.<\/p>\n\n ",
"summary": null
}
]
}