Learning SDD and have some questions

Learning SDD and have some questions

I got a subscription for $20/month for Claude Code, and I've also looked at OpenCode. The last company I worked was using GitHub CoPilot and was going to SDD ... and I got laid off right before that.

So, I have been using Claude Code to do multiple prompts for my SpringBoot Java app, and create all my boilder-plate code which I found to be a great help. I know how I write Hibernate Entities, Repositories, Business Service, and REST Controllers, etc. and all their tests. ClaudCode wrote code the way I did, and so I know what how the code works, and ONLY I checked the code into myGitHub.

So, I have been doing Agile/Scrum since 2007, so that is like 19 years. Every company that used it has used it quite differently than any other company. I understand in Agile, we only coded features for 2 weeks and had code, actually deployed to UAT so the PM and Client could see it and test it before it got into Production. In the best case, we got it right, and we can move on. In the case where the Client or PM got something wrong, or forgot something, we just go back and fix it. No problem it's a new feature in a new feature branch.

So, I have been watching a lot of YouTube videos, and scouring the internet for the best take on Spec Driven Development, and I have a lot of questions. The first is my understanding is that the developer (or someone) creates a bunch of .MD files for the "Spec" I haven't seen too many examples of this, but lets say we want to create an RESTFUL API login controller. We can create the .md file, and put in all the specifications. Then, I guess this then creates a "Plan" that can br reviewed, and I am guessing that "Plan" is written to a new .md file (Plan.md?). Up until this point, no code is written and no code is deployed? So, no one can actual test the code yet, right?

Ok, so the plan is fine, and then we go ahead and "Implement" the code? I am guessing AI writes this code, and deploys it so we can look at it and test it right? Does the developer review the code at this point although it is deployed?

What if the PM or Client forgets something, like they want the username to be an email? Or the password has to have a symbol? We add this to the Spec I imagine, and then it goes to update the Plan, and then we have to re-implement? Does it re-write ALL the code again for this feature? If this was a human doing this job, we would just add in the missing steps, and we wouldn't have to rewrite everything. And redoing ALL the code for an implement... doesn't that use more tokens?

What if we have a dozen features, and we have a dozen developers. Each has a new feature .. do we use one giant Spec.MD, or do we have multiple Specs, one per feature, that would mean one Plan.md per feature right? So, we have the Plan where we want it. When we go to implement, that is have AI create code, what if these two Specs write code that is similar? At what point does the developer go in and review this code.

I apologize for this giant method. I just got a new job, and they use Claude Code, and I don't know how they'll use it. I think they are still figuring it out. I remember the training we had learning Agile, and how painful it was. I think there will be a lot of growing pains for SDD as well. So, for anyone who has had more training on this, can you answer some of these questions or correct my misunderstanding of SDD. Thanks!

u/Huge_Road_9223 — 12 days ago

Have a new J1, but who knows for how long

So, I started off this new year (2026) with 3 J's. I knew my J3 contract was coming to and end, so I started looking on 1/1/2026 to replace J3, which I never found, and when the end of January came I was down to 2 J's. I didn't know that would end, it wasn't supposed, but at the end of the contract, which was mid-April the contract ended, and I was down fro J2's now down to J1. The search for a J3 had become a new J2. J1, a long-term contract ended with no severance, and so my search for a J2 now became a search for J1 again.

So, you could say I have been looking for a new role for almost 6 months from 1/1/2026 to mid-June. Or, you could say, it's only a little over a month from J1 ending to this new J1. YES! I had a final interview last week, I got an offer, and it was quite a happy weekend!!!! I started this week on a new role, but it doesn't pay great. Still 10K less than my last J1, but at least I can still pay my bills and mortgage anf have enough for food and medical benefits, but not much more. I guess I should be grateful for that, and I am ... believe me!

This new J1 is a contract role, the initial email was a 6+ month contract, but the offer letter said it was a 4+ month contract. I DO NOT, and I NEVER WILL trust a company ever again! And I should have learned that a lot longer ago than I did. I DO NOT think this company will extend me past 4 months. Once they get their use out of me, I may end up canned again.

So, you betcha ... I am still applying and always be interviewing ... I don't care if I get 3 more shit-paying contracts, I'll just collect those checks and bank that money. So, while I have one remote job, I can pass on the other hybrid/onsite roles at least for now. I had been sending my resume to those type of roles, but so far ... I haven't gotten many interviews from them, so at least I tried.

