Beckoning on the Intern to Ship the Feature - My First Internship Report

Let's see where this short summarized report will take us, dear readers. Knowing that I have not written an article for a while, I think it would be in everyone's interest to provide a background for today's article - an internship report.

Background

I am a computer science student at Kibo School of Technology, who is approaching the end of an internship as obligated for the completion of our diploma year. It has been a challenging year, filled with obstacles that caused me to stumble but ultimately became stepping stones.

What a great honour it is to be a Kibo founder, paving the way for future innovators of Kibo and having Kibo pave my path to success! Finally, here is the Kibo evangelist, ready to share his amazing internship experience representing Kibo at the company where he interned.

Should we take a moment or two to allow the organization I interned with to have the floor?

Plugli - The Company Where I Interned

Plugli is a tech startup based in the UK that began last year and fully launched this year. They specialize in developing AI-powered WordPress plugins that help small or medium-sized businesses stay ahead of their digital game by building their online presence quickly and easily. From their website:

We believe that online growth should be accessible to everyone, regardless of their budget or technical skills. That’s why we’ve created a suite of tools that are not only affordable and effective but also user-friendly and easy to use.

Our team is comprised of digital marketing experts and tech gurus who are passionate about helping small businesses succeed. We’re constantly researching and developing new tools to stay ahead of the curve in digital marketing, and we’re committed to providing the best possible solutions for our customers.

Currently, there are two plugins, one of which has been launched and recently acquired over 1000 users. That was the project I was assigned to collaborate on. The plugin is named Linksy.

What does Linksy Solve?

A screenshot of Linksy's dashboard

Most businesses are finding it increasingly challenging to allocate valuable time and resources to the creation of links that meet the stringent criteria set by search engines, resulting in a pressing need for a more efficient and effective link-building strategy.

Linksy solves this problem by integrating AI to leverage natural language processing in generating semantic keywords. It suggests inline links and keyphrases to expedite and streamline the internal link-building process for sites and businesses.

Some Features of Linksy

Some of the features that Linksy provides include:

  1. Linksy Widget

    Linksy provides a widget integrated into the WordPress post-edit page that uses its NLP rating system to show suggestions to the users based on the contextual relationships between the generated keywords from their post content and target URLs for proper linking.

  2. Detailed Links Report
    The links report page streamlines post and link management by presenting all posts and their associated on-page links in one accessible location, with the flexibility to filter posts based on various metrics such as post type, category, word count, internal links, and external links.

  3. Inbound Linking

    Though the widget offers an outbound linking feature, this page simplifies the process of adding inbound links to users' sites. Additionally, there is a convenient quick-apply feature that enables you to effortlessly add the best-suggested links with just one click.

  4. Keywords Rating

    With Linksy, you can view the main keywords for all the posts on your website. It also utilizes NLP to assess whether the keywords align with the searcher's intention.

    Linksy Keywords Rating

The purpose of describing these features is to handle all the heavy lifting, allowing me to avoid explaining them again when I discuss my contributions to Linksy.

Let's take a break. Go, have a cup of water. Because I assure you, it will become more interesting from this point forward.

What Were My Contributions to Linksy?

Disclaimer: I had already been employed by Plugli for over a month before commencing my internship, which allowed me to start contributing right from the beginning of my internship. After discussing it with my boss, I decided to convert my probation period into an internship period.

Some of my contributions include:

One desired feature for Linksy was page builder support. WordPress offers a default editor for users to create content for their post types.

In WordPress, "post types" refer to different content formats or structures that you can use to organize and display your content on your website. By default, WordPress includes several post types, and you can also create custom post types to suit your specific content needs. Some examples of post types include posts, pages, attachments, revisions, etc.

Our competitors were already supporting these page builders (or so they say) and were using it as an advantage over us.

Already, we were supporting the Elementor page builder (on a basic level), which was the most popular page builder.

