InfoQ Homepage Development Content on InfoQ
-
Effective Practices for Coding with a Chat-Based AI
In this article, we explore how AI agents are reshaping software development and the impact they have on a developer’s workflow. We introduce a practical approach to staying in control while working with these tools by adopting key best practices from the discipline of software architecture, including defining an implementation plan, splitting tasks, and so on.
-
Engineering Principles for Building a Successful Cloud-Prem Solution
Discover how Cloud-Prem solutions combine cloud efficiency with on-premise control, meeting data sovereignty and compliance demands while optimizing operational costs and enhancing customer security.
-
Analyzing Apache Kafka Stretch Clusters: WAN Disruptions, Failure Scenarios, and DR Strategies
Proficient in analyzing the dynamics of Apache Kafka Stretch Clusters, I assess WAN disruptions and devise effective Disaster Recovery (DR) strategies. With deep expertise, I ensure high availability and data integrity across multi-region deployments. My insights optimize operational resilience, safeguarding vital services against service level agreement violations.
-
We Took Developers out of the Portal: How APIOps and IaC Reshaped Our API Strategy
Dynamic API strategist with expertise in transforming legacy management into efficient APIOps frameworks using Infrastructure as Code (IaC). Proven track record in automating API lifecycles, enhancing security, and fostering developer productivity through CI/CD integration. Adept at driving operational excellence and consistency across environments, enabling rapid deployment and innovation.
-
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.
-
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.
-
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.
-
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.
-
Binary Size Matters: the Challenges of Fitting Complex Applications in Storage-Constrained Devices
This article explores developing software for microcontrollers in C or C++, where constraints are the limited amount of volatile memory and the embedded hardware platform on which the software runs. It shows how to adopt languages like C++ while optimizing for binary size due to stringent hardware constraints, and trade off between runtime efficiency and binary size in architecture decisions.
-
Best Practices for Managing Shared Libraries in .NET Applications at Scale
This article discusses real-world cases of using shared libraries, their consequences, and possible solutions to blockers caused by using them in many dependent projects.
-
Legacy Modernization: Architecting Real-Time Systems around a Mainframe
At its heart, our transformation journey is about breaking dependencies at multiple levels. Many enterprises face similar challenges with legacy systems: tightly coupled architectures that are difficult to scale, change, or maintain. For us at National Grid, the solution came through four complementary paradigms that worked together to enable different forms of decoupling.