I am so happy to have a J1 now, and I've already spoken to a lot more recruiters today about new roles. I tell them I am STILL unemployed, that way I can start ASAP with no notice. So, I am having a drink to celebrate my new J1, and here's to hoping for a new J2 in a short while, followed by a J3, and a J4. It's always nice to stagger out these roles, if you can, to see how busy one role is before starting another.

Thanks all!

reddit.com
u/Huge_Road_9223 — 12 days ago

Quarkus Testing API and Database Rollbacks

So, I left another post here about how I am coming from a Spring/SpringBoot background: https://www.reddit.com/r/quarkus/comments/1u275br/coming_from_spring_boot_to_quarkus/

I have done some research, and I can understand the differences between SpringBoot and Quarkus, a simple Google Search gave me a bunch of links to look into .. so I get it, there are clearly reasons for both.

With my new Quarkus project, I wanted to be very clear that I did not include any of the quarkus spring di modules into this project. I wanted to build this app as if it was a new Quarkus native app.

Now I have been successful at the following, and it was done manually, not with any AI (because I am old school like that):

  1. The app runs and builds cleanly

  2. I had a working MySQL database in Docker, and I was able to port my Hibernate Entities to Quarkus with a little effort. We're only talking about a dozen tables.

  3. I was able to create the Panache repositories (not Active Record) and I was able to test these with QuarkusTest, Inject, and TestTransaction annotations. I can confirm I can CRUD to the database with those repositories.

  4. I bought over the business logic (Services) and replaces 'Service' and 'Component' annotations with 'ApplicationScope' annotations. Again, I was able to test ALL the services against CRUD functionality, and I am happy to say with TestTransaction, the databases was reset after every call.

  5. I brought over the REST API from my spring boot app, and was able to manually convert these to working code which compiles without issue.

Now #6, would be writing the API tests which I have researched and even been on the Quarkus site for testing applications and how to test API appropriately. And here is where it fell down.

In Spring/SpringBoot, by adding '@Transactional' annotation to the test class, every API call which executes against the real API code, executes the service logic, which then updates/inserts/delete data from the database is called ... a full integration test. When the test is over, the database is rolled back to the state it was, and then the next test executes.

From my research, when you execute an API, that calls the service logic which does an insert/update/delete to the database ... even with a '@TestTranaction' the database changes from the services to the repository calls ... NONE of this gets rolled back.

My research says that because of how the API test is in it's own thread, database changes DO NOT get rolled back, and instead, maybe using an '@AfterEach' to correct the data could be used. Or, use TestContainers to bring up a temp database, and then bring it down. I don't see how that is useful at all. Any tests should ALWAYS return the database to the state it was before it was run.

This is a big whole for me. So, I can test API's that only GET/Fetch data from the database, but I can't test POST that create new records, PUT to update whole records, or PATCH to update part of a record. These I cannot test out, unless I make sure I restore the data to what it was before-hand.

So, for experienced Claude users, I have researched on Google, but is there anything else that can be done which makes sense in the Quarkus world?

Thanks!

reddit.com
u/Huge_Road_9223 — 20 days ago

OE with Federal Government Jobs - NO!

So, I am currently unemployed right now and looking for a new J1 before I go onto J2, etc.

Well, I just had a recruiter talk to me about a role at the USPS, Yep, the United States Postal Service.

It was a good contract rate, contract to hire, and the hire salary would have been pretty good. However, I don't trust working for the U.S. government any more than I trust working for a private company. You can still be laid off at any time for any reason.

I am a U.S. Citizen, and this DOES require a Public Trust Clearance and there is no way I want to apply for that and let the U.S. Gov know that I have overemployed in the past ... No Freakin' Way. My OE in the past did NOT have any government jobs thankfully, just private companies.

If I had never OE'd in the past, this might work as a new good J1 ... but then that is it. After, this, do not try to OE at all.

As has been said before, and I want to re-iterate the point, do NOT go to work for the U.S. government and expect to OE.

I have lots of other irons in the fire and interviewing for other J1's that are all private companies. So, that's fine! Thanks!

reddit.com
u/Huge_Road_9223 — 25 days ago

Coming from Spring Boot to Quarkus

I interviewed at a job yesterday for a Java back REST API developer. Even though I did excellent in the first technical screen, and was told I was being moved on to the next round, I never heard back. I only recently found out that I was rejected because I didn't know Quarkus, but the recruiter and the tech interview knew this up front. They knew I was a SpringBoot user and I had never used Quarkus.

Anyway, I had to look into it. I understand that Quarkus should be really to understand if you already have experience with Spring Boot, and I have years of experience with Spring and Spring Boot!