What does it mean to support a page builder?
WordPress offers an editor for creating posts, and it stores the content in a structured way in its database. However, some page builders store content differently, making it more complex to work with. To support these page builders, we need to create a solution that can effectively handle and adapt their unique data storage methods for our use.

At first, we planned to tackle it similarly as our competitors did. However, upon conducting extensive research, we discovered numerous flaws in the current solution they offered. Typically, they retrieve post content from the table where the default WordPress editor stores it, and they interact with the page builders' table primarily when necessitated for saving this information.

However, there were page builders that did not interact with the data of the WordPress editor in any way. They operated independently. This means that whenever these page builders are used, their solution becomes completely ineffective.

How would you like to update the content of the page builder when there is no content in the default editor that you primarily interact with?

With this research in hand, I initiated the development of algorithms tailored for efficient interaction with the data structures employed by various page builders. I adopted a phased approach, focusing on one page builder at a time and implementing only the essential components as required at each stage. I revisited and enhanced existing algorithms only when deemed necessary.

During this period, I acquired a valuable lesson in prioritization. I realized the importance of completing tasks before delving into concepts like abstraction and code optimization.

The journey was both demanding and enriching. Some days, I found myself engaged in lengthy Google Meet sessions with my boss, tapping into his extensive WordPress expertise. On other occasions, I collaborated closely with my supervisor, dedicating hours to pinpoint and resolve persistent bugs that had been causing me frustration for days.

Over time, Linksy evolved from initially supporting a single page builder to encompassing over ten different page builders, offering a notably higher level of quality compared to our competitors.

Support for More SEO Plugins

Linksy had already integrated support for three of the most widely used SEO plugins to gain access to their respective focus keyword functionalities. This inclusion was deemed essential as these SEO plugins enable users to identify and optimize their content for specific keywords, a critical aspect of effective search engine optimization (SEO) strategies.

Integrating support for the SEO plugins that were already in our repertoire proved to be relatively straightforward since they adhered to the conventional WordPress method of storing focus keywords, utilizing the postmeta table.

Nonetheless, my assignment involved the implementation of compatibility with additional prominent SEO plugins, including Squirrly SEO, a plugin held in high regard, and the All-in-One SEO plugins, both of which had not been integrated into our system at that point.

While incorporating support for these SEO plugins presented a less intricate challenge compared to the complexity of page builders, the true difficulty lay in architecting the code to ensure it could seamlessly accommodate forthcoming plugins with minimal additional code. This endeavour demanded considerable time and effort, often spanning several days. There were moments of humorous frustration when I found myself momentarily adrift, unable to recall the original motivation behind the task at hand – a situation that, in retrospect, brought a smile to my face.

Linksy Widget Redesign

If you wish to discern the disparities between the prior widget design and the updated one showcased in the aforementioned screenshots, you can make a comparison by referencing the screenshot displayed in the "Some Features of Linksy" section.

The new design significantly enhances the user experience by eliminating any initial user confusion about the widget's purpose and how to interact with it. Or what do you think?

Linksy Tooltip Component

I was also assigned the responsibility of creating a tooltip component to be utilized throughout the entire application. Despite Linksy's apparent alignment with WordPress, it was constructed using the following technologies:

  • Frontend:

    • JS framework: Vuejs

    • CSS framework: Bootstrap

  • Middle-end:

    • PHP
  • Backend:

    • Python/Django + MySQL

    • Nodejs + MongoDB

This marked my inaugural attempt at constructing a Vue.js component entirely from the ground up, considering that I was relatively new to Vue.js at the time.

I was later tasked with converting the component into a Vue directive to make it more versatile, and easily reusable across different parts of the application, and to maintain flexibility. This architectural change was a crucial step towards a more modular and streamlined codebase.


I could continue discussing the multitude of tasks I've been involved in, but time constraints prevent me from delving into further detail.

What Did I Learn?

