This Lucene port project of mine has been ongoing for quite some time. It begins, life intervenes, and then it resumes. I frequently found myself stuck at determining the appropriate level of abstraction between the Rust code and Java. However, I lacked the time to conduct numerous experiments with varying levels of abstraction. This is where Generative AI becomes an answer.
That said, I never appreciated “Vibe coding.” It felt like ad-hoc herding of cats. Recently, I discovered Spec Driven Development (SDD). With SDD, I can add additional guardrails that ensure greater consistency and compliance across prompts. I appreciate the prescriptive workflow introduced by tools like Github Spec Kit.
At work I really appreciate SDD since what SDD really does is bring the context typically in Jira, AHA, and other systems of record into the actual code. Systems of record change, get disconnected, or archived. One of the worst questions that can be escalated to one of my level 3 reports is “Why does this behavior work this way?” Now we are on a wild goose chase traversing Figma, Slack threads, and interviewing those involved in the code. With SDD I can just ask the code why a decision was made.
Now this could be considered cheating but I would argue writing code was never the job. Writing great software was the job and learning along the way.
So at work I use IBM Bob. I like Bob but decided not for this project. I also decided not to use Claude, Open AI, or any other model as a service provider. I wanted to run the entire model locally using an open source very clean model. While there are far better coding models out there I went with Granite. Majority of the coding models available right now have unverified data origin. I want to be able to model without an asterisks being added to my code. So strict, legally verified, and commercially safe training data is a priority.
Of course anyone who has used a small model before will know there are challenges. For starters you have a very small scope. You may be limited to porting a handful of classes at a time. Hallucinations are definitely a problem. The model also often forgets to use tools for writing files to disk.
The solution is double and triple check code manually and to think how your project will evolve over time. For instance initially I included guidance for JNI in the constitution. Suddenly I got JNI scope creep in all of my specs.
Considering all the overhead involved, it is worth asking if using Generative AI this way is the right thing to do? Is it really saving me time. The short answer is yes, but not as much as you might think, just enough. I equate it to having an Intern. Very motivated and knowledgable but you often need to slow them down to ensure everything is done right and share context they otherwise don’t have.
