<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Nevena</title>
    <description>The latest articles on Forem by Nevena (@nevpetda).</description>
    <link>https://forem.com/nevpetda</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3675023%2F3f9da5ea-9aa1-49c9-b446-21ad260f8226.png</url>
      <title>Forem: Nevena</title>
      <link>https://forem.com/nevpetda</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/nevpetda"/>
    <language>en</language>
    <item>
      <title>Code Testing Fundamentals: How to Do It Right</title>
      <dc:creator>Nevena</dc:creator>
      <pubDate>Mon, 09 Mar 2026 09:00:01 +0000</pubDate>
      <link>https://forem.com/nevpetda/code-testing-fundamentals-how-to-do-it-right-pef</link>
      <guid>https://forem.com/nevpetda/code-testing-fundamentals-how-to-do-it-right-pef</guid>
      <description>&lt;p&gt;&lt;a href="https://linkly.link/2a88W" rel="noopener noreferrer"&gt;DataArt's&lt;/a&gt; Senior Developer Alexey Klimenko explains why testing matters and how to approach it in practice. This guide covers core concepts, test types, working strategies, best practices, and a risk-based mindset to help teams make testing a natural part of engineering culture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Do We Need Tests?
&lt;/h2&gt;

&lt;p&gt;Testing often gets buried under buzzwords: coverage, reports, pipelines, TDD debates. Strip that away, and the idea is simple. &lt;strong&gt;Tests exist to give us confidence&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A clear testing strategy delivers tangible benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Higher product quality, with fewer production bugs and hidden issues&lt;/li&gt;
&lt;li&gt;Fewer regressions, reducing stress when shipping new features&lt;/li&gt;
&lt;li&gt;Lower long-term costs, since refactoring and fixes become safer and faster&lt;/li&gt;
&lt;li&gt;Reduced business risk from broken core flows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In essence, tests create a safety net. They make growth possible without turning every change into a gamble.&lt;/p&gt;

&lt;h3&gt;
  
  
  Understanding Test Types:
&lt;/h3&gt;

&lt;p&gt;Instead of memorizing labels, it helps to look at testing from three perspectives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;By &lt;strong&gt;level&lt;/strong&gt; — what exactly we're testing&lt;/li&gt;
&lt;li&gt;By &lt;strong&gt;approach&lt;/strong&gt; — how we write and run the tests&lt;/li&gt;
&lt;li&gt;By &lt;strong&gt;goal&lt;/strong&gt; — what this particular test is meant to cover&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  By Level: From Unit to E2E (End-to-End)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Unit Tests
&lt;/h3&gt;

&lt;p&gt;Unit tests validate small, isolated pieces of logic: functions, utilities, methods.&lt;/p&gt;

&lt;p&gt;A good unit test is fast, independent of the database/network/timing, and focused on a specific behavior.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// utils/calcDiscount.js
export function calcDiscount(price, percent) {
  if (percent &amp;lt; 0 || percent &amp;gt; 100) {
    throw new Error('Invalid percent');
  }
  return price - (price * percent) / 100;
}

// calcDiscount.test.js (Jest)
import { calcDiscount } from './calcDiscount';