A question I have been dying to answer! Below are some of the skills I acquired:

  1. Technical Adaptability

    I successfully adapted to the technologies I utilized for my tasks, such as PHP and Vue.js. Before joining Plugli, I held a negative perception of PHP and WordPress, as I mistakenly believed they catered to individuals seeking shortcuts. However, my perspective has since evolved. I no longer underestimate any technology and am capable of learning and adapting to new technologies, as long as they serve the purpose of addressing user needs.

    Ultimately, the focus should always be on problem-solving with these tools, irrespective of any ongoing technology debates.

  2. Problem-Solving

    "The primary objective for every developer should be the resolution of user, business, or global issues, irrespective of the specific tools and technologies employed for this purpose. Prioritizing the solution itself should take precedence over concerns related to scalability and other technical intricacies. It is essential to approach each problem with the mindset of a problem solver rather than solely as a programmer." — Victor Ohachor

    My experience in handling complex challenges, such as integrating page builders and SEO plugins, required that I devise creative solutions and overcome obstacles, indicating strong problem-solving skills.

    I encountered each new challenge with the trepidation of a novice, wrestling with self-doubt and the fear of failure, all while pushing my limits. However, I emerged from each experience as a more robust and adept problem solver.

    Allow me to share an experience with you where I was assigned a task. After three days of dedicated effort, I managed to complete only one portion, which happened to be the less complex segment of the task. Due to the presence of other pressing priorities, I had to defer the completion of the remaining part for a later time.

    In an attempt to tackle a collaborative task, which my supervisor and I were originally supposed to work on together, I decided to take it on solo initially. However, this endeavour resulted in an unsuccessful outcome. It reinforced the idea that while it's commendable to take on challenges, some may surpass one's current capabilities. In such cases, collaboration becomes essential for successfully addressing these larger challenges.

  3. Prioritization

    This is something you have to learn if you are working in the real world. You have to prioritize your tasks because they are of different levels of importance to the users and the organization at large.

    I can assert with confidence that I have acquired this valuable skill. Thanks to the guidance and support of my boss and supervisor, I have learned to manage my time and make well-informed decisions regarding the allocation of my efforts, all to achieve the most favourable outcomes.

  4. Collaboration

    Collaboration requires communication.

    At the onset of my internship, I admittedly struggled with effective communication, but I have since made significant improvements in this regard. As someone inclined towards critical and in-depth thinking, I often found myself grappling with the challenge of conveying my thought processes, accomplishments, or obstacles. In the attempt to articulate my ideas, I occasionally became sidetracked, resulting in unintended statements or less precise communication.

    This is precisely why I have a deep appreciation for writing. It provides me with a platform to pour out my initial thoughts, sift through the gibberish, and then meticulously organize them to form a coherent narrative. Ultimately, it allows me to present a refined and meaningful perspective to my readers, inviting them to explore and understand the ideas more clearly.

    Also, collaboration requires teamwork and a willingness to learn, which I believe I possess.

    By merging these three skill sets, I was able to elevate my ability to collaborate effectively.

  5. Lastly, I achieved proficiency in PHP and cultivated a strong command of Vue.js. Additionally, I acquired invaluable insights from my supervisor and boss, although time constraints prevent me from sharing them now. Ultimately, this experience not only enhanced my development skills but also propelled me toward becoming a more accomplished developer—or perhaps, one could say, engineer.


In summation, this industry experience has been transformative, propelling me towards becoming a more proficient developer and a more dedicated student. It has ignited my insatiable curiosity for further knowledge and unmasked my vulnerabilities while refining my strengths. Above all, it stands as an eye-opening journey that has bolstered my confidence and enthusiasm. I eagerly anticipate the limitless horizons of exploration that lie ahead.

As a newfound revelation, I've come to recognize that my true passion lies in the realm of research, which aligns seamlessly with my greatest strength.

Thank you for listening; because without an audience, I would have nothing to share!

Sincerely,
Victor Ohachor