So, I have IntelliJI IDEA, and I have an existing SpringBoot REST CRUD app. I created the basic Quarkus app and I pulled in a few things like the JDBC Driver for MySQL and the REST Jackson, and a few more dependencies in Maven.

The idea is to port my SpringBoot REST CRUD app to Quarkus. The database is running in Docker which is fine. So, this is where I am starting. Anyone want to give any tips on moving things over? Database access, any tips on the business logic?

Anyway, I hope some of you Quarkus users can help me ramp up, and maybe some of you are SpringBoot users also. Thanks!

reddit.com
u/Huge_Road_9223 — 26 days ago

Install Keycloak in Docker

Ok, so I have installed docker already on Windows 11. I have MySQL, Kafka, and Mongo running in their own containers. They are all on the same docker-network so they can see each other. I can access the MySQL database from outside of docker on my laptop because the exposed port is accessable.

Now I want to install Keycloak into my local Docker, and utilize the MySQL database that is already running in Docker. So, what I am wondering is how to install Keycloak into Docker, and then configuring Keycloak to use this MySQL database.

I guess when you install Keycloak into docker, that container isn't running yet. Then there is some configuration that has to be done to point Keycloak to that MySQL, and provided that the Keycloak is on the same docker-network, then we should be ok. Finally, run that Keycloak within that Docker container, and it's all good. Does that sound correct?

So, I am wondering do I need to setup the keycloak db schema first, or will running keycloak with that configuration automatically create it's schema and tables? I'm going to do more investigation on this. I know there is the Keycloak site itself, StackOverflow, and YT videos. I just want to see if there was anyone here who has already done this.

BTW ... I have used Auth0, Google, LinkedIn, GitHub, Okta, LDAP for authentication. I create SpringBoot apps on the backend, but the UI does the login and comes back with an Oauth2 JWT token which I use to access API's.

reddit.com
u/Huge_Road_9223 — 1 month ago

Should I learn TerraForm as a SpringBoot developer?

I've been coding for 35+ years, even before the dot-com days, and in the past 18 years I have been working with Spring and Spring Boot to created secured RESTful API's. I've also expanded into GraphQL and HTMX for personal projects. I've also dabbled with React+Vite and TypeScript to try to make a front-end, but mostly I am a back-end developer at heart.

Now that you know what I have been doing, it has been suggested that I learn TerraForm. I've already learned Docker, the basics anyway, and locally I have my local Docker with my back-end app in one container, Kafka in another container, and my DB in another container. I'm getting to know Kubernetes and Helm Charts, but that is a lot.

I remember when I started with Spring/Spring Boot around 2007 that no one ever asked me anything about the hardware or DevOps. Even when AWS, GCP, Azure (any Cloud), I was never expected to know about AWS at the beginning. I only started learning AWS for my personal projects, and I only do basic things with it because I don't want to spend a lot of money on it.

This gets into the real question ... as a back-end developer, who would absoluely prefer to stay out of DevOps entirely ... do I really need to learn TerraForm?

At this point in the shit-show job market, it is not unlikely to see the need for a "full-stack" developer who also knows CI/CD and knows AWS and knows DevOps. It seems these asshole companies and hiring managers want a one man IT Department under ONE salary.

I've been watching some videos on TerraForm, but I have no desire to become a DevOps person. I am happy working with SpringBoot/Java and building the logic for the back-end business app I am creating.

Any thoughts on this?

reddit.com
u/Huge_Road_9223 — 1 month ago

Claude Code CLAUDE.md for creating Hibernate Entities

So, I just want everyone to know that I am looking at YT videos, Stack Overflow and other Google Searches before I come here.

So, I am just starting with Claude as you know, though I do have many yoe with Java/SpringBoot. I find that Claude Code will help me with a lot of boilerplate stuff, and I'll do the rest myself for complex business logic.

My repo is here: https://github.com/tjholmes66/Claude_Phone_Book

I used IntelliJ to create a new Spring Boot project. I pulled in what I needed, and I was able to build this project and run it although there was nothing in it yet.

The CLAUDE.md file I created from another repo I ws looking at, and that is in my GH now. I modified the file, so it's pretty narrow from what I initially checked-in. I understand, I create this file in the root of my SpringBoot app, and it tells Claude what the rules are. So, I did this first, and this is the file I have in my IDE (intelliJ).

# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Project Overview

Spring Boot 4.0.6 phone book application using Java 21, MySQL, Thymeleaf + HTMX for the UI, GraphQL API, Spring Security, and Spring AI (Anthropic Claude integration).

