§ 6 A Shoe That Fits
Context
Software developers perform a variety of tasks in their day-to-day activities. These activities are usually aligned with their objectives and goals and are often performed with the support of tools.
Problem
As tools come into play, developers are faced with having to make a choice regarding which tools they should use. Time and budget are precious resources. As such, developers must use the right tools for them and their work.
What kind of tools should we opt for?
Forces
- We want to use tools that are appropriate for our tasks and workflow, but a choice that fits one project or context may not be well-suited for another, or our needs may change during the project.
- Having usable tools reduces cognitive load and supports productivity, but if they have steep learning curves or clunky interfaces they can become obstacles.
- Tooling decisions are often made by people other than the users, but the consequences fall on the developers who have to live with them.
Solution
Choose tools that not only facilitate the work to be done but also support it, taking into account factors including usability, skill, and ubiquity, and interoperability.
The minimum requirement for a tool is, of course, that it enables developers to do their jobs. One would probably not attempt to build a 3D game with a bare-bones text editor or manage a large enterprise system with a spreadsheet. Tools must fit the domain of the work before anything else can be considered.
The nuances, however, start coming in when we move beyond the “are the tools compatible with the process?” phase into the realm of “are the tools supporting the process?”.
Developers should know how to work with their tools. This knowledge will be most immediately felt with the tech stack in use and the IDE that accompanies it, but the rest of their toolset will have an impact as well. The tools should support the developer’s learning process by being intuitive, flexible, and enabling exploration and discovery, facilitating a §13 Practice Makes Perfect learning process.
Tools ought to have high usability; this can translate to, for example, being fast and responsive, having an interface without distracting elements, and including shortcuts to common features, which in the end frees up the developers’ cognitive load. This enables them to stay in the zone for longer and be interrupted as little as possible in their work.
Interoperability and workflow compatibility are other factors that need to be taken into account when choosing a tool. A tool should not only connect smoothly with the existing development environment (e.g. an IDE that integrates version control, debugging, or other supporting modules) but also align with the way the team actually works. In some cases, newer options such as AI-assisted code suggestions can support productivity if they fit naturally into established practices, but they may become a distraction if they force developers to switch contexts or adopt unfamiliar workflows.
On top of this, many projects face business rules or stakeholder decisions that impose specific technologies. These constraints often carry significant weight in tool selection, and developers must adapt while still ensuring their toolset supports effective work.
The tools that are chosen will often be the de facto industry standard for the situation and, in many situations, they will be a good fit. This ubiquity will often mean that developers are familiar (at least, to some extent) with the tool, and there will be an initial baseline trust level. This can have benefits in terms of learning and troubleshooting, as documentation ends up being plentiful due to the sheer number of users (see §15 Written Knowledge and §16 It Takes A Village).
While developers may know which tools are the best for their individual uses, it doesn’t guarantee that they will get to use them; they may not have, at least directly, a voice in the matter, and who gets to make a decision will be another stakeholder in the project. In these cases, developers should be at least consulted, and their opinions and needs should inform the decision.
Examples
- Keyboard shortcuts and command macros enable developers to perform frequent actions more quickly[1][2].
- Context-aware suggestions (such as those for variable and function names) or automated pipelines (for continuous delivery) assist developers by offering guidance or automating repetitive tasks, lowering mental overhead.
- AI-assisted coding tools can support productivity by suggesting code or automating repetitive work, but developers should be careful as their outcomes can be inconsistent, requiring careful evaluation[3][4][5].
- Collaboration and task management tools, such as integrated pull requests, issue tracking, or communication systems, help teams coordinate, review work, and maintain workflow alignment.
Consequences
- Well-chosen tools help with productivity, reduce friction, and support smoother workflows.
- The right tools can improve the quality of the results produced, while also helping developers maintain focus by reducing their cognitive load.
- The ideal tool may harder to adopt (if not impossible) due to costs, licensing restrictions, or stakeholder mandates.
- Switching tools carries hidden costs, such as a temporary productivity loss during the learning curve or a potential misalignment with established workflows.
Related Patterns
The developers’ skills can make or break the choice of a tool. For more on skill building, see §5 Adequate Skills. The processes in play are also relevant to how a tool is used; §7 Meaningful Activities dives further into this.
References
- J. R. Jardina et al., “Keyboard Shortcut Users: They Are Faster at More than Just Typing,” Proceedings of the Human Factors and Ergonomics Society Annual Meeting, vol. 53, no. 15, pp. 975–979, Oct. 2009, doi: 10.1177/154193120905301508.
- S. Tak, “The Use of Keyboard Shortcuts: Optimizing versus satisficing in the use of complex technology,” Master’s thesis, Eindhoven University of Technology, Eindhoven, Netherlands, 2007. Available: https://pure.tue.nl/ws/portalfiles/portal/47032129/630263-1.pdf
- N. Nguyen and S. Nadi, “An empirical evaluation of GitHub copilot’s code suggestions,” in Proceedings of the 19th International Conference on Mining Software Repositories, Pittsburgh Pennsylvania: ACM, May 2022, pp. 1–5. doi: 10.1145/3524842.3528470.
- S. Peng, E. Kalliamvakou, P. Cihon, and M. Demirer, “The Impact of AI on Developer Productivity: Evidence from GitHub Copilot.” Accessed: Nov. 05, 2025. [Online]. Available: http://arxiv.org/abs/2302.06590
- R. A. Poldrack, T. Lu, and G. Beguš, “AI-assisted coding: Experiments with GPT-4.” Accessed: Nov. 05, 2025. [Online]. Available: http://arxiv.org/abs/2304.13187
Last updated: December 18, 2025