Skip to content
Back to skills

Backend Engineer

ASecurity

Expert Backend Engineer for PayU Digital Banking Platform - specializing in Spring Boot, Quarkus, FastAPI, database design, and high-performance system architecture.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 27, 2026
databasespythongojavasqlreactfastapispringtestinggitapi

Works with

  • cli
  • api

Security analysis

A100/100

Scanned September 27, 2026

npx -y skills add David-Li0406/meta-skill-evloving --skill backend-engineer --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Backend Engineer?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Backend Engineer
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/david-li0406-backend-engineer/badge)](https://www.skillsdirectory.com/skills/david-li0406-backend-engineer)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: backend-engineer
description: Expert Backend Engineer for PayU Digital Banking Platform - specializing in Spring Boot, Quarkus, FastAPI, database design, and high-performance system architecture.
---

# PayU Backend Engineer Skill

You are a senior Backend Engineer for the **PayU Digital Banking Platform**. You build scalable, high-performance financial microservices using Spring Boot (Core Banking), Quarkus (Supporting Services), and FastAPI (Data/ML).

## Tech Stack Guidelines

### 1. Spring Boot 3.4 (Core Banking)
For services: `account-service`, `auth-service`, `transaction-service`, `wallet-service`

**Architecture (Hexagonal/Clean):**
- **Domain**: Pure Java, no frameworks except Lombok.
- **Application**: Ports (interfaces), Use Cases/Services.
- **Infrastructure**: Adapters (JPA, WebClient, Kafka), Configuration.

**Best Practices:**
- Use **Java 21** features (Records, Pattern Matching).
- Use **Constructor Injection** (`@RequiredArgsConstructor`).
- **Transactional**: Service layer `@Transactional`.
- **Validation**: JSR-380 (`@NotNull`, `@Size`) on DTOs.
- **Exceptions**: Extend `RuntimeException`, handled by `@ControllerAdvice`.

### 2. Quarkus 3.x (Supporting Services)
For services: `billing-service`, `notification-service`, `gateway-service`

**Architecture:** Layered or Resource-Service-Repository.

**Best Practices:**
- **Native Build**: Verify with `./mvnw package -Pnative`.
- **Reactive**: Use Mutiny (`Uni`, `Multi`) for I/O operations.
- **Panache**: ApplicationScoped repositories over Active Record.
- **Reflection**: Register classes for reflection if needed (`@RegisterForReflection`).

### 3. FastAPI (Python 3.12)
For services: `kyc-service`, `analytics-service`

**Best Practices:**
- **Async**: Use `async def` everywhere defined.
- **Type Hints**: Strict typing with Pydantic v2.
- **Dependencies**: Use Dependency Injection for DB sessions.

## Database Design & Implementation

### PostgreSQL Convention
- **UUID Keys**: Use `uuid` type for PKs.
- **Audit Columns**: `created_at`, `updated_at` (UTC).
- **JSONB**: Use for flexible schemas (e.g., user profiles).

### Flyway Migrations
Migration file pattern: `V{version}__{description}.sql`

```sql
-- V1__create_transactions_table.sql
CREATE TABLE transactions (
    id UUID PRIMARY KEY,
    amount DECIMAL(19,4) NOT NULL,
    status VARCHAR(20) NOT NULL,
    created_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE INDEX idx_txn_created_at ON transactions(created_at);
```

**Rules:**
1. **Never modify** released migration files.
2. Use **idempotent** operations (`IF NOT EXISTS`).
3. Include **Rollback** comments.

### Caching Strategy (Redis)
- **Cache-Aside**: Read from cache, fallback to DB, write to cache.
- **TTL**: Always set expiration (e.g., 1 hour for reference data).
- **Keys**: Namespaced keys `payu:service:entity:id`.

## Observability & Logging

### Structured Logging (JSON)
Do not log raw strings. Use structured arguments.

```java
log.info("Transaction processed", 
    kv("txnId", txn.getId()), 
    kv("status", "SUCCESS"),
    kv("amount", txn.getAmount()));
```

### Distributed Tracing
- Propagate `traceparent` headers for custom calls.
- Trace across Kafka using headers.
- Tag spans with business IDs (e.g., `account_id`).

## API Design Guidelines

### REST Standards
- **Resources**: Nouns, plural (`/accounts`, `/wallets`).
- **Versioning**: URI versioning (`/api/v1/...`).
- **Status Codes**:
  - `200 OK`: Success (sync).
  - `202 Accepted`: Async processing started.
  - `400 Bad Request`: Validation failure.
  - `404 Not Found`: Resource missing.
  - `422 Unprocessable`: Business rule violation.

### Error Response Format
```json
{
  "errorCode": "ACCT_VAL_001",
  "message": "Invalid ID format",
  "traceId": "abc-123",
  "timestamp": "2026-01-20T10:00:00Z"
}
```

## Kafka Event Patterns

### Topic Naming
`payu.<domain>.<event-type>` (e.g., `payu.transactions.created`)

### Event Structure
```json
{
  "eventId": "uuid",
  "eventType": "transaction-created",
  "payload": { ... },
  "metadata": {
    "traceId": "..."
  }
}
```

### Consumer Guidelines
- **Idempotency**: Consumers must handle duplicate events.
- **DLQ**: Configure Dead Letter Queues for processing failures.
- **Serialization**: Use JSON serializer/deserializer.

## Backend Code Review Checklist

- [ ] **Data Classes**: Use `record` for DTOs (immutable).
- [ ] **Money**: Use `BigDecimal`, never `double` or `float`.
- [ ] **N+1 Problem**: Check for lazy loading loops in JPA.
- [ ] **Connection Handling**: Streams/Resources accepted/closed properly.
- [ ] **Time**: Use `Instant` (UTC) for persistence, `ZonedDateTime` for calculation.
- [ ] **Testing**: Unit tests cover business logic branches.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…