InfoQ Homepage Articles
-
Spotting Image Differences in Visual Software Testing with AI
Current AI, including multimodal models, fails at robust visual regression testing, missing structural changes that pixel-based tools flag as false positives. This article proposes a CNN-based solution to compare image segments, tolerating minor displacements. For larger distortions, a multi-scale algorithm realigns the images before comparison, isolating the true differences.
-
Using Traffic Mirroring to Debug and Test Microservices in Production-Like Environments
Traffic mirroring has evolved from a network security tool to a robust method for debugging and testing microservices using real-world data. By safely duplicating production traffic to a shadow environment, teams can replicate elusive bugs, profile performance under actual load, validate new features, and detect regressions, ensuring that production remains isolated and user experiences intact.
-
Bringing GPU-Level Performance to Enterprise Java: a Practical Guide to CUDA Integration
Java developers are no longer limited by CPU cores. This guide explores how to bring GPU-level acceleration to enterprise Java using Compute Unified Device Architecture (CUDA), with a practical Java Native Interface (JNI)-based integration pattern, real-world use case, and performance benchmarks. If you're solving high-throughput challenges, this article shows how to make Java truly parallel.
-
Developer Joy: a Better Way to Boost Developer Productivity
In this article, Holly and Trisha explore why joy isn’t a distraction from productivity: it’s the secret ingredient. From debugging brain waves in the middle of a jog to cutting out test flakiness, they explain how to reclaim developer satisfaction and boost output by embracing curiosity, minimizing friction, and giving ourselves a break.
-
The MVP Dilemma: Scale Now or Scale Later?
Scaling a system is a hard problem to solve. Underinvesting in scalability leads to a shortened lifespan for the system, but overinvesting can kill the MVP business case because of cost.
-
Designing Resilient Event-Driven Systems at Scale
Learn how to design resilient event-driven systems that scale. Explore key patterns like shuffle sharding and decoupling queues to handle load spikes and failures. Understand common pitfalls like over-relying on retries and neglecting observability for robust, scalable architectures.
-
Faster, Smoother, More Engaging: Personalized Content Pagination
Dynamic content loading powered by AI transforms user experiences by personalizing delivery based on user's behavior and network conditions. By analyzing scroll depth, speed, and dwell time, we optimize loading times, enhance engagement, and reduce infrastructure costs, especially on devices with poor internet connectivity.
-
Inflection Points in Engineering Productivity as Amazon Grew 30x
In this article, Carlos Arguelles elaborates on how engineering productivity needs a shift as organizations scale. He shares examples from his time at Google and Amazon, explaining how some architectural decisions made at these companies shaped the way they develop software. Engineering productivity investments depend on inflection points, scale, controls, data, and tooling choices.
-
Mocking gRPC in Spring Boot Microservice Integration Tests with WireMock
Mocking gRPC services allows you to validate gRPC integration code during your tests while avoiding common pitfalls such as unreliable sandboxes, version mismatches, and complex test data setup requirements. Learn how to use WireMock’s Spring Boot integration to mock gRPC services.
-
AI Interventions to Reduce Cycle Time in Legacy Modernization
In this article, we share our experiences and insights on how large language models (LLMs) helped us uncover and enhance the conceptual constructs behind software. We discuss how these approaches address the inherent complexity of software engineering and improve the likelihood of success in large, complex software modernization projects.
-
RxJS Best Practices in Angular 16: Avoiding Subscription Pitfalls and Optimizing Streams
This article delves into modern Angular (16+) RxJS best practices. It emphasizes using AsyncPipe for templates, flattening streams with operators, ensuring proper cleanup with takeUntil and DestroyRef, implementing error handling, and combining RxJS with Angular signals for efficient state management, ultimately leading to future-proof and maintainable code in Angular 17/18.
-
How to Scale Your Impact at the Staff-Plus Level
This article demystifies what "Staff-Plus" expectations actually look like, drawing on real promotion and performance reviews experiences. It maps out career ladders, digs into promotion patterns and the key behaviors that consistently help high-performing engineers to reinvent themselves, and introduces the concept of "staff projects" which top performers use to drive their careers forward.