InfoQ Homepage Software Craftsmanship Content on InfoQ
-
Sustaining Fast Flow with Socio-Technical Thinking
To sustain a fast flow of changes over long periods of time, organizations address both the social and technical, socio-technical, aspects of reducing complexity. Examples are incentivising good technical practices to keep code maintainable, architecting systems to minimize dependencies and maximize team motivation, and leveraging platforms to preclude whole categories of infrastructure blockers.
-
Talking Like a Suit - Communicating the Importance of Engineering Work in Business Terms
This article explores how to construct engineering work as a story, including clearly presenting a problem, offering a solution, and showing the business a path to success that solves their problem and avoids failure. By presenting your case in this way, you significantly increase your chances of getting these engineering problems addressed, while also becoming a better partner for the business.
-
Managing Technical Debt in a Microservice Architecture
At QCon Plus, Glenn Engstrand described how Optum Digital engineering devised a method for reliably and predictably paying down tech debt for hundreds of microservices, forming relevant communities and identifying high-risk areas. The communities' collective decisions can be compiled into an actionable roadmap and presented to product managers in a systemic and non-confrontational way.
-
Avoiding Technical Bankruptcy: a Whole-Organization Perspective on Technical Debt
Technical debt is not primarily caused by clumsy programming, and hence we cannot hope to fix it by more skilled programming alone. Rather, technical debt is a third-order effect of poor communication. What we observe and label “technical debt” is the by-product of a dysfunctional process. To fix the problem of accumulating technical debt, we need to fix this broken process.
-
Growing an Experiment-Driven Quality Culture in Software Development
Have you ever faced a challenge at work that you weren’t sure how to tackle? Experiments to the rescue! In a complex environment like software development, no one can tell what might work, so we have to try things out. Read this article to learn about key challenges, insights and lessons, and get inspired for your own path to experimentation.
-
Solutions for Testing Blockchain: Private Blockchains, Permutations, and Shifting Left
Blockchain is an emerging software architecture that has the potential to be a big disruptor in the industry. With change however, comes the added risk of quality issues. As developers and test engineers, we need to be prepared for those changes to better adapt to the new technology and allow for the continued development of software and products through it, without compromising on quality.
-
Takeoff: What Software Development Can Learn from Aviation
A lot of professions have been around way longer than software development and have developed "best practices" to handle typical problems and challenges. Software developers can benefit from taking a closer look at aircraft maintenance or a pilot’s processes to learn from them, optimize our processes. and last but not least, try to reduce some of the stress that we experience over and over again.
-
Technical Debt Isn't Technical: What Companies Can Do to Reduce Technical Debt
In this article, three experts discuss some of the key findings of the “State of Technical Debt 2021” report including the impact of technical debt on engineering teams, the pros and cons of dealing with maintenance work continuously, the future of technical debt and what each engineering teams can do to communicate the importance of dealing with technical debt to companies’ leadership.
-
Value Stream Mapping and Value Stream Management: How They Can Work for You
Value stream mapping is a largely qualitative tool that creates visibility into the waste in a system while also creating alignment around ways to improve. Value stream management codifies the system, allowing for continual monitoring and management.
-
Improving Testability: Removing Anti-Patterns through Joint Conversations
Code is always testable, but the cost may be high, and the effort exhausting. We can change code to be highly testable by identifying anti-patterns and fixing them. And developers can make the code fit the test requirements, by having discussions with the testers who actually test it.
-
Easy Guide to Remote Pair Programming
Remote pair programming can be an extremely powerful tool, it's a form of social programming. When pairing remote, you need a lot more setup and more tooling in place, so that the two team members can work together effectively. With remote pair programming quality communication is essential because we lack the physical presence that gives us so much non-verbal communication.
-
Validation of Autonomous Systems
This article introduces validation and certification as well as the general approval of autonomous systems and their components, such as those used in automation technology and robotics. It gives an overview of methods for verification and validation of autonomous systems, sketches current tools and show the evolution towards AI-based techniques for influence analysis of continuous changes.