- **Group ID / base package**: `org.tomholmes.opensource.phonebook`
- **Artifact ID**: must match the parent directory name (`Claude_Phone_Book`)
- **Database**: MySQL (`phonebook_db`, port 3306, user `operator`)

## Build & Run Commands

```bash
# Build (skip tests)
./mvnw clean package -DskipTests

# Run application
./mvnw spring-boot:run

# Run all tests
./mvnw test

# Run a single test class
./mvnw test -Dtest=MyServiceTest

# Run a single test method
./mvnw test -Dtest=MyServiceTest#myMethod
```

## Architecture

This is a **feature-oriented** Spring Boot service. Code is organized by feature, not by layer. Each feature owns its controller, service, repository, entity, and tests.

### Key layers

| Layer              | Location                               | Notes                                        |
|--------------------|----------------------------------------|----------------------------------------------|
| Domain entities    | `src/main/java/.../domain/`            | JPA entities only                            |
| Feature packages   | `src/main/java/.../feature/<name>/`    | Controller + Service + Repository per feature|
| Thymeleaf templates| `src/main/resources/templates/`        | Server-rendered HTML fragments with HTMX     |
| GraphQL schema     | `src/main/resources/graphql/`          | `.graphqls` schema files                     |

### UI pattern (Thymeleaf + HTMX)
Controllers return Thymeleaf template names or `th:fragment` partials swapped in by HTMX. Use `htmx-spring-boot-thymeleaf` (`HtmxRequest`, `HtmxResponse`) for HTMX-aware responses. Prefer partial fragment returns for HTMX requests over full-page reloads.

### GraphQL
Resolvers are annotated with `@QueryMapping`, `@MutationMapping`, or `@SubscriptionMapping`. Schema files live under `src/main/resources/graphql/`.

### Spring AI (Anthropic)
Configured via `spring-ai-starter-model-anthropic`. Inject `ChatClient` or `AnthropicChatModel` into services. Model and API key are set in `application.properties` (or environment variables — do not hardcode keys).

## Project Rules

- **No Lombok** — use plain Java records, constructors, and accessors.
- **Latest dependency versions** — always bump to latest stable on each change.
- **Semantic versioning** — bump the PATCH version in `pom.xml` on every change.
- **Tests required** — both positive and negative test cases for all new code.
- **Minimize generated code** — only what the feature needs.
- **Docker Compose** — maintain `docker-compose.yml` for MySQL and any other infrastructure.
- **README.md** — update on every version bump.

## Database Naming Conventions

- JPA entities: `PascalCase` with `Entity` suffix (e.g., `ContactEntity`, `PhoneNumberEntity`).
- Use `@Table(name = "...")` when the table name differs from the class name minus `Entity`.
- Do **not** use `@Entity(name = "...")` to rename the logical entity unless strictly necessary.
- Annotations from `jakarta.persistence.*`; fields use camelCase, columns use snake_case.
- Database config: `src/main/resources/application.properties`

So, in IntellIJ I ran Claude plugin which opens the terminal in intelliJ, and everything seemed to be fine. It seems in order to let CC know what exists, you run the /init command. Which I did, and it looks like it created a bunch of tokens. Now, I presume I do NOT need to do this all the time unless I make changes that it doesn't know about. My goal is to NOT let CC do everything, but some stuff, and then I will manually do the more complex business logic.

Now, I want to start small. From the research I already did. CC should know there is an application.propeties file in the /src/main/resources directory, and it can get access to the database from there.

So, I am presuming I just need to do some prompt such as:

>Read src/main/resources/application.properties to understand my database configuration. Based on those settings, create Hibernate/JPA entities for all tables, except the system tables. Include proper JPA mapping (@Entity, u/Table, u/Id, etc.), and create them in the com.tomholmes.opensource.domain package."

Then it asks me for a lot of permissions and constantly reminding me that I can create a PERMISSIONS.md file so that these do not have to get asked all the time.

My next step would then be the following:

  1. to do the CRUD business logic for Services

  2. create the controllers

  3. create unit tests for the Repository, business logic Services, and Controllers

  4. create the Swagger/OpenAPI documentation

Does this make sense? From a video I was watching, it was possible to combine steps 1 and 2 into one command, but again, I want to start slow.

I haven't seen a lot of examples on the internet yet on how to do a lot of this, and the YT videos aren't extensive either. so I feel like this is something new, but is starting to gain ground.

Anyway, if anyone can be of help, that would be much appreciated.

reddit.com
u/Huge_Road_9223 — 2 months ago

