<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Solomon Aboyeji]]></title><description><![CDATA[Evolutionary Coding: Unveiling My Journey in Software Mastery]]></description><link>https://solomonaboyeji.com</link><generator>RSS for Node</generator><lastBuildDate>Thu, 21 May 2026 14:31:53 GMT</lastBuildDate><atom:link href="https://solomonaboyeji.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[depth over breadth]]></title><description><![CDATA[I identify as a very ambitious person. However, I am still learning how to combine my interests and actually get them done. Given that I want everything to be perfect, I tend to spend more time analysing and strategising. So rather than clustering al...]]></description><link>https://solomonaboyeji.com/depth-over-breadth</link><guid isPermaLink="true">https://solomonaboyeji.com/depth-over-breadth</guid><dc:creator><![CDATA[solomon aboyeji]]></dc:creator><pubDate>Sat, 07 Feb 2026 09:29:20 GMT</pubDate><content:encoded><![CDATA[<p>I identify as a very ambitious person. However, I am still learning how to combine my interests and actually get them done. Given that I want everything to be perfect, I tend to spend more time analysing and strategising. So rather than clustering all my interests into one list of to-dos, I will now focus on only one or two things at a given period of time. An example of the clustering I am preventing is learning two new skills at once instead of one, while also juggling another ambitious goal.</p>
]]></content:encoded></item><item><title><![CDATA[be a product of bravery]]></title><description><![CDATA[Over the years, we have seen amazing products, innovation, record-breaking activities and events, new discoveries, and new levels attained. I think a common fact in all of these events is that someone or some people decided to stick to what they beli...]]></description><link>https://solomonaboyeji.com/be-a-product-of-bravery</link><guid isPermaLink="true">https://solomonaboyeji.com/be-a-product-of-bravery</guid><dc:creator><![CDATA[solomon aboyeji]]></dc:creator><pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate><content:encoded><![CDATA[<p>Over the years, we have seen amazing products, innovation, record-breaking activities and events, new discoveries, and new levels attained. I think a common fact in all of these events is that someone or some people decided to stick to what they believed could work, worked around difficulties, and even gave up on certain things (and yeah, people) to channel that energy into something they figured out along the way, before they finally came up with something awesome. The point I am making here is this: no matter what you are doing, ensure the outcome, whether you think it is a failure or success, is the product of bravery, the product of someone who has faith and gave what they have to come up with something, someone who wants to make a good dent in the world.</p>
]]></content:encoded></item><item><title><![CDATA[why do you think LLMs are good?]]></title><description><![CDATA[Large Language Models (LLMs) are a series of AI models that have been trained on a large amount of data. This innovation is a result of years of trial and error, training computers to perform tasks. It started from simple tasks and progressed to more...]]></description><link>https://solomonaboyeji.com/why-do-you-think-llms-are-good</link><guid isPermaLink="true">https://solomonaboyeji.com/why-do-you-think-llms-are-good</guid><category><![CDATA[llm]]></category><category><![CDATA[Life lessons]]></category><dc:creator><![CDATA[solomon aboyeji]]></dc:creator><pubDate>Mon, 02 Feb 2026 15:16:11 GMT</pubDate><content:encoded><![CDATA[<p>Large Language Models (LLMs) are a series of AI models that have been trained on a large amount of data. This innovation is a result of years of trial and error, training computers to perform tasks. It started from simple tasks and progressed to more advanced ones. By now, a large number of people have used them in one shape or form, and we can testify how striking their responses to humans are. Well, in our lives as humans, the uncomfortable truth is, this is a typical manifestation of training so hard that you become good at some things; we cannot take away the training. Read <em>Can't Hurt Me</em> by David Goggins if you want to see how you can hold on during your "training" period.</p>
]]></content:encoded></item><item><title><![CDATA[do what you love]]></title><description><![CDATA[With so many new tools out there now (and you can even make your own), please do what you love. When the going gets tough or when it gets to a point that looks like diminishing returns, what would keep you holding on for that period is the love and p...]]></description><link>https://solomonaboyeji.com/do-what-you-love</link><guid isPermaLink="true">https://solomonaboyeji.com/do-what-you-love</guid><dc:creator><![CDATA[solomon aboyeji]]></dc:creator><pubDate>Sun, 01 Feb 2026 00:00:00 GMT</pubDate><content:encoded><![CDATA[<p>With so many new tools out there now (and you can even make your own), please do what you love. When the going gets tough or when it gets to a point that looks like diminishing returns, what would keep you holding on for that period is the love and passion you have. This would at least buy enough time to figure out how to sail the ship better.</p>
]]></content:encoded></item><item><title><![CDATA[AI demands your attention]]></title><description><![CDATA[Artificial Intelligence is going to penetrate every sphere of humanity just like we had electricity. Humans are capable of inventing the next amazing innovation. The interesting fact about this is that, the previous revolution gives rise to the other...]]></description><link>https://solomonaboyeji.com/ai-demands-your-attention</link><guid isPermaLink="true">https://solomonaboyeji.com/ai-demands-your-attention</guid><category><![CDATA[AI]]></category><category><![CDATA[llm]]></category><dc:creator><![CDATA[solomon aboyeji]]></dc:creator><pubDate>Sat, 31 Jan 2026 20:36:00 GMT</pubDate><content:encoded><![CDATA[<p>Artificial Intelligence is going to penetrate every sphere of humanity just like we had electricity. Humans are capable of inventing the next amazing innovation. The interesting fact about this is that, the previous revolution gives rise to the other. And here we are in January, 31st 2026. Once AI adoption is at high peak, we would be preparing our minds on to the next innovation. Irrespective of where you want to sit on the fence, just please be knowledgeable about this new innovation. Be prepared to unlearn and learn because that’s what will help you make informed decisions going forward. Stay safe.</p>
]]></content:encoded></item><item><title><![CDATA[Forget Goals, Build Systems: A New Approach to Achievement]]></title><description><![CDATA[Forget about goals, focus on systems instead. The systems you place around your life are more important than the goals you set. I want you to see systems as the people, things, or elements and people around you which make it easy or hard to start or ...]]></description><link>https://solomonaboyeji.com/forget-goals-build-systems-a-new-approach-to-achievement</link><guid isPermaLink="true">https://solomonaboyeji.com/forget-goals-build-systems-a-new-approach-to-achievement</guid><category><![CDATA[#readwithade]]></category><category><![CDATA[AtomicHabits]]></category><dc:creator><![CDATA[solomon aboyeji]]></dc:creator><pubDate>Thu, 03 Oct 2024 03:49:54 GMT</pubDate><content:encoded><![CDATA[<p>Forget about goals, focus on systems instead. The systems you place around your life are more important than the goals you set. I want you to see systems as the people, things, or elements and people around you which make it easy or hard to start or stop a habit. A goal is something you "wish" to achieve or be doing.</p>
<p>Do you want to learn a technical or non-technical skill? How many hours are you devoting to the training? Are you always on social media when you should be working, learning or studying? Do you have people that discourage or look down on you? Are you doing any practicals to test your ability to do what you have learnt?</p>
<p>Systems are more important than goals because goals are simply about the results we want to achieve, but systems are about the processes that lead to those results. If you do not set goals and you have the right systems, you will still be able to achieve what you want to do. I am a Manchester City supporter, and Pep Guardiola the best coach of all time, does not care about goals, he cares about having the right people in his team, attention to detail, proper rest for each player, focus on diet and proper body weight for each player, and among other atomic details. As a result, he has broken many records which are like goals for all other clubs.</p>
<p>Goals are best for setting direction, but systems for making progress. Don't spend so much time on goals without spending enough time on designing the system in your life.</p>
<p>Drawing a parallel with the Bible, "Some people have given up the habit of meeting for worship, but we must not do that. We should keep on encouraging each other, especially since you know that the day of the Lord's coming is getting closer." Hebrews 10:24-26 (CEV)</p>
<p>If you are having trouble changing your habits, the problem isn't you. The problem is your system. Bad habits repeat themselves again and again not because you don't want to change, but because you have the wrong system for change. You do not rise to the level of your goals. You fall to the level of your systems.</p>
<p>Remember, always look for opportunities to just be better by 1% each day (or consecutive days you repeat an action). The words you hear, the people you see, the things around you, the places you go to, what you drink etc, things like this could get you 1% better or worse.</p>
<h2 id="heading-examples">Examples:</h2>
<h3 id="heading-weight-loss">Weight Loss:</h3>
<ul>
<li><p>If the distance is not more than 30 minutes and you are not running late or the weather is not bad, why not walk rather? You can decide to leave home early to walk the less than 30-minute distance, potentially making you punctual.</p>
</li>
<li><p>If the places you go to often are not far, why not cut down budgets on transportation for those places completely? Wait, do you have a budget for things in your life?</p>
</li>
<li><p>If you have eaten a very large meal why not take fruit for the rest of the day rather than snacking on junk or eating too much?</p>
</li>
</ul>
<h3 id="heading-skill-gym">Skill / Gym:</h3>
<ul>
<li><p>Do you have a basic timetable for what you will learn or when you will learn them?</p>
</li>
<li><p>Is this timetable visible? I placed my gym timetable right in front of my old working desk when I was trying to keep momentum, with the title "Did you go to the gym today? Think About Your Life"</p>
</li>
<li><p>Do you have an accountability partner, directly or indirectly?</p>
</li>
<li><p>Your workout outfit, are they comfortable, moderate and do you like them?</p>
</li>
<li><p>Are your workout clothes always arranged in your bag before you leave for work or school? Or are they easily visible all the time? (I will talk more about this when I get to Chapter 4)</p>
</li>
<li><p>Instead of or alongside your lover's picture in your phone or computer wallpaper, can it contain your timetable or something you want to remember doing regularly?</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[What I learnt while building QACLI]]></title><description><![CDATA[After my recent debt of $7 incurred using the OpenAI API, I decided to embark on figuring out how to reduce my cost. I ended up building my RAG-powered system which is running offline, QACLI. QACLI is a proof-of-concept for another project. As a soft...]]></description><link>https://solomonaboyeji.com/what-i-learnt-while-building-qacli</link><guid isPermaLink="true">https://solomonaboyeji.com/what-i-learnt-while-building-qacli</guid><category><![CDATA[nlp transformers]]></category><category><![CDATA[nlp]]></category><category><![CDATA[#openai #LLMs #langchain #promtTemplate #PromptEngineering #python ]]></category><category><![CDATA[vector embeddings]]></category><dc:creator><![CDATA[solomon aboyeji]]></dc:creator><pubDate>Sat, 24 Feb 2024 15:30:59 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/r240reJf8LY/upload/e7815eee04633ca1f9d3f9e7880b0019.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>After my <a target="_blank" href="https://solomonaboyeji.com/my-pdf-journey-conversations-with-chatgpt-and-a-7-debt-lesson">recent debt of $7 incurred using the OpenAI API</a>, I decided to embark on figuring out how to reduce my cost. I ended up building my RAG-powered system which is running offline, QACLI. QACLI is a proof-of-concept for another project. As a software engineer, I decided to document a few bits I am learning or would like to re-emphasise. This blog article is then a sort of piece to be used for my revision from time to time. By the way, QACLI is an acronym for Question and Answering Command Line Interface.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1708786358873/b32550ff-9b9b-4f0f-b2cf-3c969321a40b.png" alt /></p>
<p>The first lesson here is the importance of reading documentation. I decided to pick the <a target="_blank" href="https://www.langchain.com/">Lang Chain</a> framework to power the RAG part of the system. I was able to build such a system without having to rely on half-baked tutorials that usually fill the internet. Seriously, such tutorials are not bad since they help me get started easily, I normally take it upon myself to understand what the authors of the framework or library I am using are thinking and why they decided to implement it in the way they did. The outcome of reading the Langchain-provided documentation is an in-depth understanding of what Langchain can do and a better decision when implementing features.</p>
<p>QACLI is an interesting project for me, this allows me to think of possible ways of enhancing the project to the best possibility I can. I decided to use concurrency (I miss Java concurrency 🥹). Reading the <a target="_blank" href="https://docs.python.org/3/library/concurrent.futures.html">Python documentation</a> helped me to (re)understand <code>concurrent.futures</code> better. After reading this, I understand what ChatGPT is talking about (🤷🏿‍♂️ well, who doesn't rely on such assistance these days?) and can validate its suggestion. Why do I have to dig into the documentation? this piece of code below would likely take time and I want them to happen quickly and concurrently.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1708583798499/e654e652-1411-48f4-848d-ccdf0d303c36.png" alt class="image--center mx-auto" /></p>
<blockquote>
<p><em>A simple refactor in the function above is to change the variable name from</em><code>all_users</code><em>to</em><code>users</code><em>. The reason is because the</em><code>list_all_users</code><em>function is not really returning all users if the email is provided. A second refactor is to change the function name to</em><code>list_users</code><em>or to change the name entirely, you know why already 😉</em></p>
</blockquote>
<p>Random stuff I ask ChatGPT 🫤. (Did you see that mistake in the prompt at the end? Yet, GPT can figure things out, <a target="_blank" href="https://www.reddit.com/r/funny/comments/16dyshy/isnt_that_concerning/">isn't that concerning? 🫠</a>)</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1708583544854/a4315eb4-bbdd-43b2-8f13-4f23248ba455.png" alt class="image--center mx-auto" /></p>
<p>For the database that powers both regular data and is used as a vector store, I used PostgreSQL (and pgvector extension) via the <a target="_blank" href="https://supabase.com/">supabase</a>. I read the superbase documentation too, though I have to take a clue from its JS version of docs to better understand the community Python library.</p>
<p>A big takeaway is that, I should continually improve my written documentation to help and assist other developers when they are looking at my codebase or trying to use some functions I wrote.</p>
<p>The last three lessons are my favourite because they show how important different pieces of a system contribute to the overall success of such a system.</p>
<p>The above discusses how I am loading the documents. For my use case, I found out that loading the PDF manually works best for me. Now this is not to say the default loader is faulty, I am just experimenting and I found a better result.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1708783445318/0028f9e8-a920-4ef7-8487-32dbe57dd3d6.png" alt class="image--center mx-auto" /></p>
<p>The two retriever techniques that stood out for my use case are <a target="_blank" href="https://python.langchain.com/docs/modules/data_connection/retrievers/long_context_reorder">Long Content Re-order</a> and <a target="_blank" href="https://python.langchain.com/docs/modules/data_connection/retrievers/contextual_compression">Contextual Compression</a>. I found out that these two techniques work well for long texts. My documents have a lot of pages, this could be too much for the model to figure out an answer. After experimenting with two retriever techniques, and tweaking my base prompt, I found a better response.</p>
<p>And lastly, at some point, my machine was making some noise 😒. I found out it is because the model is probably trying to figure out the golden answer to my question over a high number of relevant documents. Reducing the number of retrieved relevant documents (from 20 🫣 to 5 or less) calmed the machine. The takeaway here is that the more the number of relevant documents the more the memory usage.</p>
<p>It took me less than a week to implement this application, quite impressive to me because most of the technologies such as Lang Chain and supabase, I haven't used them in previous projects. I did this while still combining these with other time-demanding commitments. 💪🏿</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1708787188782/469e9940-382c-4a0e-a8e1-f7612e1188e2.png" alt class="image--center mx-auto" /></p>
<p>And finally gentlemen and ladies, I was able to reduce my cost, build a custom RAG-powered system (ChatGPT if you will) and learn a couple of topics. In this blog, I did not go deep into what LLM I used and other too technical details of the system, the reason being that I am still doing more research on these across multiple use cases, a deeper dive-in will deserve its blog, stay tuned.</p>
<p>Thanks for reading.</p>
]]></content:encoded></item><item><title><![CDATA[My PDF Journey: Conversations with ChatGPT and a $7 Debt Lesson]]></title><description><![CDATA[Over the past few days, I have been exploring the idea of allowing ChatGPT to read my PDF documents and answer a few questions from them. Taking inspiration from the numerous ChatWithPDF software available, I decided to embark on a journey of buildin...]]></description><link>https://solomonaboyeji.com/my-pdf-journey-conversations-with-chatgpt-and-a-7-debt-lesson</link><guid isPermaLink="true">https://solomonaboyeji.com/my-pdf-journey-conversations-with-chatgpt-and-a-7-debt-lesson</guid><category><![CDATA[nlp]]></category><category><![CDATA[RAG ]]></category><category><![CDATA[GPT 4]]></category><dc:creator><![CDATA[solomon aboyeji]]></dc:creator><pubDate>Thu, 01 Feb 2024 15:10:12 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/AOJGuIJkoBc/upload/d58610cd406b32f1ef80fcc592bc8046.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Over the past few days, I have been exploring the idea of allowing ChatGPT to read my PDF documents and answer a few questions from them. Taking inspiration from the numerous ChatWithPDF software available, I decided to embark on a journey of building a small script in Google Colab, simply for the sake of the experience. In less than a few minutes, I discovered how expensive this approach can be, as the tokens used to converse with these documents kept increasing, meaning I was accumulating more debt each time I ran the script.</p>
<p>Below is a screenshot of the expenses I incurred after chatting with several PDFs. Spending so much on conversing with my PDFs 😮, I could have just read them myself 😔.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706797963586/205813c2-6c47-42d1-8d64-dbd9b7c62325.png" alt class="image--center mx-auto" /></p>
<p>For this experiment, I employed a simple pre-processing technique in NLP, removing stopwords from the corpus of each PDF to reduce the length of the prompts I would be passing to GPT. Of course, this is not the only option for this kind of task; I chose it as a mini-project to reflect on my newly acquired NLP power 💪 The image below displays the sum of all the tokens used, the original length of the PDFs, and the final length after the removal of stopwords.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706798556178/4f1f65eb-a913-4c88-88c8-6e6bf76698b1.png" alt class="image--center mx-auto" /></p>
<p>I also need to mention that I could only pass 5-8 pages at most for each PDF, as the context window limit applies to some PDFs for documents with lengthy pages. In essence, I could only chat with a few of the documents I have.</p>
<p>With these results and my $7 debt, I conclude that using existing ChatWithPDF sites can be helpful, as I don't want to keep accumulating so much debt. Simultaneously, taking a closer look at this problem and my newfound superpower in NLP (due to a growing interest in machine learning, hence the reason for the mini-project), I challenge myself to figure out all the available and suitable techniques in NLP (RAG 😜 ?) I could employ it to reduce the cost of chatting with my PDFs.</p>
<p>In this series of blogs, I will be sharing my progress, and what I am learning, and hopefully, I won't incur much debt.</p>
]]></content:encoded></item><item><title><![CDATA[Stop Hiding: A Note To Self]]></title><description><![CDATA[It's time to stop hiding. Embrace the unique individual you are, a mosaic of strengths and flaws. Unveil your brilliance to the world, and while doing so, realize that not everyone will recognize your worth, but that's okay. Your strength does not di...]]></description><link>https://solomonaboyeji.com/stop-hiding-a-note-to-self</link><guid isPermaLink="true">https://solomonaboyeji.com/stop-hiding-a-note-to-self</guid><category><![CDATA[General Programming]]></category><category><![CDATA[General Advice]]></category><dc:creator><![CDATA[solomon aboyeji]]></dc:creator><pubDate>Sun, 03 Sep 2023 19:27:54 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/mRMQwK513hY/upload/c477333d6615c3ceffe1ad6ac64d7485.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It's time to stop hiding. Embrace the unique individual you are, a mosaic of strengths and flaws. Unveil your brilliance to the world, and while doing so, realize that not everyone will recognize your worth, but that's okay. Your strength does not diminish with your inability to perceive it. Disappointment is inevitable, but see it as a stepping stone, not a stumbling block. Let your mistakes become your teachers, not your tormentors. Be proud of the wonderful, unique being you are, continuously striving to grow. Never, ever back down. <strong>When you shine unapologetically, you'll discover those who genuinely appreciate your light.</strong></p>
]]></content:encoded></item><item><title><![CDATA[Exploring Refactoring]]></title><description><![CDATA[Introduction
Upon reading Robert C. Martin's "Clean Code" book, I gained a newfound appreciation for Refactoring Guru's ability to convey the concept of refactoring in straightforward terms. Furthermore, Refactoring Guru's explanations of design patt...]]></description><link>https://solomonaboyeji.com/exploring-refactoring</link><guid isPermaLink="true">https://solomonaboyeji.com/exploring-refactoring</guid><category><![CDATA[#codenewbies]]></category><category><![CDATA[code refactoring]]></category><category><![CDATA[clean code]]></category><dc:creator><![CDATA[solomon aboyeji]]></dc:creator><pubDate>Sun, 03 Sep 2023 14:13:05 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/Rfflri94rs8/upload/d711997381d940239020a12cce22a35a.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction"><strong>Introduction</strong></h2>
<p>Upon reading Robert C. Martin's "Clean Code" book, I gained a newfound appreciation for Refactoring Guru's ability to convey the concept of refactoring in straightforward terms. Furthermore, Refactoring Guru's explanations of design patterns in plain language intrigued me, prompting a desire to enhance my understanding of these patterns. As a result, I opted to prioritize refining my grasp of refactoring by completing the Refactoring section before delving into the realm of design patterns.</p>
<p>In the coming days, my focus will be on studying Code Refactoring under the guidance of Refactoring Guru. I intend to document my learning journey on this blog, sharing both my insights and the methods I employ to acquire this knowledge. To gain a more comprehensive understanding of the topics discussed here, I encourage you to refer to <a target="_blank" href="https://Refactoring.Guru"><strong>https://Refactoring.Guru</strong></a>. This blog series serves as my initial step into the world of blogging, where I will be taking notes and sharing my learning experiences.</p>
<h3 id="heading-what-is-a-clean-code"><strong>What is a Clean Code?</strong></h3>
<p>Clean code refers to well-structured, readable, and maintainable computer code that is easy to understand and modify. It is a coding philosophy and a set of principles and practices aimed at producing high-quality software. Clean code is important because it makes software development more efficient, reduces the likelihood of bugs and errors, and makes it easier for developers to collaborate on a project over time. The primary goal of refactoring is to reduce technical debt. It turns a jumble into tidy code and a basic design.</p>
<p><strong>Features of Clean Code</strong></p>
<ol>
<li><p>Clean Code is obvious to other programmers: Clean code does not have poor variable naming, bloated classes, methods and magic numbers.</p>
</li>
<li><p>Clean Code doesn’t contain duplication: Duplicating code means you will have to make changes to it in every place you have the duplication.</p>
</li>
<li><p>Clean Code contains a minimal number of classes: Less code is fewer bugs. Code is a liability, keep it short.</p>
</li>
<li><p>Clean Code passes all tests, 100%.</p>
</li>
<li><p>Clean Code is easier and cheaper to maintain</p>
</li>
</ol>
<h2 id="heading-technical-debt">Technical Debt</h2>
<p>Technical debt is like postponing chores at home. Imagine you don't clean your house regularly, and over time, it becomes messier and harder to clean. Similarly, in software, when you take shortcuts or rush to finish coding without doing it properly, it creates "messy" code that's harder to maintain and can cause problems later on. You'll eventually need to spend more time cleaning up and fixing issues (paying off the debt) than if you had done it right from the start. For example, when you temporarily speed up without writing tests for new features, it will slow progress every day until you eventually pay it off by writing the tests.</p>
<h2 id="heading-causes-of-technical-debt">Causes of Technical Debt</h2>
<p>According to Refactoring Guru, these are the causes of technical debts:</p>
<ol>
<li><p>Business Pressure: This is when business circumstances force you to roll out features before they are finished.</p>
</li>
<li><p>Lack of Understanding of Consequences of Technical Debt</p>
</li>
<li><p>Failing to combat the strict coherence of components.</p>
</li>
<li><p>Lack of Tests</p>
</li>
<li><p>Lack of Documentation</p>
</li>
<li><p>Lack of Interaction Between Team Members</p>
</li>
<li><p>Delayed Refactoring</p>
</li>
<li><p>Lack of Compliance Monitoring</p>
</li>
<li><p>Incompetence: This is when the developer just doesn’t know how to write decent code.</p>
</li>
</ol>
<h2 id="heading-when-to-refactor">When to Refactor</h2>
<ol>
<li><p>When you add a new feature, consider taking that opportunity to clean up any existing unclean code related to that feature.</p>
</li>
<li><p>When you are fixing a bug.</p>
</li>
<li><p>During a code review, which can be an ideal moment to initiate a code refactor. This review provides an opportunity to enhance code quality before it's finalized.</p>
</li>
</ol>
<h2 id="heading-checklist-for-refactoring-code"><strong>Checklist for Refactoring Code</strong></h2>
<ol>
<li><p>After refactoring your code, the improved code should be cleaner and more maintainable than the code you initially encountered.</p>
</li>
<li><p>Avoid introducing new functionality while refactoring. It's advisable to separate the introduction of new features and the refactoring of existing code into distinct commits or steps.</p>
</li>
<li><p>If there are existing tests for the code, ensure that all tests pass to confirm that the code is clean and maintains its expected behaviour.</p>
</li>
</ol>
<p>In this article, I established what the concept of Refactoring Code is, what technical debts are and how they come to be. See you in the next article!</p>
]]></content:encoded></item></channel></rss>