--- title: Do you really need it? date: 2024-02-10 permalink: daily/2024/02/10/do-you-really-need-it snippet: | Do you really need that new feature? What are the long-term implications of adding it? tags: - software-development --- {% block content %} Before adding a new feature or change to a codebase, ask if it's really needed and consider its long-term implications. Code is easy to write, but needs to be maintained as newer language or framework features are added or have breaking changes. Something I've added recently to Build Configs was an option to use an [inclusive or exclusive .gitignore file][gitignore]. Whilst it's only adding an if condition based on a value, it adds a separate path in my code and both need to be maintained. I've been thinking of adding `just` again to some projects instead of a `run` file, which would add separate files that need to be maintained and kept up-to-date with each other so both offer the same features. Is this something I want to maintain going forward? Does it add enough value to justify its maintenance? Different to a feature flag, which usually has a known lifespan, this could need be maintained for the whole lifespan of the application. On a client project, this could be having two sets of buttons with rounded and square corners. Do we need both? It could be the positioning of a title in a header. Fewer options mean there is less code to write and maintain. In a Drupal project, each choice could mean adding a different field, taxonomy term, or content or block type to achieve the desired result. The more we can achieve with fewer options means the application will be easier to maintain and work on in the future. [gitignore]: {{site.url}}/daily/2024/01/27/gitignore-inclusive-or-exclusive {% endblock %} {% block cta %} P.S. Do you need immediate access to an expert Drupal Developer? [With my Drupal development subscription][subscription], make unlimited requests for a fixed monthly price in less time than posting to a job board! [subscription]: {{site.url}}/subscription {% endblock %}