Prefactoring: Clear the Way for Your New Feature@media only screen and (max-width: 600px) { .body { overflow-x: auto; } .post-content table, .post-content td { width: auto !important; white-space: nowrap; } } This article was adapted from a Google Tech on the Toilet (TotT) episode. You can download a printer-friendly version of this TotT episode and post it in your office. By Rahul Singal “First make the change easy, then make the easy change.” - paraphrased from Kent Beck You're working on a new feature, but the existing code wasn't written with future changes in mind. Trying to force the feature in directly gets complicated fast. One change leads to another, and before you know it you're already a few files deep fixing things you never planned to touch. Prefactoring (short for "preparatory refactoring") is the practice of reworking existing code to make it more suitable for an upcoming change before you actually implement the new functionality. Instead of cleaning up code as an afterthought or trying to force a new feature into an incompatible structure, you restructure the codebase first. Prefactoring helps you: Easily implement new features: Restructuring the codebase first ensures your new feature fits naturally into the code. Speed up reviews: It's easier to review the refactoring and the feature in separate changes. Avoid bugs: Isolating cleanups from functional logic can help prevent bugs . Roll back safely: If you need to roll back, it is much easier to revert small, focused changes. Here is a simplified example of a prefactoring change: Change 1 (Prefactoring) Extract display name helper to remove duplication. Change 2 (Feature) Add middle name support. + def get_display_name(user): + return f"{user.first_name}” {user.last_name} # Profile page - display_name = f"{user.first_name} {user.last_name}" + display_name = get_display_name(user) # Email template - greeting = f"Hi {user.first_name} {user.last_name}, " + greeting = f"Hi {get_display_name(user)}," def get_display_name(user): - return f"{user.first_name} {user.last_name}” + return f"{user.first_name} {user.middle_name} {user.last_name}" You can prefactor a change that is already in review too! If your reviewer suggests a related cleanup during review, you can also extract it into a new base change to keep your current change focused on the feature. Note that not every cleanup needs to be prefactoring: you can do the cleanup in a follow up change if the cleanup doesn’t block your feature, or even in the same change if the cleanup is small enough.📝Google Testing BlogWelcome to SwedenCpp
Latest blogs, videos, podcasts and releases in one stream
Tuesday, July 21, 2026
Prefactoring: Clear the Way for Your New Feature@media only screen and (max-width: 600px) { .body { overflow-x: auto; } .post-content table, .post-content td { width: auto !important; white-space: nowrap; } } This article was adapted from a Google Tech on the Toilet (TotT) episode. You can download a printer-friendly version of this TotT episode and post it in your office. By Rahul Singal “First make the change easy, then make the easy change.” - paraphrased from Kent Beck You're working on a new feature, but the existing code wasn't written with future changes in mind. Trying to force the feature in directly gets complicated fast. One change leads to another, and before you know it you're already a few files deep fixing things you never planned to touch. Prefactoring (short for "preparatory refactoring") is the practice of reworking existing code to make it more suitable for an upcoming change before you actually implement the new functionality. Instead of cleaning up code as an afterthought or trying to force a new feature into an incompatible structure, you restructure the codebase first. Prefactoring helps you: Easily implement new features: Restructuring the codebase first ensures your new feature fits naturally into the code. Speed up reviews: It's easier to review the refactoring and the feature in separate changes. Avoid bugs: Isolating cleanups from functional logic can help prevent bugs . Roll back safely: If you need to roll back, it is much easier to revert small, focused changes. Here is a simplified example of a prefactoring change: Change 1 (Prefactoring) Extract display name helper to remove duplication. Change 2 (Feature) Add middle name support. + def get_display_name(user): + return f"{user.first_name}” {user.last_name} # Profile page - display_name = f"{user.first_name} {user.last_name}" + display_name = get_display_name(user) # Email template - greeting = f"Hi {user.first_name} {user.last_name}, " + greeting = f"Hi {get_display_name(user)}," def get_display_name(user): - return f"{user.first_name} {user.last_name}” + return f"{user.first_name} {user.middle_name} {user.last_name}" You can prefactor a change that is already in review too! If your reviewer suggests a related cleanup during review, you can also extract it into a new base change to keep your current change focused on the feature. Note that not every cleanup needs to be prefactoring: you can do the cleanup in a follow up change if the cleanup doesn’t block your feature, or even in the same change if the cleanup is small enough.📝Google Testing Blog
Pure Virtual C++ 2026 Is Now Live!Pure Virtual C++ 2026 is streaming now — watch five featured sessions live with Q&A, plus a full on-demand playlist, all free. The post Pure Virtual C++ 2026 Is Now Live! appeared first on C++ Team Blog .📝C++ Team Blog
How to handle literal expressions in AST🎥PVS-Studio
Building an AST for Your Own Language🎥PVS-Studio
Making an agile version of a Windows Runtime delegate in C++/WinRT, part 2Short-circuiting the easiest case. The post Making an agile version of a Windows Runtime delegate in C++/WinRT, part 2 appeared first on The Old New Thing .📝The Old New Thing
Generic Programming for Multidimensional Arrays - Alfredo A. Correa - C++Now 2026🎥CppNow
Louis Tatta on the C++ Alliance: Mission, People, and How It Works🎥C++ Alliance
Let's make a programming language. AST🎥PVS-Studio
valgrind and asan for memory leaks [C++ Shorts Lesson 23]🎥Mike Shah
Coroutines (wonder)land🎥GlobalCppIf this page is useful, please consider donating a coffee
Monday, July 20, 2026
C++ Dependencies Without the Headache: vcpkg + Copilot CLIAt Pure Virtual C++ 2026, we build a C++ console app from an empty folder using CMake, MSVC, and GitHub Copilot CLI. This walkthrough shows a practical prompt sequence for dependency selection, reproducible builds, and controlled updates. The post C++ Dependencies Without the Headache: vcpkg + Copilot CLI appeared first on C++ Team Blog .📝C++ Team Blog
Pure Virtual C++ 2026 Is Tomorrow and On-Demand Sessions Are Now AvailableThe on-demand sessions for Pure Virtual C++ 2026 are available now on YouTube. Watch seven talks on SPGO, vcpkg + Copilot CLI, CMake Tools, PackageReference, MSVC upgrades, and C++23/26 status — then join us live tomorrow. The post Pure Virtual C++ 2026 Is Tomorrow and On-Demand Sessions Are Now Available appeared first on C++ Team Blog .📝C++ Team Blog
Compile-Time Optimization Through Dynamic C++ Programming🎥CppOnline
Making an agile version of a Windows Runtime delegate in C++/WinRT, part 1The easy case is easy. The post Making an agile version of a Windows Runtime delegate in C++/WinRT, part 1 appeared first on The Old New Thing .📝The Old New Thing
C++ Weekly - Ep 542 - C++26's inplace_vector🎥Jason Turner
A Special General Meeting has been scheduledThe ACCU Committee has scheduled an online Special General Meeting for 19th September, 2026 at 19:00 BST. More information can be found on the AGM page (members only - must be logged in).📝ACCU
Enumerate and Extract Audio Buffers When Debugging C++ Applications - Henning Meyer - ADC 2025🎥audiodevcon
A professors advice on what topic to choose for your thesis🎥MeetingCpp
task and taskPool - Example of executing tasks in an array- Part 6 of N [Dlang Episode 153]🎥Mike ShahSunday, July 19, 2026
Lock-free Programming is Dead - Long Live Lock-free Programming! - Fedor G Pikus - C++Now 2026🎥CppNow
A History of FLAC - The Free Lossless Audio Codec - Josh Coalson - ADC 2025🎥audiodevconSaturday, July 18, 2026
C++ User Group Organizer Panel🎥MeetingCpp
global variables [C++ Shorts Lesson 22]🎥Mike ShahFriday, July 17, 2026
Faster C++ iterative builds with GitHub CopilotSlow builds are a consistent theme of feedback from C++ developers. We built GitHub Copilot build performance for Windows so you can leverage Copilot to optimize your project’s build times. This workflow will find optimizations that bring your build times down. At first, we only measured the impact of build optimizations on full clean builds. […] The post Faster C++ iterative builds with GitHub Copilot appeared first on C++ Team Blog .📝C++ Team Blog
Why has the display control panel pointer truncation bug gone unfixed for so long?It's fixed, but the fix isn't getting there. The post Why has the display control panel pointer truncation bug gone unfixed for so long? appeared first on The Old New Thing .📝The Old New Thing
The Morning Briefing - C++ Concurrency Before the Hardware Reckoning - Fedor Pikus - C++Now 2026🎥CppNow
Analog Filters for Realtime Audio - George Gkountouras - ADC 2025🎥audiodevcon
data parallelism with std.parallelism - Intro to Concurrency - Part 5 of N [Dlang Episode 152]🎥Mike ShahThursday, July 16, 2026
Pure Virtual C++ 2026 [Meet the Speakers, Part 3]: Modernizing C++Meet the speakers behind Pure Virtual C++ 2026. In the final part, Victor Ciura maps the real challenges and promising directions for C++/Rust interop. The post Pure Virtual C++ 2026 [Meet the Speakers, Part 3]: Modernizing C++ appeared first on C++ Team Blog .📝C++ Team Blog
Using AI to build your own softwareA few years ago, a friend of mine was stuck. He needed to quickly process over a hundred high-quality images according to a complicated sequence. He was using Photoshop, but it was going to take him days. Initially, he asked for my help, could I do the manual labor? I spent 15 minutes writing a … Continue reading Using AI to build your own software📝Daniel Lemire's blog
LIEVEN DE COCK - Better Threading in C++20🎥cppunderthesea
Building Software for the Next Generation of Bone ImagingBone imaging continues to evolve as new imaging modalities, quantitative biomarkers, and AI-assisted analysis expand what researchers can measure and understand. These advances are creating new opportunities across musculoskeletal research. They are also increasing the need for software that can support increasingly complex imaging studies. Software Challenges in Modern Bone Imaging Today’s bone imaging landscape […]📝Kitware Inc
CLion 2026.2 Is HereWith a debugger skill for AI agents, debug profiles for simplified debugger configuration, and support for C++26 reflection. CLion 2026.2 is now available. This latest version of the JetBrains IDE for C and C++ includes the following key features: You can download CLion 2026.2 from the link below, via the Toolbox App, or as a […]📝CLion : A Cross-Platform IDE for C and C++ | The JetBrains Blog
What’s New in In Situ Analysis and Visualization with ParaView CatalystAs HPC systems scale, the bottleneck is increasingly shifting from compute to data movement. While compute performance continues to improve, storage and interconnect bandwidth have not kept pace. As a result, moving data between devices and storage can become one of the largest performance constraints in modern simulation workflows. That gap is why in situ […]📝Kitware Inc
Sanitize it Before You Ship IT - Threadsanitizer🎥CppOnline
Speculating on how the buggy control panel extension truncated a value that it had right in front of itInferring the code's history. The post Speculating on how the buggy control panel extension truncated a value that it had right in front of it appeared first on The Old New Thing .📝The Old New Thing
dynamic memory and memory management [C++ Shorts Lesson 21]🎥Mike Shah
Egerton MS 1995Previously on this blog: “The Book of St Albans (1486)” (2026-05-22), in which I made a table of terms of venery, a.k.a. company terms, e.g. “an exaltation of larks,” as in the eponymous book by James Lipton. I mentioned that the Book of St Albans actually has “an exaltyng of larkis,” and that it’s only in Egerton MS 1995 (circa 1450), according to Lipton, that we find “an exaltacyon of larkys” proper. But I couldn’t find any digitized copy of Egerton MS 1995 to verify that claim.📝Arthur O’DwyerWednesday, July 15, 2026
MSVC Build Tools Preview updates – July 2026Try the latest updates to MSVC Build Tools Preview The post MSVC Build Tools Preview updates – July 2026 appeared first on C++ Team Blog .📝C++ Team Blog
Announcing 3D Slicer 5.123D Slicer 5.12 is now available. This latest stable release includes updates to DICOM workflows, visualization, Python package management, Qt 6 build support, and the extension ecosystem. Slicer 5.12 serves as a stable release before the project continues broader work related to Qt 6 and native Apple Silicon support.📝Kitware Inc
The case of the invalid function pointer when shutting down the display control panelWatching the bits disappear. The post The case of the invalid function pointer when shutting down the display control panel appeared first on The Old New Thing .📝The Old New Thing
2026 Military Health System Research Symposium (MHSRS)Kitware is proud to return to the Military Health System Research Symposium (MHSRS), the premier scientific meeting dedicated to advancing research and technologies that support Warfighter health and medical readiness. We are exhibiting at Booth 624, where we will demonstrate our open source software for military medical applications.📝Kitware Inc
C++ Insights - Episode 76: New, better, lambda visualization in C++ Insights🎥Andreas Fertig
PSD to DAW - Building a Pixel-Perfect UI Pipeline - Bence Kovács - ADC 2025🎥audiodevcon
C++ Insights Episode 76: New, better, lambda visualization in C++ InsightsI published a new C++ insights episode: New, better, lambda visualization in C++ Insights. In this episode, you'll share the latest change in C++ Insights regarding visualizing lambdas. Andreas📝AndreasFertig.com