41554 blogs · [ { "id": "01a08740-cdc3-73fd-b9b4-ae719b5360be", "title": "An AI-generated blindfold", "url": "https://blacksheepcode.com/posts/an_ai_generated_blindfold", "published_at": "2026-08-27T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca1765cba338", "title": "Human comprehension is still the bottleneck", "url": "https://blacksheepcode.com/posts/human_comprehension_is_still_the_bottleneck", "published_at": "2026-07-09T00:00:00+00:00" }, { "id": "01a08740-cdc3-73fd-b9b4-ae719d081ec1", "title": "Does this tool exist? A tool for comparing/testing the difference between LLM harnesses, models and prompts", "url": "https://blacksheepcode.com/posts/coding_agent_testing", "published_at": "2026-07-08T00:00:00+00:00" }, { "id": "01a08740-cdc5-71c7-83dd-67a0139237af", "title": "Some problems only exist when you are new to the organisation", "url": "https://blacksheepcode.com/posts/some_problems_only_exist_when_you_are_new_to_the_organisation", "published_at": "2026-07-08T00:00:00+00:00" }, { "id": "01a08740-cdc7-72ec-9d55-19e09b997153", "title": "Where are the prompts to stop humans going off the rails?", "url": "https://blacksheepcode.com/posts/where_are_the_promptss_to_stop_humans_going_of_the_rails", "published_at": "2026-07-03T00:00:00+00:00" }, { "id": "01a08740-cdc5-71c7-83dd-67a014d78889", "title": "The case for adding a 'this file was generated by AI' header", "url": "https://blacksheepcode.com/posts/the_case_for_an_ai_header", "published_at": "2026-07-01T00:00:00+00:00" }, { "id": "01a08740-cdc5-71c7-83dd-67a01630aff6", "title": "The case for clear code ownership", "url": "https://blacksheepcode.com/posts/the_case_for_clear_code_ownership", "published_at": "2026-06-25T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca176b1d1640", "title": "Psychological pitfalls of using artificial intelligence - a heightened sense of urgency", "url": "https://blacksheepcode.com/posts/psychological_pitfalls_of_ai_urgency", "published_at": "2026-06-15T00:00:00+00:00" }, { "id": "01a08740-cdc2-70dd-9f25-49cf148bb9dc", "title": "A shield or a cudgel?", "url": "https://blacksheepcode.com/posts/a_shield_or_a_cudgel", "published_at": "2026-05-31T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca176d41f1b4", "title": "Reasons to be a token miser", "url": "https://blacksheepcode.com/posts/reasons_to_be_a_token_miser", "published_at": "2026-05-27T00:00:00+00:00" }, { "id": "01a08740-cdc5-71c7-83dd-67a017a03188", "title": "The time required to wait for a job to complete - changes the workflow for how you do it", "url": "https://blacksheepcode.com/posts/the_time_a_task_takes_changes_your_workflow", "published_at": "2026-05-27T00:00:00+00:00" }, { "id": "01a08740-cdc3-73fd-b9b4-ae719ad6676e", "title": "Agentic AI - yak shaving on steroids", "url": "https://blacksheepcode.com/posts/agentic_ai_yak_shaving_on_steroids", "published_at": "2026-05-23T00:00:00+00:00" }, { "id": "01a08740-cdc3-73fd-b9b4-ae719a3ea74e", "title": "Advice for someone looking to get into software engineering", "url": "https://blacksheepcode.com/posts/advice_for_someone_wanting_to_get_into_software_engineering", "published_at": "2025-11-24T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca175bea884c", "title": "Encapsulate as much state as possible in your component", "url": "https://blacksheepcode.com/posts/encapsulate_as_much_state_as_possible", "published_at": "2025-10-31T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca176a1ec2cb", "title": "The nuance of React rendering behaviour as it relates to children", "url": "https://blacksheepcode.com/posts/nuance_of_react_rendering_behaviour", "published_at": "2025-09-22T00:00:00+00:00" }, { "id": "01a08740-cdc7-72ec-9d55-19e0964e46bd", "title": "Tools I like: @inquirer/prompts", "url": "https://blacksheepcode.com/posts/tools_i_like_enquirer", "published_at": "2025-07-30T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca1766f49df5", "title": "I'm apprehensive about using too many AI-generated images in my blog.", "url": "https://blacksheepcode.com/posts/im_apprehensive_about_using_too_many_ai_images", "published_at": "2025-07-02T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca176dd3c251", "title": "Reasons to not use GraphQL", "url": "https://blacksheepcode.com/posts/reasons_to_not_use_graphql", "published_at": "2025-06-30T00:00:00+00:00" }, { "id": "01a08740-cdc3-73fd-b9b4-ae719c329595", "title": "It is better to have the same meeting four times with four people each, than to have one large meeting with sixteen people.", "url": "https://blacksheepcode.com/posts/better_to_have_the_same_meeting_four_times_than_one_large_meeting", "published_at": "2025-06-26T00:00:00+00:00" }, { "id": "01a08740-cdc3-73fd-b9b4-ae719d322c81", "title": "Delete a range of commits", "url": "https://blacksheepcode.com/posts/delete_a_range_of_commits", "published_at": "2025-06-26T00:00:00+00:00" }, { "id": "01a08740-cdc3-73fd-b9b4-ae719d0b3d5d", "title": "Conference notes for Web Directions Code 2025 - The behaviour of browsers and their loading of resources.", "url": "https://blacksheepcode.com/posts/conference_notes_web_directions_2025", "published_at": "2025-06-11T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca1762c01228", "title": "How to add an experimental feature to your code, without having it in your main version control", "url": "https://blacksheepcode.com/posts/how_to_add_experimental_features_to_your_code_without_version_controlling", "published_at": "2025-05-19T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca1769e70c06", "title": "No, react context is not causing too many renders", "url": "https://blacksheepcode.com/posts/no_react_context_is_not_causing_too_many_renders", "published_at": "2025-05-09T00:00:00+00:00" }, { "id": "01a08740-cdc3-73fd-b9b4-ae719bb8afe9", "title": "At least write one test.", "url": "https://blacksheepcode.com/posts/at_least_write_one_test", "published_at": "2025-04-23T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca1766fc2e75", "title": "I'm going off MDX for blogging", "url": "https://blacksheepcode.com/posts/im_going_off_mdx_for_blogging", "published_at": "2025-04-23T00:00:00+00:00" }, { "id": "01a08740-cdc7-72ec-9d55-19e099e891d0", "title": "Well designed code is easy to delete", "url": "https://blacksheepcode.com/posts/well_designed_code_is_easy_to_delete", "published_at": "2025-04-23T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca176c73e571", "title": "How to prevent further modification commits to a file with a pre-commit hook", "url": "https://blacksheepcode.com/posts/quick_tip_protect_committing_file_modifications", "published_at": "2025-02-25T00:00:00+00:00" }, { "id": "01a08740-cdc7-72ec-9d55-19e095fe8906", "title": "Tools I Want: A VSCode plugin that highlights how often an error appears in Sentry, or other monitoring tools", "url": "https://blacksheepcode.com/posts/tools_I_want_vscode_sentry_plugin", "published_at": "2025-02-20T00:00:00+00:00" }, { "id": "01a08740-cdc5-71c7-83dd-67a017ddb0d4", "title": "The tool I want to exist - an API mocking tool that generates mock data by observing real world usage.", "url": "https://blacksheepcode.com/posts/the_tool_I_want_to_exist", "published_at": "2025-02-04T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca176603b243", "title": "If I were building a start up from scratch, these are the things I would include (or have a plan to include).", "url": "https://blacksheepcode.com/posts/if_i_were_building_something_from_scratch", "published_at": "2025-01-13T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca1761e042c9", "title": "Good idea: Loading screen tips for developers", "url": "https://blacksheepcode.com/posts/good_ideas_loading_screens", "published_at": "2024-12-13T00:00:00+00:00" }, { "id": "01a08740-cdc5-71c7-83dd-67a014468266", "title": "React testing patterns: When making a change to a leaf component breaks tests further up the tree", "url": "https://blacksheepcode.com/posts/testing_patterns_changing_a_leaf_breaks_the_root", "published_at": "2024-12-13T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca17696d26a7", "title": "Module behaviour in browsers - loading waterfalls, module preloading, cache invalidation cascades and import maps.", "url": "https://blacksheepcode.com/posts/loading_optimisations_part_4", "published_at": "2024-11-26T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca176cf36e94", "title": "How to create an imperative useConfirmationModal hook", "url": "https://blacksheepcode.com/posts/react_bits_imperative_confirmation_modal", "published_at": "2024-11-20T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca1767858ab3", "title": "Examples of tooling that do not play nicely with ESM", "url": "https://blacksheepcode.com/posts/list_of_tooling_that_does_not_play_nicely_with_esm", "published_at": "2024-11-19T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca1768e45c00", "title": "Two caching strategies", "url": "https://blacksheepcode.com/posts/loading_optimisations_part_3", "published_at": "2024-11-19T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca176a623d6e", "title": "Assume the next developer will copy paste what they see you do. (That next developer might be you.)", "url": "https://blacksheepcode.com/posts/philosophy_assume_the_next_developer_will_copy_paste", "published_at": "2024-11-18T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca1768709e81", "title": "The behaviour of browsers and loading resources - Scripts", "url": "https://blacksheepcode.com/posts/loading_optimisations_part_2", "published_at": "2024-10-31T13:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca17679c8913", "title": "The behaviour of browsers and loading resources - HTML, images, and CSS", "url": "https://blacksheepcode.com/posts/loading_optimisations_part_1", "published_at": "2024-10-31T12:00:00+00:00" }, { "id": "01a08740-cdc7-72ec-9d55-19e097a23dc3", "title": "TypeScript - indexing into a mapped type", "url": "https://blacksheepcode.com/posts/typescript_bits_indexing_into_a_mapped_type", "published_at": "2024-10-14T00:00:00+00:00" }, { "id": "01a08740-cdc7-72ec-9d55-19e098325b45", "title": "TypeScript types are inferred in a forward direction", "url": "https://blacksheepcode.com/posts/typescript_bits_types_are_inferred_forwards", "published_at": "2024-10-14T00:00:00+00:00" }, { "id": "01a08740-cdc5-71c7-83dd-67a0130f4d14", "title": "Using cookies in React Server Components to avoid a flash the incorrect content.", "url": "https://blacksheepcode.com/posts/server_side_responsive_cookies_for_react", "published_at": "2024-10-02T19:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca176dd3d785", "title": "How to create a responsive React hook to listen for changes to cookies", "url": "https://blacksheepcode.com/posts/responsive_cookies_for_react", "published_at": "2024-10-02T18:00:00+00:00" }, { "id": "01a08740-cdc5-71c7-83dd-67a016ef0d43", "title": "The natural state of software is chaos", "url": "https://blacksheepcode.com/posts/the_natural_state_of_software_is_chaos", "published_at": "2024-09-24T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca176983dd77", "title": "Migrating from Remix to NextJS", "url": "https://blacksheepcode.com/posts/migrating_from_remix_to_next", "published_at": "2024-09-09T00:00:00+00:00" }, { "id": "01a08740-cdc3-73fd-b9b4-ae719b727347", "title": "An overview of configuring proxy behaviour in NodeJS applications", "url": "https://blacksheepcode.com/posts/an_overview_of_configuring_proxy_behaviour_for_node_apps", "published_at": "2024-09-05T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca176c1aa649", "title": "How to publish a React component package, using NextJS as the compiler", "url": "https://blacksheepcode.com/posts/publish_a_react_package_using_nextjs_as_a_base", "published_at": "2024-08-23T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca1764dab40f", "title": "How to configure NextJS to proxy its requests", "url": "https://blacksheepcode.com/posts/how_to_proxy_nextjs", "published_at": "2024-08-19T00:00:00+00:00" }, { "id": "01a08740-cdc5-71c7-83dd-67a01713d947", "title": "The problem of testability in React", "url": "https://blacksheepcode.com/posts/the_problem_of_testability_in_react", "published_at": "2024-07-25T00:00:00+00:00" }, { "id": "01a08740-cdc7-72ec-9d55-19e096a77699", "title": "Tools I like: git checkout interactive", "url": "https://blacksheepcode.com/posts/tools_i_like_gci", "published_at": "2024-06-12T00:00:00+00:00" }, { "id": "01a08740-cdc3-73fd-b9b4-ae7198cc86e3", "title": "Adding dark mode to a blog - how to avoid flashes of the wrong theme", "url": "https://blacksheepcode.com/posts/adding_dark_mode_to_the_blog", "published_at": "2024-06-07T00:00:00+00:00" }, { "id": "01a08740-cdc3-73fd-b9b4-ae719a25d935", "title": "How to configure Remix and mdx-bundler for a serverless platform - barrel files approach, Remix v1", "url": "https://blacksheepcode.com/posts/adding_msw_bundler_to_remix_app_2", "published_at": "2024-03-22T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca176478d53c", "title": "How to get started testing a React codebase that has no tests", "url": "https://blacksheepcode.com/posts/how_to_get_started_testing", "published_at": "2024-03-12T00:00:00+00:00" }, { "id": "01a08740-cdc3-73fd-b9b4-ae719ce653c4", "title": "Run a Docker image on AWS ECS + Postgres using Terraform CDK", "url": "https://blacksheepcode.com/posts/cdktf_postgres_and_ecs", "published_at": "2024-02-21T00:00:00+00:00" }, { "id": "01a08740-cdc7-72ec-9d55-19e09c97604f", "title": "Why I've gone off React Testing Library", "url": "https://blacksheepcode.com/posts/why_ive_gone_off_react_testing_library", "published_at": "2024-02-08T00:00:00+00:00" }, { "id": "01a08740-cdc3-73fd-b9b4-ae71993b26c5", "title": "How to configure Remix and mdx-bundler (with file system access)", "url": "https://blacksheepcode.com/posts/adding_msw_bundler_to_remix_app", "published_at": "2023-11-19T00:00:00+00:00" }, { "id": "01a08740-cdc5-71c7-83dd-67a013ccf5bf", "title": "A comprehensive guide to testing with Easy-Markdown-Editor", "url": "https://blacksheepcode.com/posts/testing_easy_mde", "published_at": "2023-10-19T00:00:00+00:00" }, { "id": "01a08740-cdc5-71c7-83dd-67a014d45895", "title": "Testing strategies for a Single Page Application as it relates to state management", "url": "https://blacksheepcode.com/posts/testing_strategies", "published_at": "2023-10-10T00:00:00+00:00" }, { "id": "01a08740-cdc5-71c7-83dd-67a01875a19c", "title": "Today I learned: The Etc/GMT+x timezones actually mean UTC-x", "url": "https://blacksheepcode.com/posts/til_etc_timezone_is_backward", "published_at": "2023-08-21T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca1760f76b85", "title": "Black box contract testing - third party API mocking", "url": "https://blacksheepcode.com/posts/generating_apps_from_openapi_part7", "published_at": "2023-08-14T00:00:00+00:00" }, { "id": "01a08740-cdc5-71c7-83dd-67a016cbe5c1", "title": "The horseshoe model for software development", "url": "https://blacksheepcode.com/posts/the_horse_shoe_theory_of_software_development_lifecycle", "published_at": "2023-08-11T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca17604407fd", "title": "Blackbox contract tests - Performance testing with Jest", "url": "https://blacksheepcode.com/posts/generating_apps_from_openapi_part6", "published_at": "2023-04-28T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca175fe6239d", "title": "OpenAPI and contract tests with Jest", "url": "https://blacksheepcode.com/posts/generating_apps_from_openapi_part5a", "published_at": "2023-04-26T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca175e92744c", "title": "Using Postman and an OpenAPI spec for contract/blackbox tests", "url": "https://blacksheepcode.com/posts/generating_apps_from_openapi_part4a", "published_at": "2023-04-17T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca175f412032", "title": "Postman and OpenAPI - Automating tests", "url": "https://blacksheepcode.com/posts/generating_apps_from_openapi_part4b", "published_at": "2023-04-17T00:00:00+00:00" }, { "id": "01a08740-cdc5-71c7-83dd-67a0155b4864", "title": "The case for blackbox tests", "url": "https://blacksheepcode.com/posts/the_case_for_blackbox_tests", "published_at": "2023-04-17T00:00:00+00:00" }, { "id": "01a08740-cdc5-71c7-83dd-67a017e2cb83", "title": "This blog now features comments", "url": "https://blacksheepcode.com/posts/this_blog_now_features_comments", "published_at": "2023-03-24T00:00:00+00:00" }, { "id": "01a08740-cdc5-71c7-83dd-67a01820c1c2", "title": "Thoughts about JSON API", "url": "https://blacksheepcode.com/posts/thoughts_about_json_api", "published_at": "2023-03-06T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca175e8e4556", "title": "Generating MSW mocks from an OpenAPI spec.", "url": "https://blacksheepcode.com/posts/generating_apps_from_openapi_part3", "published_at": "2023-01-17T00:00:00+00:00" }, { "id": "01a08740-cdc7-72ec-9d55-19e09bb09694", "title": "Why I don't like API mocking as a necessary frontend testing strategy", "url": "https://blacksheepcode.com/posts/why_i_dont_like_api_mocking", "published_at": "2022-12-12T00:00:00+00:00" }, { "id": "01a08740-cdc7-72ec-9d55-19e098fb6f23", "title": "User Experience reflects the underlying data structure", "url": "https://blacksheepcode.com/posts/user_experience_reflects_data_structures", "published_at": "2022-12-01T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca175dcb8063", "title": "Generating application and client code from an OpenAPI spec", "url": "https://blacksheepcode.com/posts/generating_apps_from_openapi_part2", "published_at": "2022-11-28T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca1765e62dd8", "title": "I'm playing with Remix", "url": "https://blacksheepcode.com/posts/i_am_playing_with_remix", "published_at": "2022-11-28T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca175d172ae7", "title": "Why use OpenAPI?", "url": "https://blacksheepcode.com/posts/generating_apps_from_openapi_part1", "published_at": "2022-11-25T00:00:00+00:00" }, { "id": "01a08740-cdc5-71c7-83dd-67a01672bc1d", "title": "The case for splitting Cypress tests into multiple it blocks", "url": "https://blacksheepcode.com/posts/the_case_for_splitting_tests_into_multiple_it_blocks", "published_at": "2022-11-11T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca175ca842f3", "title": "A model of extensible changes.", "url": "https://blacksheepcode.com/posts/extensible_changes", "published_at": "2022-08-10T00:00:00+00:00" }, { "id": "01a08740-cdc3-73fd-b9b4-ae719da32634", "title": "Dependency injection when using redux.", "url": "https://blacksheepcode.com/posts/dependency_injecting_when_using_redux", "published_at": "2022-08-01T00:00:00+00:00" }, { "id": "01a08740-cdc3-73fd-b9b4-ae719dea8326", "title": "Different Approaches to Form Element State Management in React", "url": "https://blacksheepcode.com/posts/different_approaches_to_form_element_state_in_react", "published_at": "2022-07-27T00:00:00+00:00" }, { "id": "01a08740-cdc3-73fd-b9b4-ae719b0c73b5", "title": "Agnostic state and service management in React", "url": "https://blacksheepcode.com/posts/agnostic_state_managment_in_react", "published_at": "2022-05-05T00:00:00+00:00" }, { "id": "01a08740-cdc7-72ec-9d55-19e09abb4004", "title": "What is the role of QA and how should their tests fit into the development process?", "url": "https://blacksheepcode.com/posts/whats_the_role_of_qa", "published_at": "2022-04-19T00:00:00+00:00" }, { "id": "01a08740-cdc4-72ef-a482-ca1763793e9d", "title": "How to effectively hire contractors", "url": "https://blacksheepcode.com/posts/how_to_effectively_hire_contractors", "published_at": "2022-04-11T00:00:00+00:00" } ] posts Claim your blog
Back to blacksheepcode.com
Blog · corpus.blog/blogs/blacksheepcode.com/posts

blacksheepcode.com

blacksheepcode.com

2026

2025

2024

2023

2022