Gonzalo Palavesino

Software engineer. Java, Spring Boot, Oracle SQL.

I find what’s wrong in code and write down why.

At NTT DATA I lead technical development on a digital-government platform: more than 10 Spring Boot microservices, Oracle data changes in production, the Java 17 and Spring Boot 3 migration, incident analysis and code reviews. I’m looking for AI training and evaluation work that asks for the same habits: read an answer closely, find what’s wrong, and explain it so it can be fixed.

At a glance

  • Software Engineer at NTT DATA since November 2021.
  • Mendoza, Argentina (UTC−3).
  • Spanish: native. English: upper-intermediate (B2), with advanced reading and writing.

A plausible AI answer, reviewed

A constructed example: I wrote it to show how I review code. It doesn’t come from a client or from an AI-training project.

Prompt Spring Boot 3 app. Leave /api/public/** open, require authentication everywhere else, and respond 401 instead of redirecting to a login page.

Show
import javax.servlet.http.HttpServletResponse;@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter {  @Override  protected void configure(HttpSecurity http) throws Exception {    http.authorizeRequests()        .antMatchers("/api/public/**").permitAll()        .anyRequest().authenticated()        .and()        .exceptionHandling()        .authenticationEntryPoint((req, res, e) ->            res.sendError(HttpServletResponse.SC_UNAUTHORIZED));  }}
import jakarta.servlet.http.HttpServletResponse;@Configuration@EnableWebSecuritypublic class SecurityConfig {  @Bean  SecurityFilterChain filterChain(HttpSecurity http) throws Exception {    http        .authorizeHttpRequests(auth -> auth            .requestMatchers("/api/public/**").permitAll()            .anyRequest().authenticated())        .exceptionHandling(ex -> ex            .authenticationEntryPoint((req, res, e) ->                res.sendError(HttpServletResponse.SC_UNAUTHORIZED)));    return http.build();  }}

Excerpt: package and Spring imports omitted.

Rubric

Does what the prompt asks
Yes
Yes
Compiles on Spring Boot 3
No, 6 errors, 3 root causes
Yes, no warnings
Uses current Spring Security APIs
No, 4 issues
Yes

Verdict Right intent, outdated API. It’s written in the Spring Security 5 style and doesn’t compile on Spring Boot 3.Same behavior on the current API: /api/public/** stays open, everything else needs authentication, and unauthenticated requests get a 401.

Both versions were compiled with javac -Xlint:all against Spring Boot 3.5.16’s libraries (Spring Security 6.5.11) to confirm this verdict. Run the compile check yourself.

Review notes

  1. javax.servlet doesn’t exist in Spring Boot 3

    Spring Boot 3 moved to Jakarta EE, so servlet classes live in jakarta.servlet. The import fails, and so does every use of HttpServletResponse.

    Source: Spring Boot 3.0 migration guide

  2. WebSecurityConfigurerAdapter was removed

    Spring Security 6 dropped the adapter, and the configure override goes with it. Security is now a SecurityFilterChain bean.

    Source: Spring blog, configuring security without the adapter

  3. authorizeRequests() and exceptionHandling() are marked for removal

    Both no-argument forms are deprecated for removal. The lambda versions, authorizeHttpRequests(…) and exceptionHandling(…), replace them and make the .and() chaining unnecessary.

    Source: Spring Security reference, authorize HTTP requests

  4. antMatchers is gone

    Removed in Spring Security 6. requestMatchers replaces it and takes the same path patterns.

    Source: Spring Security reference, authorize HTTP requests

Where my work meets AI training

AI training platforms describe the work as rating and ranking answers, writing grading rubrics, and writing prompts that make models fail. I haven’t worked on an AI training project yet. This is the part of my software work that transfers, and where it comes from.

  • Rate and rank code answers

    What it takes: Seeing when plausible code is wrong, and saying which answer is better and why.

    Closest experience: Code reviews as my team’s technical point of reference. Leading the Java 17 and Spring Boot 3 migration taught me which APIs changed, a common place for generated code to go wrong.

  • Write grading rubrics

    What it takes: Turning “good” into explicit checks that two reviewers would apply the same way.

    Closest experience: Security checkpoints and assessments for production releases. Test execution tracked across 31 business processes.

  • Write prompts that make models fail

    What it takes: Knowing a domain well enough to ask what a confident answer will get wrong.

    Closest experience: Six years of Java and SQL in production. I’m an active user of AI coding tools and helped bring Claude Code into my team’s workflow.

  • Explain errors and write corrections

    What it takes: Pinning down the cause and writing it up so someone else can act on it.

    Closest experience: Production incidents traced to code, data or configuration with Kibana and Dynatrace. Technical, architecture and security documentation for releases.

  • Review Spanish-language answers

    What it takes: Native-speaker judgment of grammar, tone and regional usage.

    Closest experience: Native Spanish speaker from Argentina. At NTT DATA, and before that at the Municipality of Mendoza, I’ve worked on Spanish-language public-sector software.

What I’m not claiming. Experience on AI training projects, or in machine-learning engineering. What I bring is six years of building production software and, since 2021, reviewing, verifying and documenting it at NTT DATA.

Coding domains. Java (8 to 21), Spring Boot, SQL and PL/SQL on Oracle, TypeScript with Angular.

Experience

A common thread. Every role so far has meant building software for administrative procedures: municipal processes, business workflows, and a city government’s case files.

Software EngineerNTT DATA Europe & LATAM

– present, Argentina

A digital case-file platform for a city government in Argentina, integrated with the government’s document-management and electronic case-file systems.

  • Lead technical development and maintenance of more than 10 Java 17 and Spring Boot 3 microservices with an Angular front end, deployed on OpenShift across DEV, HML, QA and PRD.
  • Led the migration from Java 11 to 17 and from Spring Boot 2 to 3 (javax to jakarta, Hibernate 6, Spring Security with SecurityFilterChain), and upgraded dependencies to meet the client’s security compliance requirements.
  • Planned the incremental front-end migration from Angular 14 to 19, including RxJS 7 and Angular Material.
  • Build REST and SOAP integrations with external government systems, including analysis of connectivity failures and proposals for retry mechanisms.
  • Design and run idempotent Oracle 19c scripts in SQL and PL/SQL for bulk loads and updates in production (MERGE, global temporary tables, verification before DML). One release processed more than 13,000 records.
  • Coordinated data remediation for the QA environment across 73 schema tables, and tracked test execution for 31 business processes.
  • Troubleshoot production incidents through logs and metrics in Kibana and Dynatrace, tracing root causes to code, data or configuration.
  • Write technical, architecture and security documentation for production releases, including security checkpoints and assessments, plus Postman collections of more than 200 requests for QA.
  • Manage GitLab repositories and CI/CD pipelines, and track work in Jira with Agile practices.
  • Act as the team’s technical point of reference: knowledge sharing, code reviews, and bringing AI tools (Claude Code) into our workflow.

Not public. Client code, data and documents are confidential. In an interview I can walk through approaches, not artifacts.

OpenShift. Red Hat’s Kubernetes platform. DEV, HML (homologación, the client’s acceptance environment), QA and PRD are the platform’s four environments.

Idempotent. A script that leaves the same result whether it runs once or twice, so a retry can’t duplicate or corrupt data.

Java DeveloperCumbreSoft

– , Mendoza, Argentina

  • Developed Java web applications with ZK Framework, and SQL queries on relational databases.
  • Automated administrative procedures and business-process workflows with Sayges and BonitaSoft (BPM).
  • Provided technical support to users and clients.

Java Development InternMunicipality of the City of Mendoza

– , Mendoza, Argentina

  • Took part in digitizing municipal processes with Sayges.
  • Developed features in Java with ZK Framework.

Selected work

Two pieces of professional work, described without client details, and one personal project.

Moving a platform to Java 17 and Spring Boot 3

Professional work at NTT DATA

Context. A digital case-file platform for a city government: more than 10 Spring Boot microservices and an Angular front end on OpenShift, integrated over REST and SOAP with the government’s document and case-file systems.

Problem. The services ran on Java 11 and Spring Boot 2, and the client’s security compliance requirements called for upgraded dependencies.

My part. I led the migration: Java 11 to 17, Spring Boot 2 to 3, the javax to jakarta namespace change, Hibernate 6, and Spring Security rewritten around SecurityFilterChain. I also planned the front end’s incremental path from Angular 14 to 19.

Decisions. The front-end plan is incremental rather than one jump: Angular is updated one major version at a time, which is how Angular’s own update tooling works.

Outcome. The services run on Java 17 and Spring Boot 3 with upgraded dependencies. The example at the top of this page shows the kind of breakage this migration deals with.

In short. Jakarta EE renamed the Java EE javax.* packages to jakarta.*, so every import of servlet, persistence or validation classes had to change.

Not public. No code or client documents can be shown.

Production data changes that are safe to run twice

Professional work at NTT DATA

Context. Some releases needed bulk loads and updates of production data in Oracle 19c.

My part. I design and run those scripts, in SQL and PL/SQL.

Decisions. Idempotent by construction: MERGE instead of blind inserts and updates, global temporary tables to stage the data, and verification queries before any DML runs. The aim is a script that can be re-run after an interruption without duplicating or corrupting rows.

Outcome. More than 13,000 records processed in a single release.

Global temporary table. An Oracle table whose rows are visible only to the session that inserted them, and disappear at commit or when the session ends, depending on how it’s defined. Oracle documentation.

Not public. Scripts and data belong to the client.

Project Duck: shipping an Android game

Personal project, 2026

Context. A personal project: an idle clicker game made with Godot Engine and published on Google Play under the BlackCorp name.

What shipped. Sign-in with Google or email, progress that follows the player to a new phone, an online leaderboard, raids on other players’ yards, ads and in-app purchases.

Beyond the code. A store release is a long list of someone else’s rules: a privacy policy, terms of service, an account-deletion page, a content rating, an app-ads.txt file for AdMob, and license credits for Godot and its third-party components. All of them are published.

Why it’s here. Annotation and evaluation work runs on detailed guidelines. Getting an app through a store’s policies is practice at following them to the letter.

Public. The store listing, and the game’s site with its policy pages and the credits for the engine, plugins, fonts and sounds made by others.

Not public. The game’s source code.

Tools and technologies

Grouped by where I’ve used them, so it’s clear which ones carry production weight.

In my current role at NTT DATA
  • Java 17
  • Spring Boot 3
  • Spring Security
  • Hibernate 6 and JPA
  • REST
  • SOAP
  • Oracle Database 19c
  • SQL
  • PL/SQL
  • Angular
  • TypeScript
  • RxJS
  • Angular Material
  • OpenShift
  • Kubernetes
  • GitLab CI/CD
  • Kibana
  • Dynatrace
  • Postman
  • Jira
  • Claude Code
Also in my toolkit
  • Java 8, 11 and 21
  • Spring Cloud Config
  • Maven
  • JUnit
  • Lombok
  • DBeaver
  • Docker
  • Tomcat
  • Git
  • Linux
  • JavaScript
  • Python
  • HTML
  • CSS
  • Bootstrap
  • TDD
  • Scrum
Earlier roles
  • ZK Framework
  • BonitaSoft (BPM)
  • Sayges
Personal projects
  • Godot Engine

Education and languages

  • Bachelor’s degree in Computer Science and Software DevelopmentUniversidad del Aconcagua. Not completed.
  • Informatics Engineering (Ingeniería en Informática)Universidad de Mendoza. Three years completed.
  • PC Repair, Maintenance and Networking TechnicianInstituto Escuelas Newton
  • High school diploma in Humanities and Social SciencesEscuela Secundaria Maestro Alfredo Bravo

Languages

Spanish
Native
English
Upper-intermediate (B2): advanced reading and writing, intermediate speaking

Contact

Email is the best way to reach me, in English or Spanish.

Mendoza, Argentina. UTC−3.

Open to remote AI training and evaluation projects, and to software engineering roles.