First, I have 35 yoe overall. I have been doing Java for a long time, since version 3. I have been using Spring and SpringBoot since 2007 (18 yoe) and creating secured RESTful services. It was mostly in STS (Spring Tool Suite) which as you know is Eclipse. I switched to IntelliJ about 2.5 years ago because of a contract role, and that is what they used.

This contract role I had, they use GitHub as a repo which is fine, and they were using testing CoPilot and asked people to comment on it, to see what the issues were, good and bad. Then we all know that Microsoft changed to pay by token, and that is the only plan they have. I believe this will increase the cost a lot, but I couldn't tell you how much!

Anyway, That position has come to an end after 2.5 years, and a new company I may be interviewing with is using Claude Code. They want someone who can use Claude Code, and review any code generated by it, which I can do. I obviously can code without the use of AI since I have been doing it my whole career.

I've looked at ONE YT video, which showed how to use IntelliJ to create an app, and it was very impressive. One of the things done in the video was to create entities/repositories based on a table in the database. Ok, that's great, but I was doing that with OSS JBoss Tools 10 years ago. I also saw how Claude Code generated both Swagger and OpenAI documentation for the API's. I think there are already other non-AI tools that can do that also. They also generated Postman tests for the API's as well, and I am sure there are other tools around that can do the same thing, or there could be.

So, when Claude Code did these things I saw the massive amount of tokens being generated. I posted in the /ClaudeCode and /ClaudeAI sub-reddits, and it seems that their users are die-hard fanatics of the tool, and do not accept any skepticism of Claude Code or AI in general. IMHO, they have really drunk the kool-aid, and think that if I don't learn it and use it, then I'll be left behind and unable to get a job. I think that's a little extreme.

What I DID find out was that if I create my own account on Claude Code, I have to pay! Since, I am unemployed, I didn't know if I did want to pay the $20/month for it. From other resources across the internet the $20/month is a joke, and the tokens allowed can be used in 4 hours of heavy coding. I also found out that the $20/month is WAY BETTER than paying per API token which would add up very quickly.

Yes, I am a skeptic of AI, IMHO (which means nothing), I think we are in an AI bubble. If Claude Code ALSO changes to pay by token ONLY, then it will drive the costs up. It has been speculated that ALL AI companies will eventually go this way, driving up costs.

But just because I am a skeptic of AI, I was also a skeptic of Hibernate, SpringBoot, Lombok, I never liked these to begin with but learned how to use them anyway. I have been learning new technologies for years, and have no problem learning how to use Claude Code.

So, the question to the folks here is: How many of you have used Claude Code or any API to help you code your Spring Boot apps, and was it within IntelliJ, or something else? I'm interested to hear your experiences with it, the good and the bad. Did you create new apps with it as a greenfield application? Did you use it to fix existing applications?

Thanks for putting up with the long post.

Thoughts?

reddit.com
u/Huge_Road_9223 — 2 months ago

A story as old as time. I had 3J's at the start of the year.

Lost J3 at the end of January, and was looking for a replace since then. At least I had 2J's, and I thought I was set. This was a contract role that was supposed to go 6 months, but only went 4, and this was the least paid of all jobs.

Lost J2 a short time ago, mid-April, so like 2 weeks ago. This was also a contract role which did go 6 months. The manager PROMISED me, that at the end of 6 months they would either get extended or brought on board as an FTE. Well, neither happened, and my contract was ended. Nothing I did wrong and my manager there said she could be a reference for me which I appreciate. Thankfully I had been sending out resumes to look for a new J3, and now I am down to 1J. J2 paid slightly more than J3.

J1 is also a contract role, and I was here for over 2 years. It was the highest paying job of the three. The contract is coming to and end, and they let me know that I won't be extended anymore. I was hoping to be extended for another year while I found another job to replace this one. But, it's ending, and no severance. The hope of them finding me another client is slim to none.

Again, thankfully my resume has already been getting out there for the last 3 months already. So, this next role won't be a new J2 or J3 anymore, but now it will be a new J1. I have been lucky to be getting a few interviews here and there. I am hoping I'll get multiple offers, and my goal is to keep applying until I get 3 or 4 jobs now.

You know, I started OE with 2J's back in 2023. In 2025, I was able to take on 3 AFTER I found out how easy J1 and J2 were. I found out I could handle 3J's at the end of 2025. Now it's 2026, and depending on how busy the roles are, will depend on whether I go for a J4, and I absolutely will go for J4 if J1,2,3 aren't busy. Wish me luck!

Viva la OE! ABA = Always be Applying! ABI = Always be Interviewing!

reddit.com
u/Huge_Road_9223 — 2 months ago