describe('calcDiscount', () =&amp;gt; {
  it('applies percentage discount', () =&amp;gt; {
    expect(calcDiscount(100, 10)).toBe(90);
  });

  it('throws on invalid percent', () =&amp;gt; {
    expect(() =&amp;gt; calcDiscount(100, 150)).toThrow('Invalid percent');
  });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Component Tests
&lt;/h2&gt;

&lt;p&gt;Component tests focus on UI components in isolation: different props, states, and events.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// components/Counter.jsx
export const Counter = ({ initial = 0 }) =&amp;gt; {
  const [value, setValue] = React.useState(initial);

  return (
    &amp;lt;div&amp;gt;
      &amp;lt;span aria-label="value"&amp;gt;{value}&amp;lt;/span&amp;gt;
      &amp;lt;button onClick={() =&amp;gt; setValue(value + 1)}&amp;gt;+&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}

// Counter.test.jsx (React Testing Library + Jest)
import { render, screen, fireEvent } from '@testing-library/react';
import { Counter } from './Counter';

it('increments value when user clicks plus', () =&amp;gt; {
  render(&amp;lt;Counter initial={1} /&amp;gt;);

  const value = screen.getByLabelText('value');
  const button = screen.getByText('+');

  expect(value).toHaveTextContent('1');

  fireEvent.click(button);
  expect(value).toHaveTextContent('2');
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Integration Tests
&lt;/h2&gt;

&lt;p&gt;Integration tests verify how multiple modules of the system work together: controller + validator, component + API(mocked).&lt;/p&gt;

&lt;p&gt;Example (a hypothetical service + external client):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// services/userService.js
export async function createUser(userData, { userRepo, emailService }) {
  const user = await userRepo.save(userData);
  await emailService.sendWelcome(user.email);
  return user;
}

// userService.integration.test.js
import { createUser } from './userService';

it('creates user and sends welcome email', async () =&amp;gt; {
  const savedUsers = [];
  const sentEmails = [];

  const userRepo = {
    save: async (userData) =&amp;gt; {
      savedUsers.push(userData);
      return { id: 1, ...userData };
    },
  };

  const emailService = {
    sendWelcome: async (email) =&amp;gt; {
      sentEmails.push(email);
    },
  };

  const result = await createUser(
    { email: 'test@example.com' },
    { userRepo, emailService }
  );

  expect(result.id).toBe(1);
  expect(savedUsers).toHaveLength(1);
  expect(sentEmails).toContain('test@example.com');
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  E2E (End-to-End) Tests
&lt;/h2&gt;

&lt;p&gt;This is the whole user journey through the system: from the UI down to the database and back. E2E tests are more expensive and slower to maintain, but they give us tremendous confidence that real-world scenarios actually work.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// e2e/checkout.spec.js
import { test, expect } from '@playwright/test';

test('user can buy a product', async ({ page }) =&amp;gt; {
  await page.goto('https://my-shop.example');

  await page.getByText('Fancy Mug').click();
  await page.getByRole('button', { name: 'Add to cart' }).click();
  await page.getByRole('link', { name: 'Cart' }).click();

  await page.getByRole('button', { name: 'Checkout' }).click();
  await page.getByLabel('Card number').fill('4242 4242 4242 4242');
  await page.getByLabel('Expiry').fill('12/30');
  await page.getByLabel('CVC').fill('123');

  await page.getByRole('button', { name: 'Pay' }).click();

  await expect(page.getByText('Thank you for your purchase')).toBeVisible();
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  By Approach: How Tests Are Created
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Manual Vs. Automated
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Manual&lt;/strong&gt; — a tester/developer goes through scenarios by hand.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Automated&lt;/strong&gt; — scenarios are written as code and run in CI.&lt;/p&gt;

&lt;p&gt;Manual testing isn't going anywhere, but as a project grows, having an automated "safety layer" becomes increasingly valuable.&lt;/p&gt;

&lt;h3&gt;
  
  
  TDD (Test-Driven Development)
&lt;/h3&gt;

&lt;p&gt;TDD follows a simple loop:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Write a failing test (&lt;strong&gt;red&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Write the minimum amount of code to pass the test (&lt;strong&gt;green&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Remove duplication / clean up the code (&lt;strong&gt;refactor&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  BDD (Behavior-Driven Development)
&lt;/h3&gt;

&lt;p&gt;BDD focuses on a shared understanding of how the system should behave.&lt;/p&gt;

&lt;p&gt;BDD-style tests do not have to be a formal BDD process with lots of meetings and Gherkin files. You can use the approach partially, simply as a convenient way to keep your focus on behavior.&lt;/p&gt;

&lt;p&gt;Key ideas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We talk in terms of &lt;strong&gt;behavior&lt;/strong&gt;, not implementation details&lt;/li&gt;
&lt;li&gt;We use the &lt;strong&gt;Given/When/Then&lt;/strong&gt; structure&lt;/li&gt;
&lt;li&gt;Scenarios are understandable to developers, QA, analysts, and business people&lt;/li&gt;
&lt;li&gt;Tests become a form of &lt;strong&gt;living documentation&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# cart.feature
Feature: Shopping cart
Scenario: User can add an item to the cart. Given the user is on the shop page and the cart is empty
    When the user adds an item to the cart
    Then the cart shows "1 item in cart"

import { Given, When, Then } from '@cucumber/cucumber';
import { expect } from '@playwright/test';

Given('the user is on the shop page', async function () {
  await this.page.goto('https://my-shop.example');
});

Given('the cart is empty', async function () {
  // reset the basket state, e.g. ensure it's empty
});

When('the user adds an item to the cart', async function () {
  await this.page.getByText('Add to cart').click();
});

Then('the cart shows {string}', async function (text) {
  await expect(this.page.getByText(text)).toBeVisible();
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Exploratory Testing
&lt;/h3&gt;

&lt;p&gt;It relies on curiosity: &lt;em&gt;what happens if…?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rapidly switching between tabs to see if the UI breaks&lt;/li&gt;
&lt;li&gt;Clicking a button 10 times a second&lt;/li&gt;
&lt;li&gt;Entering unexpected values&lt;/li&gt;
&lt;li&gt;Killing the network&lt;/li&gt;
&lt;li&gt;Reloading the page in the middle of a request&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exploratory testing often identifies bugs that formal test scenarios miss entirely.&lt;/p&gt;

&lt;h2&gt;
  
  
  By Goal: What Is Being Validated
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Functional Testing
&lt;/h3&gt;

&lt;p&gt;We check &lt;strong&gt;what&lt;/strong&gt; the system does. Common categories include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Boundary&lt;/strong&gt; — test edge cases and limits (e.g., min/max values, “just below/just above” a limit, Input limit is 10 characters → testing 9, 10, 11)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regression&lt;/strong&gt; — ensure existing functionality still works (e.g., new feature added → old flow still works)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smoke&lt;/strong&gt; — quick “does it run at all?” check (e.g., you fixed payment modal → check app loads, login works, basic flows still function)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sanity&lt;/strong&gt; — quick validation of a specific fix or feature (e.g., you fixed the payment modal → check only the payment modal behavior)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Non-Functional Testing
&lt;/h3&gt;

&lt;p&gt;Here, the focus is on &lt;strong&gt;how&lt;/strong&gt; the system behaves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Performance&lt;/strong&gt; — speed, load, response times&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt; — vulnerabilities, permissions, attacks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Usability&lt;/strong&gt; — how easy it is to use&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A11y (Accessibility)&lt;/strong&gt; — screen readers, keyboard navigation, contrast, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compatibility&lt;/strong&gt; — different browsers/devices&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reliability&lt;/strong&gt; — stability over long runs, restarts, and network issues&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Specialized Test Types
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Snapshot Testing
&lt;/h3&gt;

&lt;p&gt;Snapshot tests compare a saved version of the UI/DOM to the current one. They're handy for components.&lt;/p&gt;

&lt;p&gt;Example (Jest + React Testing Library):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Button.test.jsx
import { render } from '@testing-library/react';
import { Button } from './Button';

it('renders primary button', () =&amp;gt; {
  const { container } = render(&amp;lt;Button variant="primary"&amp;gt;Click me&amp;lt;/Button&amp;gt;);
  expect(container.firstChild).toMatchSnapshot();
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Visual Regression/Screenshot Testing
&lt;/h3&gt;

&lt;p&gt;Tools like Playwright or Storybook can compare screenshots pixel-by-pixel. For example, you can see if a button moved after a CSS change.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mutation Testing
&lt;/h3&gt;

&lt;p&gt;Tools like Stryker deliberately “break” your code (e.g., change operators or conditions) and check whether your tests can catch it. The idea is simple: if you can break business logic and the tests are still green, the quality of your tests is low — even if coverage is high.&lt;/p&gt;

&lt;p&gt;Why so many classifications if, in the end, we are just checking that everything works? Separations are needed not for the sake of theory, but for the sake of risk, time, and cost management.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why So Many Test Categories
&lt;/h2&gt;

&lt;p&gt;The goal is not theory. It is risk management.&lt;/p&gt;

&lt;p&gt;In real projects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Time is limited&lt;/li&gt;
&lt;li&gt;Money is limited&lt;/li&gt;
&lt;li&gt;Risks vary&lt;/li&gt;
&lt;li&gt;There are many changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Therefore, testing is divided into types to understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What needs to be tested deeply&lt;/li&gt;
&lt;li&gt;What can be tested quickly&lt;/li&gt;
&lt;li&gt;What can be tested superficially&lt;/li&gt;
&lt;li&gt;What must be tested after changes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Reducing Flaky Tests
&lt;/h2&gt;

&lt;p&gt;Flaky tests (sometimes red, sometimes green with no code changes) destroy trust in your test suite.&lt;/p&gt;

&lt;p&gt;To reduce instability:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use stable test environments&lt;/li&gt;
&lt;li&gt;Control your data (fixtures, factory functions)&lt;/li&gt;
&lt;li&gt;Isolate from unstable external services (mocks/fakes)&lt;/li&gt;
&lt;li&gt;Make tests deterministic (fake timers, control randomness)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FIRST Principles of Good Tests
&lt;/h2&gt;

&lt;p&gt;Strong tests usually follow the &lt;strong&gt;FIRST&lt;/strong&gt; model:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fast&lt;/strong&gt; — the test runs quickly&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Independent&lt;/strong&gt; — doesn't depend on other tests&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repeatable&lt;/strong&gt; — gives the same result in any environment&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Self-checking&lt;/strong&gt; — validates itself (green/red) without manual log inspection&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Timely&lt;/strong&gt; — written at the right time (not a year after the feature was implemented)&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Testing Realities
&lt;/h2&gt;

&lt;p&gt;⭐ &lt;strong&gt;Bugs are inevitable&lt;/strong&gt;&lt;br&gt;
The goal of testing is not to "prove there are no bugs", but to reduce the risk of serious problems. We test not because someone writes bad code, but because errors are a natural part of software development.&lt;/p&gt;

&lt;p&gt;⭐ &lt;strong&gt;You can't test everything&lt;/strong&gt;&lt;br&gt;
The space of possible inputs and scenarios is infinite. So, you have to make choices. We must choose what to test based on importance and risk, rather than attempting to cover everything.&lt;/p&gt;

&lt;p&gt;⭐ &lt;strong&gt;Adopt a risk-based mindset&lt;/strong&gt;&lt;br&gt;
Focus your testing effort on areas that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Break most often&lt;/li&gt;
&lt;li&gt;Are critical for the business&lt;/li&gt;
&lt;li&gt;Are complex and challenging to understand&lt;/li&gt;
&lt;li&gt;Have tricky integrations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Testing is an investment. We put more effort into areas where failure would be costly.&lt;/p&gt;

&lt;p&gt;⭐ &lt;strong&gt;The pesticide paradox&lt;/strong&gt;&lt;br&gt;
If you keep running the same set of tests, they eventually stop finding new bugs, like pests getting used to the same poison. Your test suite needs to be updated and expanded periodically. Tests must be reviewed and improved regularly; otherwise, they become noise and lose their value.&lt;/p&gt;

&lt;p&gt;⭐ &lt;strong&gt;Quality is a team responsibility&lt;/strong&gt;&lt;br&gt;
It's not "the QA’s job" or "whoever writes tests". Architecture decisions, deadlines, scope, and attitude to technical debt all affect quality. Everyone (Dev, QA, PM, DevOps) contributes to product quality, so testing decisions and responsibilities must be shared.&lt;/p&gt;

&lt;h2&gt;
  
  
  Coverage: What Do 80% Actually Mean?
&lt;/h2&gt;

&lt;p&gt;Coverage (line/function coverage) is often turned into a KPI. But it’s important to remember: &lt;strong&gt;Coverage ≠ test quality&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You can have 90% coverage and still:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Never test boundary values&lt;/li&gt;
&lt;li&gt;Fail to catch real bugs&lt;/li&gt;
&lt;li&gt;Ignore important branches in conditions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use coverage to identify blind spots:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Untested modules&lt;/li&gt;
&lt;li&gt;Untouched code paths&lt;/li&gt;
&lt;li&gt;Rare scenarios&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For many projects, &lt;strong&gt;70–90%&lt;/strong&gt; is reasonable, but what really matters is what exactly is being tested, not the number itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing as Part of Engineering Culture
&lt;/h2&gt;

&lt;p&gt;Testing is not a luxury or a "nice-to-have if there's time left". It's part of the engineering discipline.&lt;/p&gt;

&lt;p&gt;When the team has a basic understanding of the types of tests available, what value they bring, and how to think about coverage and risk, you can start arguing about details like Jest/Vitest, Cypress/Playwright, and how many E2E tests are needed.&lt;/p&gt;

&lt;p&gt;But the foundation is the same: &lt;strong&gt;Testing = Engineering discipline&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Treat testing as risk management, not bureaucracy. Teams that adopt this mindset ship faster, break less, and release with confidence.&lt;/p&gt;

&lt;p&gt;*The article was initially published on &lt;a href="https://linkly.link/2dXrD" rel="noopener noreferrer"&gt;DataArt Team blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>engineeringculture</category>
      <category>softwaretesting</category>
      <category>testautomation</category>
    </item>
    <item>
      <title>RASP: The Silent Ninja Handling the Threats You Don’t See</title>
      <dc:creator>Nevena</dc:creator>
      <pubDate>Mon, 23 Feb 2026 08:24:07 +0000</pubDate>
      <link>https://forem.com/nevpetda/rasp-the-silent-ninja-handling-the-threats-you-dont-see-42pg</link>
      <guid>https://forem.com/nevpetda/rasp-the-silent-ninja-handling-the-threats-you-dont-see-42pg</guid>
      <description>&lt;p&gt;&lt;em&gt;What is RASP, and why does it matter? &lt;a href="https://linkly.link/2a88W" rel="noopener noreferrer"&gt;DataArt's&lt;/a&gt; Security Engineer, Kirill Chsheglov, explains this in-app security technology, compares leading commercial solutions, and examines what the open-source OpenRASP project brings to the table.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is RASP?
&lt;/h2&gt;

&lt;p&gt;RASP (Runtime Application Self-Protection) is a security technology that runs inside an application and protects it in real time. Think of it like a bodyguard that rides along with your app, monitoring activity and stepping in when something suspicious happens.&lt;/p&gt;

&lt;p&gt;Where a traditional WAF (Web Application Firewall) only sees incoming traffic; RASP has full visibility of the app’s internal activity, including function calls, database queries, and more.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does it Matter?
&lt;/h2&gt;

&lt;p&gt;Many clients still depend on legacy systems that can't be easily patched. Perimeter tools help, but they often lack context, create noise, or miss threats that unfold within the application itself.&lt;/p&gt;

&lt;p&gt;RASP closes that gap, quietly monitoring and reacting right away when something goes wrong. Unlike WAFs that raise too many alerts, RASP works silently and effectively, like a ninja, calmly whispering: "&lt;em&gt;Relax. I see everything. I've already caught them.&lt;/em&gt;"&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Should Clients Turn to RASP?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;"Don't touch the legacy code, it still works."&lt;/strong&gt; RASP can cover security holes without changing the code, which can be troublesome.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;WAF screams, RASP acts.&lt;/strong&gt; Fewer false positives mean fewer alerts and no SOC meltdowns every Friday.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Zero-day? Stay calm.&lt;/strong&gt; Even without a CVE (Common Vulnerabilities and Exposures), RASP can spot suspicious behavior and stop attacks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Attacks have gotten smarter.&lt;/strong&gt; Old perimeter defenses don't help much with microservices, APIs, or serverless—but that's where RASP works.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;RASP may seem expensive, but it can save millions&lt;/strong&gt; by stopping cyberattacks—for example, in &lt;a href="https://runsafesecurity.com/blog/how-runtime-application-self-protection-can-prevent-cyberattacks-in-oil-gas-environments/" rel="noopener noreferrer"&gt;oil and gas environments&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;RASP works in production&lt;/strong&gt;, unlike SAST and DAST, which work before deployment.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In short, RASP is an in-app security layer that understands context and acts immediately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Leading Commercial Solutions and an Open-Source Option
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.fastly.com/documentation/guides/next-gen-waf/getting-started/about-the-architecture/" rel="noopener noreferrer"&gt;Fastly&lt;/a&gt; employs a hybrid approach, combining edge-level protection with in-app agents. Malicious traffic is filtered globally before reaching your infrastructure. Agents inside the app runtime (Java, .NET, etc.) provide deeper inspection. A central cloud engine manages analytics and rule updates.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.imperva.com/products/application-security/" rel="noopener noreferrer"&gt;Imperva RASP&lt;/a&gt; offers a lightweight plugin that sits directly inside the application (JVM, .NET, Node.js). It utilizes grammar-based analysis to detect threats at runtime, including zero-day vulnerabilities. With no proxy or network dependencies, it works well for legacy apps or strict environments.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.contrastsecurity.com/en/contrast-concepts.html" rel="noopener noreferrer"&gt;Contrast&lt;/a&gt; instruments deep code to add security directly into the application flow. By hooking into core runtime APIs (like java.lang.instrumentation), it accesses full stack traces, queries, and execution data to accurately detect and block attacks. Designed for DevOps, it integrates via CI/CD pipelines, containers, and Kubernetes, providing accurate in-app protection with minimal false positives.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/baidu/openrasp" rel="noopener noreferrer"&gt;OpenRASP&lt;/a&gt; is a fully open-source, server-layer solution. It integrates seamlessly into key operations, such as database access, file I/O, and networking, in languages like Java and PHP. With taint-tracking and context analysis, it flags and logs malicious behavior. It's customizable, but requires solid internal development, management, and tuning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance Impact
&lt;/h2&gt;

&lt;p&gt;The Fastly RASP engine is built for real-time decision-making, which reduces false positives and &lt;strong&gt;minimizes the impact on web performance&lt;/strong&gt; (See Fastly's &lt;a href="https://learn.fastly.com/rs/025-XKO-469/images/signal-sciences-10-key-capabilities-whitepaper.pdf" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; for details).&lt;/p&gt;

&lt;p&gt;Imperva's grammar-based RASP uses formal language parsing to achieve &lt;strong&gt;high detection accuracy with low runtime impact&lt;/strong&gt;. End users won't notice it running (Read the &lt;a href="https://www.imperva.com/resources/datasheets/Runtime-Application-Self-Protection-RASP.pdf" rel="noopener noreferrer"&gt;datasheet&lt;/a&gt; for more information).&lt;/p&gt;

&lt;p&gt;Contrast Protect reports that &lt;strong&gt;80% of requests incur a latency of under 0.5ms&lt;/strong&gt;, with 96% processed within a few milliseconds, matching or outperforming similar WAF solutions (See more at Contrast Security's &lt;a href="https://www.contrastsecurity.com/glossary/waf-vs-rasp" rel="noopener noreferrer"&gt;glossary&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;What do these tools have in common? RASP doesn't just protect, it does so quietly, blending into production like it was always there.&lt;/p&gt;

&lt;h2&gt;
  
  
  When RASP Makes Sense?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You run &lt;strong&gt;high-value web apps or APIs&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;You need &lt;strong&gt;runtime protection&lt;/strong&gt; while fixing complex issues.&lt;/li&gt;
&lt;li&gt;You want &lt;strong&gt;real visibility into production threats&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Additional Reading
&lt;/h2&gt;

&lt;p&gt;Check out the following material to learn more:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/resources/articles/what-is-rasp" rel="noopener noreferrer"&gt;What is runtime application self-protection (RASP)?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fastly.com/resources/datasheets/security/architecture-and-deployment-overview" rel="noopener noreferrer"&gt;Fastly: Unified web app and API security for any environment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fintech.global/cybertechforum/wp-content/uploads/2020/11/Imperva-Guide-To-RASP_Whitepaper_202008.pdf" rel="noopener noreferrer"&gt;Imperva RASP white-paper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.contrastsecurity.com/glossary/waf-vs-rasp" rel="noopener noreferrer"&gt;Contrast: WAF vs. RASP Security Tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/baidu/openrasp" rel="noopener noreferrer"&gt;OpenRASP GitHub repo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cyberpandit.org/runtime-application-self-protection-rasp/#google_vignette" rel="noopener noreferrer"&gt;The Power of RASP: Use Cases, Tools, and Benefits&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;RASP isn’t a silver bullet. But it delivers something traditional tools can’t: a view from inside the application, paired with the ability to act immediately. While WAFs’ perimeter defenses raise alarms, RASP stays focused on stopping the threat at the point where it matters. A silent hero in a noisy world.&lt;/p&gt;

&lt;p&gt;*The article was initially published on &lt;a href="https://linkly.link/2bO8Q" rel="noopener noreferrer"&gt;DataArt Team blog&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>security</category>
      <category>programming</category>
      <category>fastly</category>
      <category>beginners</category>
    </item>
    <item>
      <title>5 Ancient Lists of Data That Changed the World</title>
      <dc:creator>Nevena</dc:creator>
      <pubDate>Mon, 09 Feb 2026 10:21:48 +0000</pubDate>
      <link>https://forem.com/nevpetda/5-ancient-lists-of-data-that-changed-the-world-22ci</link>
      <guid>https://forem.com/nevpetda/5-ancient-lists-of-data-that-changed-the-world-22ci</guid>
      <description>&lt;p&gt;&lt;em&gt;The new &lt;a href="https://linkly.link/2a88W" rel="noopener noreferrer"&gt;DataArt&lt;/a&gt; Museum project explores millennia of data mastery— from baboon bones to AI brains. For our blog, Alexey Pomigailov, DataArt Museum curator, selected from this remarkable online catalog 5 ancient lists of data that changed the world.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There’s a common myth that data is a 21st-century invention. In reality, data engineering has been around for thousands of years. Our need to record, calculate, and analyze information has always existed. Over the centuries, humans have used records, counts, and tracking to build something bigger than what came before: from notching a baboon bone with a fingernail, to creating the first lists of taxpayers to run ancient empires, to compiling cargo lists to track Viking goods. These early innovations eventually led to punch cards, Excel spreadsheets, online shopping, and even chatting with AI agents today.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The Uruk Clay Tablet (Sumer, c. 3200 BCE)
&lt;/h2&gt;

&lt;p&gt;A clay tablet recording barley and malt deliveries for beer production was found in modern-day Iraq. It can be viewed as the birth of &lt;strong&gt;Tabular Data&lt;/strong&gt;. By separating the "label" (malt) from the "value" (quantity) using a grid, Sumerian administrators invented the row-and-column structure. It was the world's first spreadsheet, decoupling data types from data values.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp0fri7hgs5pqjc6s7m41.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp0fri7hgs5pqjc6s7m41.jpeg" alt="The Library of Alexandria burning" width="800" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The Pinakes of Callimachus (Alexandria, c. 250 BCE)
&lt;/h2&gt;

&lt;p&gt;A bibliographic registry of the 500,000 scrolls in the Great Library of Alexandria was the invention of &lt;strong&gt;Metadata and Indexing&lt;/strong&gt;. Callimachus, an ancient Greek scholar and librarian, realized that data is useless if it isn't "addressable." He created a system that mapped a logical record (title/author) to a physical location (shelf), the ancient ancestor of the SQL index and the URL.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2fk8af6884ghjzyz9cbb.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2fk8af6884ghjzyz9cbb.jpeg" alt="Image of Nuova Cronica" width="800" height="756"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Nuova Cronica by Giovanni Villani (Florence, c. 1348 CE)
&lt;/h2&gt;

&lt;p&gt;A chronicle of Florence tracked birth rates, grain prices, and mortality during the Black Death. It represents the shift from simple logging to &lt;strong&gt;Descriptive Analytics&lt;/strong&gt;. The Italian chronicler Giovanni Villani didn't just record history; he used statistical data to describe the economic and demographic health of the city, arguably creating the first Business Intelligence report.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg0hvpbjhy8qus1rxpa0e.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg0hvpbjhy8qus1rxpa0e.jpeg" alt="Illustration of old Krakow" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Liber Beneficiorum (Krakow, 1470–1480 CE)
&lt;/h2&gt;

&lt;p&gt;Jan Długosz’s "Book of Benefices" is a massive register of church assets and endowments in Poland. As a precursor to &lt;strong&gt;State Statistics and ERP&lt;/strong&gt; (Enterprise Resource Planning), it was a centralized database of decentralized assets, designed to give the "headquarters" (the Diocese) a unified view of geography, economics, and taxation across the region.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0a7gytvsuba2hi4n9b2s.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0a7gytvsuba2hi4n9b2s.jpeg" alt="Computus" width="800" height="1054"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. The Computus (Medieval Europe, c. 222–1200 CE)
&lt;/h2&gt;

&lt;p&gt;Computus was a system of complex calculations used by the Church to synchronize lunar and solar cycles to determine the date of Easter. It can be viewed as the first &lt;strong&gt;Algorithm&lt;/strong&gt;. Unlike a static lookup table, the Computus required "loops" of logic and conditional processing. It proved that mathematics could govern social time, paving the way for the clock cycles inside every modern CPU.&lt;/p&gt;

&lt;p&gt;Our recent DataArt museum project, &lt;a href="https://retrospect.dataart.com/" rel="noopener noreferrer"&gt;Recount, Sort &amp;amp; Figure Out&lt;/a&gt;, traces the evolution of these concepts and highlights the massive role this technology played in shaping civilization.&lt;/p&gt;

&lt;p&gt;Seen through this lens, you realize that data engineering isn’t new — we just have faster tools. The logic of organizing the world into rows, columns, and addresses is one of humanity’s oldest survival skills. Explore this multi-millennial catalog to see how the art of handling data has shaped culture, technology, and imagination. to see how the art of handling data has shaped culture, technology, and imagination.&lt;/p&gt;

&lt;p&gt;*The article was initially published on &lt;a href="https://www.dataart.team/articles/history-of-data-engineering-ancient-data-lists" rel="noopener noreferrer"&gt;DataArt Team blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>data</category>
      <category>history</category>
      <category>datascience</category>
      <category>dataengineering</category>
    </item>
    <item>
      <title>Preparing for the GCP ACE Exam: What You Should Know</title>
      <dc:creator>Nevena</dc:creator>
      <pubDate>Mon, 02 Feb 2026 08:49:48 +0000</pubDate>
      <link>https://forem.com/nevpetda/preparing-for-the-gcp-ace-exam-what-you-should-know-52cg</link>
      <guid>https://forem.com/nevpetda/preparing-for-the-gcp-ace-exam-what-you-should-know-52cg</guid>
      <description>&lt;p&gt;&lt;em&gt;Thinking about the GCP Associate Cloud Engineer (ACE) certification? Eugene Kiselev, a seasoned engineer from &lt;a href="https://linkly.link/2a88W" rel="noopener noreferrer"&gt;DataArt&lt;/a&gt; with over 13 years of experience in various cloud-related projects, walks you through his preparation process, exam experience, and key takeaways. Here’s what he learned and recommends to anyone planning to take the exam.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Took the ACE Exam
&lt;/h2&gt;

&lt;p&gt;Although I already hold the &lt;strong&gt;GCP Professional Cloud Architect&lt;/strong&gt; (PCA) certification, most of my recent work has focused on AWS or Azure. I still remember the core concepts; those are quite consistent across providers, but I’d lost touch with some of the practical nuances (like the color of some buttons) in the GCP console.&lt;/p&gt;

&lt;p&gt;To refresh that knowledge, I chose the ACE exam. According to the description, it’s a hands-on certification that tests your ability to &lt;strong&gt;manage infrastructure, debug issues&lt;/strong&gt;, and apply best practices, without diving into advanced topics like IoT or advanced ML pipelines. It sticks to the essentials: compute, storage, security, and high availability. It may not focus on GenAI, but it’s still a valuable skill set.&lt;/p&gt;

&lt;p&gt;You may still encounter ML-related scenarios in the questions, simply because that’s the current reality. Yet, the exam focuses on infrastructure, not ML algorithms or pandas code blocks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scheduling Proctoring: What to Expect
&lt;/h2&gt;

&lt;p&gt;Scheduling the exam in Poland was simple and affordable. One thing I like about Google exams is that you book a specific &lt;strong&gt;time slot&lt;/strong&gt;, not a generic voucher. That suits my approach; by the time I schedule, I’m ready. This is a personal preference, of course. Some people prefer the flexibility of scheduling after payment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro TIP&lt;/strong&gt;: Pay close attention to &lt;strong&gt;AM/PM&lt;/strong&gt;, especially if you’re aiming for a 12:00 slot. Google/Kryterion lets you switch between 12-hour and 24-hour formats, which you can use to double-check your time.&lt;/p&gt;

&lt;p&gt;Google sends multiple email reminders confirming your exam time and date.&lt;/p&gt;

&lt;p&gt;I opted to take the exam &lt;strong&gt;at home&lt;/strong&gt;, but test centers are also available. Prices were identical in my case, so I went with convenience.&lt;/p&gt;

&lt;p&gt;One advantage of test centers is that you won’t risk interruptions due to unstable internet or power issues. Also, test centers tend to be &lt;strong&gt;less strict&lt;/strong&gt; about minor behavior, like briefly looking away from the screen. &lt;em&gt;Likely to wipe away tears — Just kidding, it's not that hard!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Home-based proctoring, on the other hand, is more rigorous. Proctors might ask you to show your surroundings or end a session if they consider your actions suspicious. Reddit is filled with stories of such experiences, so it’s best to be cautious.&lt;/p&gt;

&lt;p&gt;If you choose to take the exam at home:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Prepare a &lt;strong&gt;clean, quiet, private room&lt;/strong&gt; where no one will interrupt you.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Before the exam, the proctor will ask you to show your &lt;strong&gt;room, desk, ID,&lt;/strong&gt; &lt;strong&gt;wrists&lt;/strong&gt;, and &lt;strong&gt;glasses&lt;/strong&gt; (if applicable). &lt;strong&gt;Watches&lt;/strong&gt;, &lt;strong&gt;smart glasses&lt;/strong&gt;, or &lt;strong&gt;headphones&lt;/strong&gt; are not allowed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Kryterion now supports &lt;strong&gt;showing the room using your phone&lt;/strong&gt;, which is 100% more convenient than using a laptop camera. You just scan a QR code, and then remove the phone after inspection.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My experience went smoothly: no issues or interventions, no technical problems. I used macOS, installed the testing software, and it worked perfectly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preparation Materials and Strategy
&lt;/h2&gt;

&lt;p&gt;The official &lt;a href="https://services.google.com/fh/files/misc/associate_cloud_engineer_exam_guide_english.pdf" rel="noopener noreferrer"&gt;exam guide&lt;/a&gt; accurately reflects the topics covered, so I used it as my primary resource. Carefully reading it helped me identify areas for improvement. I &lt;strong&gt;highly recommend&lt;/strong&gt; referring to it throughout your preparation.&lt;/p&gt;

&lt;p&gt;My main study platform was &lt;a href="https://www.skills.google/paths/11" rel="noopener noreferrer"&gt;Cloud Skills Boost&lt;/a&gt; due to the high quality of the lectures. These same lectures are likely available via Coursera as well. Cloud Skills Boost also includes &lt;strong&gt;hands-on labs&lt;/strong&gt;, which are &lt;strong&gt;super important&lt;/strong&gt;. Most labs give you a deep understanding of GCP services, how to operate/administer them, and how to answer tricky exam questions. They also teach best practices, which help you identify correct answers in scenario-based questions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TIP&lt;/strong&gt;: Many questions include several technically correct answers, but only one works in the real world. Practical experience helps you eliminate nonsense quickly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Important Topics
&lt;/h2&gt;

&lt;p&gt;While every topic matters, I found certain areas more prominent in the exam:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Billing, Projects, Organizations, and Folders&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Engineers in large companies often don't deal with these directly (especially billing) since dedicated teams handle them. And due to security restrictions, you can't really practice billing on platforms like Cloud Skills Boost. So, I highly recommend &lt;strong&gt;creating your own GCP projects&lt;/strong&gt; and exploring billing configs. You don't need to spin up resources; just work with folders, projects, and IAM policies. It's extremely valuable.&lt;br&gt;
Google provides a nice architecture diagram, so you can try building something similar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F11agdpqdgawugymu0r4k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F11agdpqdgawugymu0r4k.png" alt="Google architecture diagram" width="586" height="778"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Kubernetes (GKE)
&lt;/h2&gt;

&lt;p&gt;My background includes CKA and CKS certifications and deep Kubernetes experience, so this section was familiar. But the exam questions go beyond the basics. They no longer ask, “What is a Pod?” but focus more on &lt;strong&gt;debugging real-world issues, understanding GKE setups, high availability&lt;/strong&gt;, and &lt;strong&gt;security&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The Kubernetes course in the official learning path is a good start, but &lt;strong&gt;not enough on its own&lt;/strong&gt;. I suggest:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deploying more than just a basic Nginx pod. For example, you can build something like the image below. Make sure it works, then update the nginx deployment with a different version of Nginx and finally delete pods and see what will happen. Try to break and fix things. This is extremely valuable for the exam and for everyday work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgc0ajydg9onuiy63scyk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgc0ajydg9onuiy63scyk.png" alt="Kubernetes cluster" width="591" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Practicing debugging&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using &lt;strong&gt;Minikube&lt;/strong&gt; or &lt;a href="https://killercoda.com/" rel="noopener noreferrer"&gt;Killercoda&lt;/a&gt; for hands-on work. CKA labs in Killercoda is a good level, CKS probably too much&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cloud Run &amp;amp; Cloud Functions
&lt;/h2&gt;

&lt;p&gt;The official learning path didn't cover these extensively, but there are other dedicated courses on the platform.&lt;/p&gt;

&lt;p&gt;For additional preparation, I used the &lt;a href="https://www.linkedin.com/learning/google-cloud-associate-cloud-engineer-cert-prep/google-cloud-platform-associate-cloud-engineer-introduction?u=180332450" rel="noopener noreferrer"&gt;GCA Cloud Engineer Certification Prep course&lt;/a&gt; on LinkedIn Learning. It’s well-structured, comprehensive, and covers gaps in other resources. If you have access to it, it can serve as your main study resource.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;What’s great about GCP exams, even practical ones like ACE, is their focus on understanding &lt;strong&gt;concepts&lt;/strong&gt;, rather than memorizing UI details or CLI flags like AZ-104 (sorry, Microsoft). Some questions might seem like that at first, but if you read them carefully, you’ll realize they are testing your comprehension of how things work.&lt;/p&gt;

&lt;p&gt;This means your knowledge won’t become outdated with a UI redesign. Plus, the skills you develop can be easily &lt;strong&gt;transferred to other clouds&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The ACE exam is a solid benchmark, if you are comfortable with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Building scalable infrastructure&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging real issues&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Analyzing logs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Applying good security and high availability practices&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's a certification that rewards hands-on skills, and a worthwhile addition for anyone looking to prove their ability to &lt;strong&gt;solve real-world administrative tasks&lt;/strong&gt; in GCP.&lt;/p&gt;

&lt;p&gt;*This article was initially published on &lt;a href="https://www.dataart.team/articles/google-cloud-associate-cloud-engineer-certification-guide" rel="noopener noreferrer"&gt;DataArt Team blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>gcp</category>
      <category>certification</category>
      <category>career</category>
      <category>googlecloud</category>
    </item>
    <item>
      <title>From Idea to Prototype in 60 Minutes</title>
      <dc:creator>Nevena</dc:creator>
      <pubDate>Mon, 26 Jan 2026 11:36:09 +0000</pubDate>
      <link>https://forem.com/nevpetda/from-idea-to-prototype-in-60-minutes-3m29</link>
      <guid>https://forem.com/nevpetda/from-idea-to-prototype-in-60-minutes-3m29</guid>
      <description>&lt;p&gt;&lt;em&gt;How does an idea evolve into a working prototype? Delivery Manager Andrey Sadakov and Product Owner Viktoriya Zinovyeva walk through the process in a recorded webinar and the text below. It’s a practical, step-by-step path from initial concept to prototype. They explain how to develop an MVP, utilizing effective coding practices that enhance development speed, recommend prototyping tools, and introduce semantic annotation.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Prototyping Video Demo
&lt;/h2&gt;

&lt;p&gt;Watch the full webinar below or go through the article first.&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/Z8k1y_Qp7ww?start=1452"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;h2&gt;
  
  
  Why AI Prototyping
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Before AI-assisted development, execution carried most of the weight. Today, AI code generation has lowered that barrier.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AI helps us generate many ideas quickly, but human judgment still determines which directions are worth exploring.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AI speeds up development and improves quality, shifting the balance between ideation and execution; close to “implementation is nothing”.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Prototyping with AI streamlines discovery, requirements gathering, stakeholder alignment, and getting buy-in much faster. You can quickly build and show a prototype to evaluate potential early.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Product Idea
&lt;/h2&gt;

&lt;p&gt;Imagine an app that helps diagnose pain and improve posture by analyzing user photos. It all started with Viktoriya's knee pain. A simple problem led to an idea: a posture analysis app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Shaping the Idea&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The goal is to challenge the initial idea and generate alternatives using different perspectives.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Recommended Model&lt;/strong&gt;: Use a reasoning-focused model for best results&lt;/p&gt;

&lt;p&gt;Instruct the AI to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Stay neutral and support recommendations with reasoning, pros, and cons for each option.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ask about gaps or unclear points.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Present counterarguments when needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Provide the top three alternative strategies, including trade-offs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;List 5-7 questions to answer before moving forward.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Market Research&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This step identifies both supporting and opposing arguments for your chosen option, as well as the assumptions underlying them.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Recommended Model&lt;/strong&gt;: Deep research mode&lt;/p&gt;

&lt;p&gt;Include the results from step 1 for context. Then, instruct the LLM to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Offer multiple viewpoints, and flag uncertainty levels where relevant.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Collect the strongest available evidence for and against each point.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Identify the five most critical assumptions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the standard flow for market analysis: research competitors, look for signals from customer forums, social posts, and other customer insights. AI is suited to handle these exploratory tasks efficiently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Defining the Requirements&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The goal is to design a clear specification for the AI prototyping tool.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Use the results from step 2 as input to give the full context. Ask for a Product Requirements Document (PRD) tailored to your specific tool (for example, Loveable). Adjust the PRD as needed, including elements such as personas, user stories, and functional requirements.&lt;/p&gt;

&lt;p&gt;Specify the results format:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use clear, simple language.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cite pros and cons when suggesting alternatives.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Keep paragraphs short (under 4 lines).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use bulleted lists where they clarify structure.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How a Prototype Differs from an MVP
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Prototype&lt;/th&gt;
&lt;th&gt;MVP (Minimum Viable Product)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Purpose&lt;/td&gt;
&lt;td&gt;To visualize and test ideas quickly, often used for concept validation or stakeholder buy-in&lt;/td&gt;
&lt;td&gt;To validate a product in the market with real users and gather feedback&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Functionality&lt;/td&gt;
&lt;td&gt;Simulated or partial functionality; may not be fully operational&lt;/td&gt;
&lt;td&gt;Core, working functionality that delivers actual value to users&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Goal&lt;/td&gt;
&lt;td&gt;Demonstrate feasibility, design, or workflow&lt;/td&gt;
&lt;td&gt;Test market demand, usability, and product-market fit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testing&lt;/td&gt;
&lt;td&gt;Usability tests, concept validation, internal review&lt;/td&gt;
&lt;td&gt;Live testing with users, real-world data, and customer feedback&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Risk Mitigation&lt;/td&gt;
&lt;td&gt;Reduces design/technical risks early&lt;/td&gt;
&lt;td&gt;Reduces market and business risks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Iteration Speed&lt;/td&gt;
&lt;td&gt;Very fast, since it's not fully functional&lt;/td&gt;
&lt;td&gt;Slower than prototypes, but still faster than a full-scale product&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Outcome&lt;/td&gt;
&lt;td&gt;Helps decide whether to move forward with building an MVP&lt;/td&gt;
&lt;td&gt;Provides insights for scaling or pivoting to a better product version&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Technical Comparison: Prototype vs MVP
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Prototype&lt;/th&gt;
&lt;th&gt;MVP (Minimum Viable Product)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Code Quality&lt;/td&gt;
&lt;td&gt;Often quick and dirty, may use throwaway code, mockups, or scripts. Not built to scale or maintain.&lt;/td&gt;
&lt;td&gt;Production-grade (even if minimal). Uses maintainable code that can be extended later.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;Usually faked (e.g., mocked API responses, static JSON files, or stubs).&lt;/td&gt;
&lt;td&gt;Real backend services, even if basic—often with database, APIs, and authentication.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;May be static screens or interactive mockups with limited or no logic.&lt;/td&gt;
&lt;td&gt;Fully functional UI connected to backend, handling state and real interactions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployment&lt;/td&gt;
&lt;td&gt;Usually not deployed; runs locally, in a demo environment, or as design mockups.&lt;/td&gt;
&lt;td&gt;Deployed in production (cloud, app stores, or web), accessible by real users.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Longevity&lt;/td&gt;
&lt;td&gt;Disposable—meant to validate ideas before coding seriously.&lt;/td&gt;
&lt;td&gt;Foundation for future development—can evolve into the whole product.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code Quality&lt;/td&gt;
&lt;td&gt;Usually faked (e.g., mocked API responses, static JSON file, or stubs).&lt;/td&gt;
&lt;td&gt;Production-grade (even if minimal). Uses maintainable code that can be extended later.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Vibe Coding Best Practices
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Build iteratively&lt;/strong&gt;. Don’t try to generate an app from a single prompt. Start simple and build up in steps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Choose a standard tech stack&lt;/strong&gt;. LLMs can work with many frameworks, but JavaScript frameworks such as ReactJS, as well as Java or C#, are more reliable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Provide context&lt;/strong&gt;. Share relevant documentation, app functionality, business goals, and technical details. The more context the AI has, the better the results will be. Protocols like MCP help keep documentation up to date.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Set coding rules&lt;/strong&gt;. Coding standards vary by language (e.g., JavaScript, NodeJS). Add these rules to prompts to help the AI produce better code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use semantic annotation&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Semantic Annotation
&lt;/h2&gt;

&lt;p&gt;Just as we comment on code and update documentation for others, we use the same principle for AI. Create a readme.md file in markdown to explain your app’s business logic. Add clear comments in the code to describe its purpose, inputs, outputs, and side effects. You can also use XML to annotate the code. This helps AI understand the code's intent, not just how to run it. Use semantic markup to make this easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recommended Tools
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Loveable&lt;/strong&gt;: A platform for quickly turning concepts into web applications. Best for creating clickable prototypes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Replit&lt;/strong&gt;: An online IDE with AI features. Balances automation with developer control. Suitable for both speed and functionality.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Local Setup&lt;/strong&gt;: Use Cursor with the Caluse Sonnet model for a hands-on, developer-driven approach. Best for full-scale development.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What to Do Next
&lt;/h2&gt;

&lt;p&gt;With a clear structure and the right tools, anyone can create a prototype. Good documentation and small, well-defined steps make it easier to turn an initial idea into functional products quickly and easily. Start iterating and see where your ideas lead!&lt;/p&gt;

&lt;p&gt;*The article was initially published on &lt;a href="https://www.dataart.team/articles/how-to-build-a-prototype-in-an-hour" rel="noopener noreferrer"&gt;DataArt Team blog&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>ai</category>
      <category>vibecoding</category>
      <category>prototyping</category>
      <category>mvp</category>
    </item>
    <item>
      <title>AI Coding Assistants: Helpful or Harmful?</title>
      <dc:creator>Nevena</dc:creator>
      <pubDate>Mon, 19 Jan 2026 10:09:36 +0000</pubDate>
      <link>https://forem.com/nevpetda/ai-coding-assistants-helpful-or-harmful-1iol</link>
      <guid>https://forem.com/nevpetda/ai-coding-assistants-helpful-or-harmful-1iol</guid>
      <description>&lt;p&gt;&lt;em&gt;Denis Tsyplakov, Solutions Architect at &lt;a href="https://linkly.link/2a88W" rel="noopener noreferrer"&gt;DataArt&lt;/a&gt;, explores the less-discussed side of AI coding agents. While they can boost productivity, they also introduce risks that are easy to underestimate.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In a short experiment, Denis asked an AI code assistant to solve a simple task. The result was telling: without strong coding skills and a solid grasp of system architecture, AI-generated code can quickly become overcomplicated, inefficient, and challenging to maintain.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Current Situation
&lt;/h2&gt;

&lt;p&gt;People have mixed feelings about AI coding assistants. Some think they’re revolutionary, others don't trust them at all, and most engineers fall somewhere in between: cautious but curious.&lt;/p&gt;

&lt;p&gt;Success stories rarely help. Claims like “My 5-year-old built this in 15 minutes” are often dismissed as marketing exaggeration. This skepticism slows down adoption, but it also highlights an important point: both the benefits and the limits of these tools need a realistic understanding.&lt;/p&gt;

&lt;p&gt;Meanwhile, reputable vendors are forced to compete with hype-driven sellers, often leading to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Drop in quality.&lt;/strong&gt; Products ship with bugs or unstable features.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Development decisions driven by hype,&lt;/strong&gt; not user needs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Unpredictable roadmaps.&lt;/strong&gt; What works today may break tomorrow.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Experiment: How Deep Does AI Coding Go?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I ran a small experiment using three AI code assistants: GitHub Copilot, JetBrains Junie, and Windsurf.&lt;/p&gt;

&lt;p&gt;The task itself is simple. We use it in interviews to check candidates’ ability to elaborate on tech architecture. For a senior engineer, the correct approach usually takes about 3 to 5 seconds to give a solution. We’ve tested this repeatedly, and the result is always instant. (&lt;u&gt;&lt;strong&gt;We'll have to create another task for candidates after this article is published&lt;/strong&gt;&lt;/u&gt;.)&lt;/p&gt;

&lt;p&gt;Copilot-like tools are historically strong at algorithmic tasks. So, when you ask them to create an implementation of a simple class with well-defined and documented methods, you can expect a very good result. The problem starts when architectural decisions are required, i.e., on how exactly it should be implemented.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa1jlywnlf440n5wqceqg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa1jlywnlf440n5wqceqg.png" alt="Prompt for storing labels" width="800" height="874"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Junie: A Step-by-Step Breakdown
&lt;/h2&gt;

&lt;p&gt;Junie, GitHub Copilot, and Windsurf showed similar results. Here is a step-by-step breakdown for the Junie prompting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt 1:&lt;/strong&gt; Implement class logic&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm1fnyc1nzr9tpyoo4q2o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm1fnyc1nzr9tpyoo4q2o.png" alt="Prompt for implementing class logic" width="800" height="762"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The result would not pass a code review. The logic was unnecessarily complex for the given task, but it is generally acceptable. Let’s assume I don't have skills in Java tech architecture and accept this solution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt 2:&lt;/strong&gt; Make this thread-safe&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ofmgdkwhj282a9k5tvk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ofmgdkwhj282a9k5tvk.png" alt="Prompt for making it thread-safe" width="800" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The assistant produced a technically correct solution. Still, the task itself was trivial.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt 3:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Implement method &lt;code&gt;List&amp;lt;String&amp;gt; getAllLabelsSorted()&lt;/code&gt; that should return all labels sorted by proximity to point [0,0].&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fumh8o3glac9tbg8aafyj.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fumh8o3glac9tbg8aafyj.webp" alt="Prompt for implementing method" width="800" height="864"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is where things started to unravel. The code could be less wordy. As I mentioned, LLMs excel at algorithmic tasks, but not for a good reason. It unpacks a long into two ints and sorts them each time I use the method. At this point, I would expect it to use a TreeMap, simply because it stores all sorted entries and gives us &lt;strong&gt;O(log n)&lt;/strong&gt; complexity for both inserts and lookups.&lt;/p&gt;

&lt;p&gt;So I pushed further.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt 4:&lt;/strong&gt; I do not want to re-sort labels each time the method is called.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxvmw9ik1xk3fa5votrdm.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxvmw9ik1xk3fa5votrdm.webp" alt="Prompt to not re-sort labels each time" width="800" height="878"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;OMG!!! Cache!!! What could be worse!?&lt;/p&gt;

&lt;p&gt;From there, I tried multiple prompts, aiming for a canonical solution with a TreeMap-like structure and a record with a comparator (without mentioning TreeMap directly, let's assume I am not familiar with it).&lt;/p&gt;

&lt;p&gt;No luck. The more I asked, the hairier the solution became. I ended up with three screens of hardly readable code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The solution I was looking for is straightforward:&lt;/strong&gt; it uses specific classes, is thread-safe, and does not store excessive data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fguzbcvchh7819qzesp2m.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fguzbcvchh7819qzesp2m.webp" alt="Prompt using specific classes" width="800" height="975"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yes, this approach is opinionated. It has (log(n)) complexity. But this is what I was going to achieve. The problem is that I can get this code from AI only if I know at least 50% of the solution and can explain it in technical terms. If you start using an AI agent without a clear understanding of the desired result, the output becomes effectively random.&lt;/p&gt;

&lt;p&gt;Can AI agents be instructed to use the right technical architecture? You can instruct them to use records, for instance, but you cannot instruct common sense. You can create a &lt;strong&gt;project.rules.md&lt;/strong&gt; file that covers specific rules, but you cannot reuse it as a universal solution for each project.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Problem with AI-Assisted Code
&lt;/h2&gt;

&lt;p&gt;The biggest problem is supportability. The code might work, but its quality is often questionable. Code that’s hard to support is also hard to change. That’s a problem for production environments that need frequent updates.&lt;/p&gt;

&lt;p&gt;Some people expect that future tools will generate code from requirements alone, but that's still a long way off. For now, supportability is what matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Analysis Shows
&lt;/h2&gt;

&lt;p&gt;AI coding assistants can quickly turn your code into an unreadable mess if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Instructions are vague.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Results aren’t checked.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Prompts aren’t finetuned.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That doesn’t mean you shouldn’t use AI. It just means you need to review every line of generated code, which takes strong code-reading skills. The problem is that many developers lack experience with this.&lt;/p&gt;

&lt;p&gt;From our experiments, there’s a limit to how much faster AI-assisted coding can make you. Depending on the language and framework, it can be up to 10-20 times faster, but you still need to read and review the code.&lt;/p&gt;

&lt;p&gt;Code assistants work well with stable, traditional, and compliant code in languages with strong structure, such as Java, C#, and TypeScript. But when you use them with code that doesn’t have strong compilation or verification, things get messy. In other parts of the software development life cycle, like code review, the code often breaks.&lt;/p&gt;

&lt;p&gt;When you build software, you should know in advance what you are creating. You should also be familiar with current best practices (not Java 11, not Angular 12). And you should read the code. Otherwise, even with a super simple task, you will have non-supportable code very fast.&lt;/p&gt;

&lt;p&gt;In my opinion, assistants are already useful for writing code, but they are not ready to replace code review. That may change, but not anytime soon.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;Having all of these challenges in mind, here's what you should focus on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Start using AI assistants where it makes sense.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If not in your main project, experiment elsewhere to stay relevant.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Review your language specifications thoroughly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Improve technical architecture skills through practice.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Used thoughtfully, AI can speed you up. Used blindly, it will slow you down later.&lt;/p&gt;

&lt;p&gt;*The article was initially published on &lt;a href="https://www.dataart.team/articles/ai-coding-assistants-helpful-or-harmful" rel="noopener noreferrer"&gt;DataArt Team blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>coding</category>
      <category>programming</category>
      <category>developers</category>
    </item>
    <item>
      <title>The Best and Worst of IT in 2025: Highlights, Scandals, Innovations</title>
      <dc:creator>Nevena</dc:creator>
      <pubDate>Thu, 15 Jan 2026 14:57:20 +0000</pubDate>
      <link>https://forem.com/nevpetda/the-best-and-worst-of-it-in-2025-highlights-scandals-innovations-1fek</link>
      <guid>https://forem.com/nevpetda/the-best-and-worst-of-it-in-2025-highlights-scandals-innovations-1fek</guid>
      <description>&lt;p&gt;&lt;em&gt;As the new year begins, Andriy Silchuk, &lt;a href="https://linkly.link/2a88W" rel="noopener noreferrer"&gt;DataArt’s&lt;/a&gt; Head of R&amp;amp;D Center and Delivery Director, looks back on a turbulent 2025. From defining trends and high-profile scandals to breakthrough innovations and rare bright spots, he recaps what shaped the IT and hi-tech world—and shares his outlook for 2026.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ladies and gentlemen, we’re lucky once again to have made it to the end of the year, so let’s officially tally up the year-end results.&lt;/p&gt;

&lt;p&gt;As before, let’s follow a familiar route: we’ll briefly recall last year's forecasts, then look at the major trends, scandals, the good, and the bad that we all experienced in 2025. We’ll also examine the big names we lost this year, determine the heroes and villains, and recall 2025’s surprises. Then we’ll end the program with our 2026 forecasts.&lt;/p&gt;

&lt;p&gt;So, pour yourself your favorite drink – and let's go!&lt;/p&gt;

&lt;h2&gt;
  
  
  A Brief Look at Last Year’s Forecasts
&lt;/h2&gt;

&lt;p&gt;At the end of 2024, &lt;a href="https://www.dataart.team/articles/the-best-and-worst-of-it-in-2024" rel="noopener noreferrer"&gt;we predicted&lt;/a&gt; that we’d get real AI agents, turbulence in the US IT industry, changing requirements for engineers, "data as oil," and a growing lag between Europe and the United States in 2025.&lt;/p&gt;

&lt;p&gt;What we actually got:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI agents have truly made their way from being the subjects of presentations into full production: ChatGPT agents and a bunch of other tools are already walking around the sites themselves, pressing buttons, executing scripts, and the Linux Foundation is even launching an initiative based on agentic AI standards.&lt;/li&gt;
&lt;li&gt;Turbulence in the United States IT industry hasn’t gone anywhere: antitrust lawsuits against Google/Meta, content wars, regulation — it was all present again this year.&lt;/li&gt;
&lt;li&gt;The requirements for engineers have changed drastically: "I know how to work with AI tools" is now a basic required skill. Big Tech is introducing KPIs for using AI, and those who resist are told to look for a new job.&lt;/li&gt;
&lt;li&gt;Data and infrastructure are truly the "new oil." The problem is not even about data, but about servers, GPUs, memory, and energy — everything is becoming more expensive and scarce.&lt;/li&gt;
&lt;li&gt;Europe has cemented itself as the regulatory champion, with the EU AI Act, record DSA fines for X, etc. In the US, meanwhile, they’re more so debating how to regulate IT, rather than actually doing any regulating.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our predictions were right practically across the board. Not because we’re prophets, but because the trends were blatantly obvious.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four Most popular trends of 2025 (they’re all about AI)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Agency AI: From "chats" to real assistants&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;2025 was a turning point: the focus shifted from "generative AI" to agentic AI. ChatGPT agents and similar systems no longer just respond, but also perform tasks themselves—they open websites, monitor statuses, book, write, and edit documents. Businesses are churning out their own agents for support, sales, and back office, DevOps, and domain tasks, and at the same time, a whole zoo of multi-agent frameworks is growing. We've officially gone from "a chat who advises something" to "an assistant who does the job but still needs supervision."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. GEMINI, GPT, CLAUDE and others – a new level of "smartness"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Google has finally shown that it’s still alive and very strong, with its Gemini 2.x and 3 models, Nano Banana, and other tools, and deep integration into Search, Android, and Workspace. OpenAI rolled GPT-5/5.1 out of "thinking mode" and made it the default in ChatGPT, effectively dragging a bunch of niche tools under it. Anthropic with Claude 4.5 is seriously putting the pressure on its competitors in coding and reasoning. Meta continues to pump Llama in open source. For the user, it is no longer "one model is better than another", but a whole forest of ecosystems that fight to be your main "superstructure in work." The high level of competition is always in our favor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Data centers as new "capitols" with Heroes 3&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The capitol is an extremely necessary thing in Heroes III, but it costs a lot of money. It’s the same with data centers. The IEA and the European Commission predict that data centers already consume about 1.5% of all electricity on the planet, and could double this consumption by 2030, largely due to AI. Energy demand in the United States for data centers jumped 20% year over year, and AI servers are taking an increasing share of capacity. Big Tech is responding in its own style: it’s buying up solar/wind plants, it’s building gas and small nuclear projects, it’s turning old coal-fired power plants into data centers, and its signing contracts for building its own nuclear power plants. Nuclear power plants, Karl!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Regulations, courts, and "AI psychosis"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The EU AI Act has officially started, and DSA is starting to bite with real fines. In the United States, state attorneys general issue warnings to large AI companies about mental health risks. The first lawsuits have appeared where ChatGPT and other models appear in real tragedies — from suicides to murders, where AI allegedly added fuel to the paranoia. Regulation has traditionally lagged behind technology, but politicians and courts are already in play, and 2025 has clearly shown that "it's just a chat" no longer works as an excuse.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five most high-profile scandals of 2025
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. DeepSeek: China's "nightmare" for the market&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At the beginning of 2025, DeepSeek released its models with an embarrassingly low price and pretentious claims about "ridiculous training costs." The market panicked, NVIDIA shares sagged. Then it turns out that everything is not so simple as "cheap" training. The quality of "supermodels" from China took a hit, too. But the shock of just how one release can collapse half the market remains.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. X becomes DSA’s first major "patient"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The EU decided to demonstratively apply the Digital Services Act and issued X an estimated $140 million fine for manipulative blue ticking and refusal to provide data for research. This is the first major case DSA in action, and hardly the last. The signal is clear: playing "I do whatever I want" in Europe won’t work anymore, even if you really love freedom of speech in your own interpretation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. TikTok: Banned, then not banned, with an eternal "window for agreement"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The TikTok saga in the US was reminiscent of a soap opera. The law required that either TikTok sell itself to an American owner or leave the market. TikTok defiantly shut down its service in the United States before the deadline, the administration dragged out the time, and then Trump came. He extends the "window for agreements" several times (he’s the master of the “art of the deal,” let's not forget). As a result, bidding continues for a year, names of possible buyers are announced, but they never do get full control — formally everything has been signed, but in reality everyone just pretends to be very busy, and postpones the final steps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Google: Antitrust wars and the shadow of selling Chrome&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Google is simultaneously focused on several different fronts: dominance in advertising and search, abuse of its mobile platform, and the use of the web to train models. Against this background, there was even a lot of talk and rumors that the company could be forced to sell Chrome, and there was a long queue of those who wanted to buy it. Hyenas can sense blood from far away, as they say. The sale didn’t take place, but the very fact of discussing the sale of the #1 browser shows how tightly Google was squeezed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. OpenAI's exit from Microsoft's influence&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;OpenAI and Microsoft are officially "restarting" their partnership: Microsoft remains a large shareholder, but without total control. Azure's exclusivity is being diluted, and some OpenAI services are moving to other clouds. In the end, the companies declare friendship, but in fact they are preparing for a "civilized" departure: OpenAI wants to make decisions on its own and have freedom, while Microsoft wants the right to develop its own AI separately. At least, that's what they say. OpenAI gets certain advantages from separating, that's clear, but what Microsoft will get out of separation is still a question.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three most positive events of 2025
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. AI in Medicine: From promises to real-world treatments&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;2025 was the year when AI in medicine finally showed something more serious and applicable than just promises on paper. Results of clinical trials of AI-developed drugs against cardiovascular and oncological diseases are emerging, and Rentosertib for the treatment of idiopathic pulmonary fibrosis has demonstrated safety and benefits. Furthermore, AI approaches to early diagnosis of cancer and liver diseases are actively developing. This is not yet "AI cured cancer," but real steps in this direction are already being taken.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Quantum Computers: Less hype, more benefit&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After years of promises about how cool quantum technology can be, we are slowly but surely moving towards practical applications. New systems like Quantinuum, Helios, and Google Willow show progress in bug correction and stability. It's still expensive and niche, but it looks less and less like PR, and more and more like a long-term bet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Global IT demand comes to life&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;India's IT services exports grew by about 12.5% to $224 billion in fiscal year 2024-25 after several sluggish years. For the industry, this means a simple thing: enterprise money is again used not only for cost optimization, but also for new projects and digitalization. For Ukrainian outsourcing, this means not a direct contract, but a very positive indicator: customers are ready to buy again. If the money returns to India, then it will reach us. &lt;/p&gt;

&lt;h2&gt;
  
  
  Four worst IT news in 2025
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Massive declines in global services&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In October, there was a long-term crash in AWS us-east-1, which in turn “crashed" Slack, Atlassian, Snapchat, and a million more. In November and December there were two big Cloudflare failures, one of which knocked out up to 28% of the world's HTTP traffic. The conclusion is banal, but painful: the Internet is too dependent on several infrastructure players. The words "multi-region/multi-cloud" on presentation slides are not a guarantee of real sustainability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. AI-enhanced cyberattacks&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cybercriminals are awake too: tools like PromptLock are emerging, which use generative AI to automate phishing and more complex attacks. The year 2025 saw a series of major leaks and ransomware attacks on energy, logistics, and other critical systems. AI increases the productivity not only of developers, but also of all the "bad guys".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Giant data breaks&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Prosper Marketplace in the United States lost the data of 17.6 million people, and the South Korean company Coupang lost another 33.7 million accounts. In total, there are more than 50 million records with names, addresses, documents, and order histories. The reputation of fintech or e-commerce can now be lost in one bad year.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Mass layoffs in tech&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;According to TrueUp and other trackers, in 2025, almost 700 waves of layoffs in tech companies took the jobs of more than 200,000 people — an average of 600+ dismissals every day. The headlines are the same again: Amazon, Microsoft, Google, Intel, Meta, etc all laying off employees. Increasingly, companies are saying bluntly: we are cutting people to invest in AI and automation. So either we learn to work with AI, or AI will replace us, little by little. Don't forget this simple rule.&lt;/p&gt;

&lt;h2&gt;
  
  
  Six most interesting releases and announcements of 2025
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. ChatGPT Atlas and Comet — AI-browsers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;OpenAI launched ChatGPT Atlas — a Chromium browser with ChatGPT at its heart: sidebar, summarizing articles, comparing products, working with documentation directly in a browser window. Perplexity rolled out Comet — also on Chromium, but with a focus on a personal agent who does its own research, deletes unnecessary tabs, and rakes mail. These are no longer add-ons on top of Chrome, but a new class of products: "a browser as a shell for an AI agent."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. AGENTS.md — README for agents&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In August, AGENTS.md appeared — a simple file at the root of the repository that explains to AI agents how to live in a project. How to collect and test code, where the entry points are, and what the rules are. In just a few months, tens of thousands of repositories pick it up, GitHub adds guides, and the Linux Foundation with OpenAI/Anthropic formalizes it as part of the standard for agentic AI. Starting this year, documentation is divided into human-made (README.md) and agent-made (AGENTS.md) — and it looks like it’s here to stay.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Claude 4.5 is a "programming neighbor" for developers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Anthropic updated its entire lineup: Opus 4.5, Sonnet 4.5, Haiku 4.5. Opus seriously improves reasoning, long contexts, and tool/agent handling. Sonnet has become a workhorse at an adequate price. Haiku has become an ultra-fast, high-volume option. In reviews, Claude 4.5 is often cited as one of the best dev assistants for real-world projects, not just for template tasks or pet projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Gemini — Google shows it can do it all again&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Google rolled out Gemini 2.0 (Flash / Flash-Lite), then 2.5 Pro / Flash / Deep Think, and at the end of the year, Gemini 3 Pro. The models are getting faster, smarter, and are heavily tied to the Google ecosystem. The most important thing is total integration: Gemini lives in the search, Gmail, Docs, Android, and Google AI Studio. This is no longer an attempt to catch up with competitors, but a separate ecosystem that can really be used on its own. Many note that this is one of the best AI releases of the year.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Starlink Direct-to-Cell and Ukraine&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SpaceX launches commercial Starlink Direct-to-Cell: satellites work as base stations, SMS texts are sent from ordinary smartphones through space without special devices! And then Kyivstar becomes the first operator in Europe to launch D2C together with Starlink: first for SMS and basic messages, then they plan to add voice and mobile Internet. For Ukraine, this is not just another feature, but an important element of resilience during blackouts and shelling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Bonus: Sora and the first step to a "dead internet"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;OpenAI released Sora 2 for video generation and a separate application — a conditional "Instagram," purely for AI videos, called Sora. Feeds are clogged with synthetic video, people are delighted, and at the same time, many are wondering: if social networks begin to massively switch to generated content, how much "live" Internet will we have left? On my side, I can admit I myself sometimes get caught up in this content. And yes, sometimes I can't even distinguish it from real content.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five "most" interesting hardware inventions of 2025 — once again it’s all about the metal
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Most innovative device: the Meta Ray-Ban Display&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first AR computer to be really similar to a daily device, in the form of normal glasses. Meta AI's messages, navigation, translations, and replies are all right in sight. Special attention should be paid to the Neural Band, a bracelet that reads muscle impulses and allows you to control the interface with gestures. There are still plenty of questions about the product, but as far as a direction of innovation goes, it’s very interesting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Hobby of the Year – Logitech MX Master 4&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, it's "just a mouse," but the MX Master 4 with the new Haptic Sense Panel and Actions Ring was one of the most pleasant changes to the working day. Ergonomics, multi-device, and a bunch of custom shortcuts that really save time. As the owner of the previous version, I can honestly say: this is a device that’s difficult to pass up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Disappointment of the Year – iPhone 17 Pro&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On paper, there’s the A19 Pro, a new camera, Apple Intelligence, and marketing bull shit. In practice, there’s a controversial design, aluminum instead of titanium, and the main AI features arrived late to Europe and in a stripped-down form. If you’re looking for an Apple, then check out either the iPhone 17 Air, albeit with questions, but at least it’s something new, or the regular iPhone 17, which turned out to be much more successful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. An Interesting Niche Product – Oura Ring 4&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Although Oura Ring 4 was released last year, it received a cool ceramic version this year, and looks like the king of niche devices: tracking sleep, stress, and activity in the format of a beautiful piece of jewelry, not just another screen on your arm. Not for everyone, but for those who bother, wellness is a very nice gadget.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Garbage of the Year – Samsung Galaxy XR&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Formally, it’s the first Android XR device and flagship in cooperation with Samsung, Google and Qualcomm. In fact, it’s a rather expensive demo. Albeit lighter than Vision Pro, it’s not very ergonomic, with an external battery, damp software (very raw), unstable tracking, and a poor catalog of applications. Against this background, even the already-mentioned, not very successful Vision Pro looks cooler.&lt;/p&gt;

&lt;h2&gt;
  
  
  Big IT names we lost in 2025
&lt;/h2&gt;

&lt;p&gt;The traditional block where you want to press F and cry.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bill Atkinson&lt;/strong&gt; was a legendary Apple engineer, creator of MacPaint and HyperCard, and the man who shaped the look of early GUI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Steve Shirley&lt;/strong&gt; is a pioneer of outsourcing and remote work, the founder of Freelance Programmers, who built an outsourcing business long before it became mainstream.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Margaret Boden&lt;/strong&gt; is one of the founders of cognitive science and AI research, and the author of classic works on the interaction of artificial and human intelligence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;David Benaron&lt;/strong&gt; is a doctor and entrepreneur whose developments formed the basis for the sensors of modern fitness trackers and smartwatches.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Udo Kier&lt;/strong&gt; is an actor, but for us he is forever Yuri from Command &amp;amp; Conquer: Red Alert 2.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is only a small cross-section of the people whose work "lies quietly under the hood" of the things we use every day, and that we have lost this year.&lt;/p&gt;

&lt;p&gt;And separately — R.I.P. Skype, a piece of our everyday life, to which time still said "that’s it" and left.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other 2025 Highlights
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;IT Hero of 2025 — Jensen Huang, CEO of NVIDIA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Under his leadership, NVIDIA briefly touches the $5 trillion capitalization bar on October 29, becoming the most valuable company in the world. The demand for their chips is rewriting records, and NVIDIA itself has finally turned from a "company for gamers" into a monopolist of infrastructure for generative AI. The man in the black leather jacket became the face of the era – more than anyone else.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2025 IT Villain — Astronomer CEO Andy Byron&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We could easily give the statuette to one famous billionaire again, but this year the anti-hero award goes to Astronomer CEO Andy Byron. He became famous not for his products, but for his very loud personal story and the memes around it. Sometimes the villain of the year is not the one who breaks the market, but the one who coolly spoils his reputation because of an affair at a Coldplay concert. The story will go away, but the memes will stay with us forever.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IT anecdote of 2025&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On the one hand, there’s Ilya Sutskever and Mira Murati, who collected billions for a startup based on a "bare name," without a product. It's very cool, but I would believe in such a joke only in an anecdote.&lt;/p&gt;

&lt;p&gt;On the other hand, there’s a wave of madness around the new image generation model in GPT-4o: the Internet is turning into an anime carnival, Sam Altman complains that there’s not enough power, and users can’t stop. True surrealism.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IT Surprise of 2025 — Oracle and Media Triples&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Oracle suddenly becomes an AI cloud star: its shares soar more than 40% in a day after news of giant contracts and OpenAI connections, its capitalization approaches a trillion, and Larry Ellison overtakes Musk in the ranking of the richest people in the world by several hours.&lt;/p&gt;

&lt;p&gt;In parallel, Netflix, Paramount, and Warner Bros. Discovery play out a complex love triangle with purchase claims and political overtones. The content market is shrinking, and we are gradually approaching the world of "one app for all videos." Jobs willing, one day it will be so.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mobile 2025: Liquid glass and Epic vs Apple&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This year I decided to add such a nomination. Apple is importing a complete redesign of iOS in the style of liquid glass - beautiful, loud, uncomfortable in places, but definitely hype.&lt;/p&gt;

&lt;p&gt;And Epic is finally winning a small but important victory in the fight against Apple. It was definitely a pebble that, albeit a little, changed the issue of commissions in mobile stores. Not a revolution, but it is from such microcracks that large monopolies begin to gradually rethink their behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five predictions for 2026
&lt;/h2&gt;

&lt;p&gt;Alright, let's move on to the forecasts!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. AI agents will become the new daily software, and the hype will continue&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In 2026, the average engineer will have not one chat or tool, but several AI agents who will do the routine: walk through Jira/Confluence, rake mail, and write drafts. The item "experience in building and managing AI agents" will increasingly appear in vacancies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Energy will be the main limitation on the AI boom&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We’ll see the first cases when the construction of data centers is directly limited by access to energy and water. Investments in energy, especially nuclear energy, will become a part of Big Tech's AI strategy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Regulators will move from chaotic fines to a system of rules&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first real AI certification frameworks for medicine, finance, and education will appear in 2026. They will still be bureaucratic, but they won’t look like chaotic steps any longer. At the same time, we can expect high-profile court cases against AI platforms for damage to health, people’s wallets, or their reputations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Fake AI profiles and content will become commonplace&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What now looks like "strange Insta accounts" and individual cases will become a massive buzz in 2026. Generated faces, stories, news, bloggers, individual content will become the new normal. The question of the year will be "is there anything real here?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Internal AI platforms will become the standard for companies&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If in 2025 proprietary LLMs or internal AI platforms were a feature of a few, then in 2026 an internal AI platform with access to documents, code, and processes will become a new "corporate standard." Someone will buy ready-made solutions, someone will assemble it themselves, but "enterprise AI" will cease to be a pilot, and will become an obligatory part of the infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing 2025
&lt;/h2&gt;

&lt;p&gt;This year was difficult. At times it was extremely difficult. For many people it became the most difficult year in their entire career and life. But from the point of view of IT, this year turned out to be incredibly rich. AI became smarter, data centers became hungrier, regulators got angrier, Big Tech got fatter, and Ukrainian IT got even more inventive.&lt;/p&gt;

&lt;p&gt;*The article was initially published on &lt;a href="https://www.dataart.team/articles/it-industry-2025-highlights-scandals-innovations" rel="noopener noreferrer"&gt;DataArt Team blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>techtrends</category>
      <category>innovation</category>
      <category>hitech</category>
      <category>yearinreview</category>
    </item>
    <item>
      <title>Modern Java: Why Old Rules No Longer Apply</title>
      <dc:creator>Nevena</dc:creator>
      <pubDate>Tue, 23 Dec 2025 11:35:32 +0000</pubDate>
      <link>https://forem.com/nevpetda/modern-java-why-old-rules-no-longer-apply-1mbm</link>
      <guid>https://forem.com/nevpetda/modern-java-why-old-rules-no-longer-apply-1mbm</guid>
      <description>&lt;p&gt;&lt;em&gt;Is Java no longer relevant? Denis Tsyplakov, Solutions Architect at &lt;a href="https://linkly.link/2a88W" rel="noopener noreferrer"&gt;DataArt&lt;/a&gt;, doesn’t think so. Java's reputation issues stem less from the language itself and more from outdated practices. This article revisits long-standing Java dogmas, identifies shortcomings, and offers modern alternatives to improve our development workflows.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Note: Code review standards vary by company and project. Apply these ideas thoughtfully; abrupt changes to enterprise projects can disrupt teams.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setters and Getters
&lt;/h2&gt;

&lt;p&gt;One common complaint is that Java code gets cluttered with setters and getters. They were initially popularized in the 1990s due to the influence of The Gang of Four (GoF) Design Patterns, which promoted implicit behavior in classes. However, implicit behavior is now seen as bad practice: data and functions should be separate. Most times, setters and getters aren't required unless you're using specific libraries like JPA. &lt;/p&gt;

&lt;p&gt;Alternatives: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Class with Fields&lt;/strong&gt;: Suitable when transporting 3-5 fields between methods.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Records&lt;/strong&gt;: A standard solution for storing data in Java, creating immutable data classes equipped with hashCode, equal and getters. However, they enforce a "stateless state" paradigm, which is fine in 95% of cases. Unless you have a 10 MB+ data structure requiring modification of individual data class fields in real-time, then use a DTO. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced Future Solution&lt;/strong&gt;: Project Valhalla for lightweight data structures.
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  One Class, One File Rule
&lt;/h2&gt;

&lt;p&gt;The "one class per file" rule has been a golden standard since Java's early days. While this structure made sense when IDEs were less advanced, it's become less relevant today. Modern development environments offer robust search and navigation capabilities, allowing for more flexible file organization. &lt;/p&gt;

&lt;p&gt;Problems with the rule: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Decreased Readability&lt;/strong&gt;: Jumping between multiple files to follow a single logic flow.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Broken Nesting Logic&lt;/strong&gt;: Classes like DTOs or callbacks make sense only within the context of their parent class. However, the project structure does not show that relationship.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local Block Scope&lt;/strong&gt;: Exposing classes outside the method spoils the class structure. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Domain Leaks&lt;/strong&gt;: Moving non-sharable classes outside their natural context introduces fragility.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Alternatives: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Place dependent classes/interfaces within their parent class where they belong.
&lt;/li&gt;
&lt;li&gt;Group tightly coupled DTO records under a single parent class. For example, serialize the main class BookingDTO to JSON and put nested classes InvoiceDTO, ItemDTO, etc, inside BookingDTO. &lt;/li&gt;
&lt;li&gt;If you need a data structure inside the code block, declare the class and do not expose it. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In general, make sure your code does not make you jump between classes too often and does not make you scroll for too long. Your code will be easier to read if you have 20 files with 20 lines of code instead of 80 files with 5 lines.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
`public record DBDataInfo( 
    int documentsCount, 

    int documentsUnProcessedCount, 

    String dbSize, 

    int docProcessingErrors, 

    int archivedDocCount, 

    List&amp;lt;SourceInfo&amp;gt; sourceInfo 
) { 
    public record SourceInfo( 

        String name, 

        int raw, 

        int digest 

    ) {} 
} `
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Custom Exceptions
&lt;/h2&gt;

&lt;p&gt;The Java exception system is one of its strengths, and one of the reasons why I started using it over 20 years ago. The primary purpose of the exception mechanism is the ability to handle unique scenarios. In this paradigm, we usually have one exception for each scenario that can be compensated for.  &lt;/p&gt;

&lt;p&gt;However, in microservice architectures, compensation becomes less relevant and is often streamlined to the service level. It usually involves cognitive complexity that exceeds the average. For example, in a medium-sized system, you may compensate for 2-3 types and nothing more.  &lt;/p&gt;

&lt;p&gt;Java (and frameworks like Spring) offer many standard exception classes that cover 95% of cases, such as IllegalArgumentExceptions and IllegalState exceptions. Most often, developers are unaware of the standard exceptions and declare a class structure that's hardly digestible and can ruin your code.  &lt;/p&gt;

&lt;p&gt;Alternatives: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consider scenarios that can be compensated and stick with standard exceptions otherwise. &lt;/li&gt;
&lt;li&gt;Design an exception hierarchy around those cases. &lt;/li&gt;
&lt;li&gt;In a microservice architecture, 80% of sync call exception handling cases fall under two patterns: retry and circuit breaker.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Remember: Creating a new class can add some cognitive load. Think about how it might affect different situations. If you don't plan to use it, it might be best to skip it. &lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker( 

    name = "weather",  

    fallbackMethod = "offlineWeather" 

) 

public WeatherDto current(String city) { 

    return restTemplate.getForObject( 

        "https://api.example.com/weather?city={}",  

        WeatherDto.class,  

        city 

    ); 

} 

  

/**  

 * Fallback when circuit is OPEN or the call itself fails.  

 */ 

public WeatherDto offlineWeather(String city, Throwable ex) { 

    return new WeatherDto(city, "???", "service-unavailable (cached/default)"); 

} 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Mapping
&lt;/h2&gt;

&lt;p&gt;In a classic enterprise app structure, you map controller parameters to a DTO, which maps them to an entity. Then, the entity passes to a repository (DB or REST), and you receive another entity in exchange, return to the service, map it to a DTO, and return to the controller. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Real-life example&lt;/strong&gt;: In a microservice, we receive a 1MB+ flight search XML reply from NDC, map it to a data structure, extract the airline code, add it to the response header, and pass the reply along. But parsing the reply and serializing it takes several seconds (10+ seconds in the worst case). &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Read the reply as a byte stream, parse it with a NanoSAX parser, set the header, and return the bytes as the body. This would take less than 10 milliseconds.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;However, a more critical problem is creating mappings for hundreds of fields when your code only needs a dozen. This makes simple microservices hard to read and digest.  &lt;/p&gt;

&lt;p&gt;Alternatives: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Avoid Unnecessary Mapping&lt;/strong&gt;: If you only need a few fields from a JSON object with 100+ fields, read it as a JSONNode and extract fields to a clean DTO. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Declarative Transformers&lt;/strong&gt;: Wherever it’s applicable, use XSLT(c) for XML, use libs like JSLT, Jolt, JSONata-for-Java, etc. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimize Hierarchies&lt;/strong&gt;: If one is enough, avoid creating both entity and DTO layers. Just use a DTO, but track any data leakage.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Dependency Hell
&lt;/h2&gt;

&lt;p&gt;Java engineers like mapping data structures and frequently create system-name-dto.jar, using it as a library in all services. All incoming data is mapped to one of the library DTOs and serialized back to JSON/XML when sending HTTP with RESTTemplate/Feign. This approach creates problems such as decreased performance and changes in the library when the DTO library is used in 30 different services deployed to prod 24/7.  &lt;/p&gt;

&lt;p&gt;There is no universal solution to this, but you can try a few of these guidelines: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;If more than two services use a big DTO, you probably need to rethink the service design.
&lt;/li&gt;
&lt;li&gt;If you just pass through a big data structure, stick to that and don't mutate or inspect it. &lt;/li&gt;
&lt;li&gt;Make the mutated part a separate DTO if you need to mutate it. &lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Separation of Interface and Implementation
&lt;/h2&gt;

&lt;p&gt;Theoretically, it seems like a good idea. You define the interface of a service or class and then create an implementation. If you need more, you make more. This practice results in writing more code than needed.  &lt;/p&gt;

&lt;p&gt;The typical explanation for this was: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Enforce Class Contract&lt;/strong&gt;: Even though Java classes have public contract methods.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unit Testing and Mocking&lt;/strong&gt;: If your code needs to be changed to facilitate unit testing, you should probably rethink your test strategy. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prepare for Future Extension&lt;/strong&gt;: Do it when needed, not in advance. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple Implementations&lt;/strong&gt;: Nowadays, we usually don't have more than one implementation of an interface.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So, how to deal with it? Just don't do it, that's it. If you'd like to explore this topic in more detail, read this &lt;a href="https://www.baeldung.com/java-interface-single-implementation" rel="noopener noreferrer"&gt;article&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Reactive Code
&lt;/h2&gt;

&lt;p&gt;The main argument is that all reactive frameworks for Java are dead. There are several reasons for this:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Virtual Threads (Project Loom, GA in Java 21) make the classic "one-thread-per-request" model memory-right and massively scalable, eliminating the core performance reason for adopting reactive I/O. &lt;/li&gt;
&lt;li&gt;Structured Concurrency and scoped values give you simple, imperative flow control and tracing without the cognitive load of reactive streams, but with equal or better throughput.
&lt;/li&gt;
&lt;li&gt;Mainstream HTTP Frameworks: Spring MVC, JAX-RS/Jakarta REST, Micronaut HTTP, Quarkus RESTEasy run unchanged on virtual threads and now match WebFlux/Vert.x-style stacks in latency and QPS, but with cleaner code and easier debugging. &lt;/li&gt;
&lt;li&gt;Blocking JDBC Sudden Scales: A single JVM can spawn hundreds of thousands of virtual threads that wait on the same java.sql calls. So, you no longer need reactive drivers (R2DBC, jasync-sql) just to keep database I/O from becoming a bottleneck.
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reactive Frameworks bring complexity:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Non-linear control flow &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Back-pressure plumbing &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tricky error handling: yet their performance edge has vanished &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Copilot-like tools better digest the sequential blocking flow of operations. Post Java 21, the cost/benefit equation flips in favor of simple blocking APIs. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2Spring and Beyond
&lt;/h2&gt;

&lt;p&gt;Another typical dogma is, "Java is not always Spring." While Spring is one of humanity's most advanced and remarkable frameworks, it still has some flaws; it requires you to write your application in a certain way and increases memory consumption.  &lt;/p&gt;

&lt;p&gt;There were some attempts to create something better. Quarkus, for example, was quite popular a few years ago, but is not a buzzword now. There is no comparative framework to replace Spring, except for some niche tasks.  &lt;/p&gt;

&lt;p&gt;So, the main points here are: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Java has frameworks for everything. &lt;/li&gt;
&lt;li&gt;Don't avoid Spring; use it if you can. &lt;/li&gt;
&lt;li&gt;If you have a specialized task, do your research: most likely, there is a Java framework/library for it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Enterprise-class app hierarchy
&lt;/h2&gt;

&lt;p&gt;The classic Java class hierarchy goes like this: Controller&amp;gt;DTO&amp;gt;Service&amp;gt;Entity&amp;gt;Repository &lt;/p&gt;

&lt;p&gt;The main goal of a standard class hierarchy is to make the class layout predictable. It's useful for applications with over 200,000 lines of code, enabling developers to quickly find a class with specific business logic. &lt;/p&gt;

&lt;p&gt;But if you have a small microservice, you don't need to follow the same pattern. You will probably have just 5 controllers with 10+ methods.  &lt;/p&gt;

&lt;p&gt;Ask yourself: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can a controller go directly to the repository? &lt;/li&gt;
&lt;li&gt;Do you need to remap an entity to a DTO? &lt;/li&gt;
&lt;li&gt;If a service needs one SQL query, can it be done directly inline?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Granularity matters, but oversplitting small services can create unnecessary bloat. Sometimes fewer layers mean clearer, more maintainable code.  &lt;/p&gt;

&lt;p&gt;Let's test the limits and see how far we can distance ourselves from the dogma.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@PostMapping(🌐“/api/booking”) 

public void saveBooking (@RequestBody BookingDTO bookingDTO) { 

record BookingReply( 

UUID uuid, 

String transactionId) { 

{ 

jdbcTpl.update(sql… 

update booking set transaction_id = :transactionId where uuid = :uuid 

…, Map.of( 

k1: "uuid", bookingDTO.uuid, 

k2: "transactionId", restTpl.postForObject( 

url: http://booking.api/booking , 

bookingDTO 

BookingReply.class).transactionId) 

); 

} 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This code is functional, with 17 LOC that shows all the logic end-to-end. Nonfunctional aspects, such as error handling and validations, are handled at the service level. Would this be fine as a part of a 200 LOC microservice? I'm not brave enough to try.  &lt;/p&gt;

&lt;p&gt;So, one controller that does the rest call and saves the results to the database in just a few lines of code. The reply is in line with everything. Is this legal? Probably not. If I see this in production code, I will probably ask to separate work with the database and HTTP into two different classes due to a mix of concerns.  &lt;/p&gt;

&lt;p&gt;This would be acceptable on other platforms and languages. Imagine writing 17 lines of code in one file or 5 times more lines for the same logic. The latter sounds better. But don't take this as advice; we were only testing the limits here.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Performance Myths
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;“Java is Slow”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Many people say Java is slow, but that's not really the case! This perception comes from needing to switch to other frameworks or languages to make things faster. If you check out some performance tests, you'll find that Java actually performs well. Indeed, it may not be as fast as C or Rust, but it still holds its own.  &lt;/p&gt;

&lt;p&gt;If you're looking to speed things up, consider using the GraalVM Compiler! It's simple to set up with Spring—just add one line to your configuration, and you'll see a boost in performance. You can test it by checking out these links: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://www.graalvm.org/" rel="noopener noreferrer"&gt;GraalVM official website&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.spring.io/spring-boot/reference/packaging/native-image/index.html" rel="noopener noreferrer"&gt;GraalVM Native Images documentation&lt;/a&gt; &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;“Java Slow Startup”&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;25 years ago, it might have taken a few seconds to start. But nowadays, numerous ways of speeding things up are essential when designing a microservice architecture in a Kubernetes cluster. A good solution for this is called the &lt;strong&gt;Coordinated Restore Checkpoint&lt;/strong&gt;. It allows you to capture the state of an already started container and deploy it into production. If you follow this link, you'll see how to speed up your application's startup 100 times.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Why Change How We Write Java
&lt;/h2&gt;

&lt;p&gt;There are several reasons for this: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Code Assistants&lt;/strong&gt;: Copilot and similar assistants work best with linear text. You can have one file with data objects; Copilot will know which to include. So, you should write your code to be more readable for assistants since they are our future.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Language Evolution&lt;/strong&gt; (Java and Spring have changed significantly): Design patterns from 20 years ago simply don't work anymore. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New Generation Pressure&lt;/strong&gt;: You should adapt and embrace new approaches. Others don't see a reason to follow old practices. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;To keep Java relevant, we must rethink old conventions. &lt;/p&gt;

&lt;p&gt;Action points: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stay updated with Java 11, 17, and 21. &lt;/li&gt;
&lt;li&gt;Study the latest Spring Framework documentation. &lt;/li&gt;
&lt;li&gt;Explore the broader Spring ecosystem: Spring Data JDBC, Spring Cloud, etc.
&lt;/li&gt;
&lt;li&gt;Question current best practices: Are they relevant today? &lt;/li&gt;
&lt;li&gt;Experiment with TypeScript or other languages to broaden your programming perspective.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Java isn’t outdated; it’s evolving. The real challenge is ensuring our coding habits evolve with it.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;*Originally published on &lt;a href="https://www.dataart.team/articles/modern-java-best-practices-tips-and-insights" rel="noopener noreferrer"&gt;DataArt Team blog&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>java</category>
      <category>modernjava</category>
      <category>programming</category>
      <category>softwaredevelopment</category>
    </item>
  </channel>
</rss>
