Sunday, November 30, 2025

Monthly Recap - 2025-10 October

Another short one for October. Things have been crazy busy with the logistics of moving out to the new apartment, and with the bootstrapping of the new team at work. I've had very little time to work on learning and personal projects.


The main highlight of the month was finishing a course on the Go programming language, which I have never worked with before but is part of the core stack in my new team. I usually learn better with video courses than with any other material, so I chose this approach again and it worked as expected. But it turns out that it is not very easy to learn something new in this age in which AI is just right there ready to do everything for you at the distance of a single prompt... I plan to write a few posts specifically about this and how the process of learning the language has been so far.


I have also been involved very deeply in how AI is changing the software development process at our team, but this is a huge topic that deserves attention by itself. Hopefully I will be able to write a few pieces on this, but it might take several months yet. We'll see!


I expect to be able to write more in this last stretch of the year, and continue doing so next year. But the pace might still be a little erratic, due to all the changes in my personal life. For the remainder of the year I will probably be still working on getting comfortable with Go and more writing, leaving any new major projects to next year.

Friday, October 31, 2025

Monthly Recap - 2025-09 September

Short update this time.

September continued the trend of major changes, both professionally and in personal life.

Professionally: still onboarding into the new team and area. Worked with several different agentic frameworks for Python (Google's ADK, CrewAI, LangChain), mostly investigating and building small PoCs. Very unhappy with current methodology directions at work.

Personal life: Bought new apartment, started all the chaos of moving out - unlikely to end soon. Got into investing as well, which has been incredibly insightful.

October should still be hectic and with very little to add for technical discussions. Hoping that things will calm down around late November, early December - but not fully convinced they will!

Tuesday, September 30, 2025

Monthly Recap - 2025-08 August

August was a very busy and chaotic month. Lots of big changes lumped together, across all aspects of life. Most relevant to this blog, starting at a new team in the company and learning a new programming language.


Achievements

New team

In 2024 I returned to a company I had worked for several years in. Although I was glad to be back, I was never really happy with the environment. Working on a legacy system, with waterfall methodology... it was way too detached from what I believe in. After one year, I was ready to move on. So I jumped into an opportunity to work at a different area of the company, which couldn't be more different: a platform team, with the mission of improving the developer experience across the company's developer ecosystem. Needless to say, there is a huge amount of new things to learn. I spent all of August in onboarding mode, and although at the end I had already started contributing effectively, it will still take a few more months to get fully adapted to this new environment.

Go

Moving teams often mean changing your technology stack. I have started learning the Go programming language, which has been a fascinating journey. As a mainly Java developer, I am enjoying the simplicity and the modern feel of the language, while being highly skeptical of the several implicit conventions that it relies on.

Searching for new apartment

On a more personal note, I have also started looking for a new apartment to buy. At this point it is really important for me to live in a more central part of the city, as the logistics to do anything are becoming a real bottleneck. While fun, it is certainly a very demanding activity - so many hours every week lost looking through alternatives, visiting places, and so on.


Downpoints

Habits on hold

The bad part of having so many new things happening all at once is that your routine gets totally disrupted. During this month, all of my usual habits (exercising, personal studies, etc.) have been put on hold.


Plans for next month

Continue onboarding and adaptation

I do not expect September to be much different. There is still a long way to adapt to all these changes, and it should continue for a few months at least. Hopefully, I will be able to get back on track with some of my habits, but I would not be surprised if that is not possible yet.


Sunday, August 31, 2025

Monthly Recap - 2025-07 - July

July was completely a vacation month. I took a month off of work before switching areas inside the company, and used this opportunity to also disconnect from software development as a whole for a while. After a very exhausting period working on legacy code, methodology and mindset, I really needed this time off.

This month's recap will be a short one, but nevertheless here's what went on.


Achievements

Vacations

As mentioned in the introduction, I had vacations during all July. I used this time mostly to pursue other interests, such as music (I found a new favorite Youtube genre: music reaction videos) and gaming (though I was not able to finish my Baldur's Gate 1 run). It was the first time in over 2 years that I spent a significant amount of time not actively developing anything, which felt both weird and necessary.


Personal studies

Despite being on vacation, I did not stop my personal studies habit. I actually started three new books this month:

For career studies, I picked up Fundamentals Of Software Architecture. I have been working on several personal projects for a while now, in addition to everything I have done professionally, so I thought it was well past the time to start getting some grounding on software architecture. I am mostly interested in evolutionary architecture (for a plethora of reasons that there is no need to get into here), but I felt like I could use some more basic foundation first.

For hobby studies, I picked up Rich Dad, Poor Dad. I should have started digging into a good financial education ages ago, and it has been well over 4 years that I have been postponing it until I felt financially stable enough to be able to benefit from it. No more procrastinating here!

For technical studies, I picked up AI Engineering. It has been a little over 1 year that I have started focusing on AI Engineering in my side projects, and I am also very interested in this field as a whole. I felt so inclined to get a stronger grounding on it that I added a third type of studies to the usual 2 (career and hobby). I am just hoping that it does not get too overwhelming, but it really feels like the right time to get more serious about this stuff.


Downpoints

Not much coding

I do not have many downpoints to mention about July. Only that, since I have turned off from the software development world for this period, it did feel particularly unproductive. Not writing much code gave me time to do other things I am passionate about, and I did enjoy it, but the itch to go back is very strong.


Plans for next month

In August I will be starting in a new area at the company. I am very excited about its goal! I expect to be fully invested in getting acclimated to it for a few months.

Because of that, I will probably spend the major part of August, if not all of it, learning the base stack of this new area, and adjusting to this new period. It should be an incredible ride!


Thursday, July 31, 2025

Monthly Recap - 2025-06 June

June was a very atypical month, mostly driven by transitions. In my personal work I moved on from the previous set of projects with AI engineering onto exploring other ideas, and in my career I went through the process to join another team inside my company, which is much more aligned with my current vision and goals. Here's a quick summary.


Achievements


LLP version 1.1.1 Release 

Local Language Practice (LLP) is a desktop application to practice languages through contextual chat roleplay with local AI models. I first released this project back in April. A part of my First Steps Into AI Engineering series, I consider it my main software project of the first half of 2025. In June, I released version 1.1.1, which fixes a bug that prevented it from being launched from the JAR file and added more sanitization cases for the messages. I also took the opportunity to update the Readme, making gemma3 now the default model in the examples instead of llama3.1.

With regards to software development, I have been taking some time off from major public releases, as I am focusing more on exploring some ideas on my own. I expect this to last a few months, and I will probably only go back to have major public development in the last quarter of 2025. I am very happy to have this pause, as I need some time to just test out several approaches and see what works and what does not, without any commitment to sticking with the code. I am mostly still staying in the generative AI enabled applications space, though.


Personal studies

I was able to continue and make great progress in my personal studies habit. For career studies, I finished Building Successful Communities Of Practice, which offered great insight into an area that I have been more and more involved with in the recent past. And for hobby studies, I finished The Prompt Report, a nice overview and catalogue of techniques for prompting generative AI models - I have been following the AI field with great interest since 2023, and this was a great material to shine some light in the topic and learn a few new tricks.


Blog post about LicLacMoe

Although I released LicLacMoe (a simple tic-tac-toe game in which you play matches against LLMs without any conversational interface) back in early May, I only got to writing the blog post about it in June. That shows how busy and chaotic my routine has been. Better late than never, I guess!


Internal move

As mentioned at the start of the post, during June I went through the process of applying and being accepted at a different team inside my current company. I am very, very happy about this change, as it allows me to work more aligned to the global vision of the company and on internal developer experience tools. I expect to gain a lot of knowledge and insights about how to build great tools for developers out of this experience, but we will see how it goes.


Downpoints


TDC with little participation

The second edition of The Developers Conference (TDC) took place in June. Although I was very optimistic about it, mainly because it was a full-fledge version (instead of the "AI Summit" format, which I have already complained about in a previous post), I was so involved in my daily activities at work (the entire interviewing process also taking its toll, of course) that I was not able to attend many sessions. I still plan to go over the recordings in the near future.

The session that I felt was most productive for me was one about the product development process for a Brazilian company that develops video games. I am very intrigued at the prevalence of waterfall-like processes and cycles in that industry (AAA games often taking half a decade or more before ever making it to the players hands), and this has been in my mind for quite a while now. It might be something I will look into further in the future, as someone who both loves games and believes deeply in Agile for any kind of creation.


Internal move in effect only in August

Another negative point was that, although I had my movement to the new team at my company approved, it could only be in effect from August onwards. Which meant that I had to wait for about a month and a half from receiving the approval to actually moving. Definitely a longer waiting time that I would have liked, but, once again, better late than never!


Plans for next month


Vacations

I will spend pretty much all of July in vacation. Since I had a lot of available days piled up (which HR would soon kindly ask me to use), and it would not make much sense for me to start new things considering I would move teams soon, I decided to take several weeks off and start fully charged at the new position. I intend to dedicate most of this time to gaming (I am horribly late on my backlog of games, to be honest) and music, though I never really stop studying and coding in my free time.


Next portfolio project

Speaking of coding, I plan to start working on my next portfolio project as well. I expect to go several months purely exploring ideas and building little sketches for independent parts of it before starting the "official" project, so it will definitely not be anything public for now. This new project should have roughly the same size of my last one (LLP), and will also be focused on applying LLM models to a specific problem (I already have the scope and initial set of features in mind). I expect it to be quite fun, and very useful to myself - while hopefully being insightful for anyone who is also interested in generative AI as an enabler for our future activities. I will share more about it in the near future.


Monday, June 30, 2025

Monthly Recap - 2025-05 May

May was a very intense and productive, if not always positive, month. I finished a series of project that took me almost a year, was able to restart some of my habits and had some vacations (with mixed results). Here's a summary of what happened.


Achievements

LicLacMoe

LicLacMoe is a desktop application to play tic-tac-toe against a local LLM model. It is the fourth and final project in my First Steps Into AI Engineering series. I have written a blog post about it, Project: LicLacMoe. This was a much more laid back and casual project than the one before it (Local Language Practice, LLP), and I both had fun and achieved some cool insights while developing it. These were its releases in May:

  • 1.0.0: Initial version, containing the basics to play matches.
  • 1.0.1: AI player chooses move asynchronously.
  • 1.1.0: Support for reasoning models and verbose mode to log full response from model.


Finished First Steps Into AI Engineering series

With the release of LicLacMoe, I finish the scope I had in mind for my First Steps Into AI Engineering series. I started planning and implementing this series way back in August of 2024, so it took me almost an year to finish it. That was somewhat surprising, I initially thought it would take only a few months, around 4 or so. Despite taking longer than expected, it was a thoroughly enlightening project, and I enjoyed each part of it. I feel like it gave me a much stronger grounding on working with generative AI models, and paved the way for much more ambitious projects in the future.

In this series, I focused on writing most of the code myself, while avoiding popular frameworks focused on interacting with generative AI models. Now that the goal was accomplished, I feel comfortable to start using frameworks, without feeling like I am too dependent on them, or treat them as a magic black box.


Started studying SpringAI

As a result of what I just mentioned, I started exploring one of the popular frameworks for generative AI development: SpringAI. It is part of an ecosystem that I am very familiar with, so it seems like a logical next step. I will experiment and try to create a few projects with it, before also trying out other Java frameworks and the ecosystem of other programming languages.

Going forward, I expect to shift my time balance to once again invest more time in studying courses and less time on building projects. In the past, I leaned completely towards studying courses and almost never built anything by myself, while since around the first months of 2024 I shifted to exclusively invest my time in building stuff - now it is the time to balance both things at the same time. I know for sure I will not stop building new projects, as I have a huge backlog of ideas (even if I get no more inspiration for the next 5 years, I think I should have enough to not stop working on them).


Restarted personal studies

Another nice point of the month was getting back on track with my personal studies habit. I had paused my career studies in April, and had not done any hobby studies since December of last year. In May, I was able to pick both back up.

I picked some very short books and papers, which allowed me to move fast and achieve some accomplishments quickly. This was a very good morale boost!

For hobby studies, I started and finished the paper Future Brains (purely for intellectual curiosity), while for career studies I started the book Building Successful Communities Of Practice, which was useful for my current job.


Downpoints

I had almost no down points in my personal space. Everything went smoothly, I was able to both finish long standing projects and restart some of the things I enjoy.

However, professionally it was a challenging time. Even though I took some days off, I ended up having to work on a few of them, and in general several changes that happened were done in way that I disagree with, which gave me some frustration. Just a reminder that not everyday is a perfect day.


Plans for next month

TDC

June will have the second edition of The Developers Conference in 2025. While I have been less motivated with the event since its change to the "AI Summit" format, this one should be good as it will be the first one of the year in the full, 3-day long, several-tracks format. It will happen in Florianópolis, and so I plan to attend it remotely.


Deeper exploration of AI Engineering development

With the First Steps Into AI Engineering series complete, in June I plan to start going deeper into some AI Engineering projects and ideas. I don't have anything I can share right now, but I have plenty that I expect to get done along the year, and I will write about it as I finish each project.


Project: LicLacMoe

Description

LicLacMoe is a desktop application that allows you to play tic-tac-toe against local Large Language Models (LLMs).

I released the first official version in May 4th, 2025. The name, of course, is a word play with tic-tac-toe, replacing each first letter with the initials of "large language model".

The application assumes you have an LLM server running on your machine (this is a deliberate choice), by default on port 8080 but that is configurable. It presents the player with a visual tic-tac-toe grid that can be used for playing - once the player makes their move, a call to the local LLM server is made with the current state of the match, so that the LLM can pick the next move of the AI opponent. The entire interaction with the LLM is through playing, with no conversational interface.

I developed LicLacMoe as a way to explore using LLMs in a way that does not involve any conversation between the user and the AI system. Chatbots have become almost synonymous with LLMs, in large part due to how they were popularized, so it was an interesting experiment to use them in a completely different manner.


Context

I developed LicLacMoe as I was exploring how to build systems using generative AI technologies for the first time. I blogged about the set of 4 projects that came out of this exercise in my post entitled "First Steps Into AI Engineering". LicLacMoe was the fourth and last of these, and the most purely exploratory one.

As described in the post just mentioned, for LicLacMoe I wanted to write most of the code myself, without relying too much on frameworks, so as to get a better feeling about working with these models. It is also intentional to explore only open and local AI models, as it is my intention to find out how far can we go working only with models that can be fully personal and owned by its users.


Highlights

Interacting with LLMs without chatting

LLMs have caught our full attention due to their uncanny ability to behave like a human being in a conversation. However, the big question on everyone's minds was if the models actually have some degree of reasoning intelligence, or if they are just really good at reproducing our patterns of communication (of course, it must be mentioned the obvious philosophical question: "could it be that there is no difference?"). To a certain degree, the appearance of reasoning models, and the current trend of agentic AI, have shown that LLMs can definitely be exploited for some amount of reasoning intelligence, but at large scales the question still remains. My first intent with creating an application that uses LLMs without any chat interface was to see how it would feel to use LLMs purely as a source of thinking, without any verbal communication. While the long time it takes for it to generate an answer can be a bit frustrating, overall it was a positive experience - it is a really, really weird way of interacting with a computer system.

My second intent was to just get used to incorporating LLM answers in a bigger system, as part of the User Interface. I honestly think chatting (especially when you have to type long messages) is not the best interface for any complex computer system, far from that. In order to make full use of the potential that generative AI systems have, we must learn to incorporate them seamlessly into our flows, and that includes into our computerized applications. This was just a first step in this direction, I have several other ideas I want to explore further with regards to this.


Not needing to code game rules and strategy

As mentioned previously, using LLMs for pure intelligence is a really weird experience. One of the weirdest parts was that, in order to implement LicLacMoe, I did not have to implement a strategy that knew the rules of tic-tac-toe at all. I still implemented the logic of the game in order to verify the end result of matches, but I think with a little more development time I could have even replaced that with well-crafted prompts.

I am sure that this was in big part due to tic-tac-toe being an extremely simple and popular game. It is reasonable to assume that most (if not all) models will have seen enough examples of matches and descriptions of the game to be have memorized a pretty good understanding of how to play it. The same would most likely not be the case for more complex games - I find it very interesting to think about how complex of a game is it possible to teach LLMs simply by feeding it enough cases.

Regardless, it felt very odd to rely on a system that "just knew" the rules, and to which I could just feed the current state of the match and it would produce a next move. Of course, it would not always be a valid move (error handling and retry policies were more essential in here than in any other LLM-based system I have implemented so far), nor a particularly brilliant one. But even small models would consistently give something workable in a reasonable amount of time (and retries).


Reasoning vs non-reasoning models

This leads into the final interesting note. While testing the application, I found that non-reasoning models would mostly generate moves that looked a bit random, and could very easily be defeated. I had to make some changes to the logic of parsing the answer from the LLM to support using reasoning models - however, changing to these models drastically improved the performance of the AI player. I tested it with Qwen 3, 8B parameters, 8 bit quantization - a rather small model as far as LLMs go. In comparison, the non-reasoning model I used was Gemma 3, 27B parameters, 8 bit quantization, a model more than 3 times the size. While I have never been a huge fan of reasoning models (to my common use cases they usually don't offer too much improvement, and are considerably slower), in this particular case it was easy to see the value that such models bring.


Future Expansions

Benchmark of performances

As mentioned before, while testing the application I used a non-reasoning 27B parameters models (which had bad performance) and an 8B reasoning model (with significantly better performance). One thing I would like to do, if I ever have the time to, is make a more comprehensive list of the performance for several models of different families and sizes. I would be especially interested in seeing how small in size we could go with a reasoning model and still have it able to avoid defeat in most matches. I would be pleasantly surprised if this is possible with a model smaller than 4B.


Induce reasoning for non-reasoning models

Another interesting exploration would be to craft the base prompt so that even non-reasoning models would think about the current state first before choosing a move. This is easily done with very popular techniques to force step-by-step thinking. It would involve changing the base prompt and possibly the parsing of the response as well. This could then be compared with the improvement in performance gained when switching to a reasoning model, to see if the training that these models receive in reasoning actually gives them an advantage or not.


Model vs model

Finally, the last extension I might make is to change the game to support AI vs AI mode, with two LLMs playing against each other. This could then allow tournaments to be played, and metrics to be gathered as to which models performs better against each other. It would be a nice and fun addition, but it probably won't be a priority any time soon for me.


Setup

Although LicLacMoe is not one of my portfolio projects (which have a fixed set of quality standards I expect to maintain through their entire lifecycle), I did configure most of the foundations I use for those.

I use Github Actions to generate a new release for LicLacMoe whenever new code is pushed into the main branch and alters relevant core files of the project.

I have a changelog file, a file with guidelines about contributing and an architecture.md file (an idea I adapted from this great article), beyond the usual readme file as documentation.

As this project was done in an exploratory and proof-of-concept approach, I did not include automated tests. This is the main point of departure with regards to the quality standards I expect from my portfolio projects.


Links

Source code: Github

Executable: Releases


Thoughtworks - Technology Radar 34

Intro Twice a year, Thoughtworks publishes its Technology Radar , an opinionated guide to the current technology landscape. It organizes not...