RaaiVan stands out as my proudest and most significant work. Originally designed as an “Enterprise Knowledge Management” software, its flexibility and extensive features have allowed many of its users to leverage it as a “Document/Content Management System” as well.
There are several reasons why RaaiVan stands out as my greatest achievement:
The initial version of RaaiVan served as a tool for collecting and sharing “Lessons Learnt,” “Employee Skill-sets,” and “Documents.” It included forms for gathering information, enabling users to comment on these forms or send direct messages to one another.
A key feature of the software was its ability to store a comprehensive list of an organization’s assets and associate relevant information with each asset. This functionality allowed management to easily track the extent of documentation available for each project, process, or area of expertise.
I initially joined the team as a facilitator and teacher, helping customers integrate the software into their workflows. However, I soon noticed that the development team struggled to fix issues and implement new features requested by customers. Leveraging my programming skills, I began assisting the team with releases, adding new features, and fixing bugs.
My contributions in development were so impactful that within a few months, Khashayar, the CEO of InKnowTex, dismissed the existing engineering team and offered me a 50-50 partnership. In 2012, I co-founded the new InKnowTex with Khashayar, embarking on a dedicated journey to elevate RaaiVan to new heights.
From the very beginning, I was the sole developer of RaaiVan, taking on the role of a full-stack developer from day one. However, I already had six years of non-commercial software development experience with C
, C++
, and C#
from my time in school and university. Additionally, I was part of my university’s ACM programming contest team and participated in the West Asian programming contest twice, in 2006 and 2007.
At the time, it was common to develop the front-end with asp.net
. I believed that the three main layers of software—Data
, Back-End
, and Front-End
—should be decoupled. Later, I realised this approach was the MVC
pattern, and I had been implementing it without even knowing!
I chose the following tech stack and began migrating all the existing code to it:
ajax
. Since there wasn't any great front-end framework available then, I developed my own framework and built the entire front-end of the software in plain JavaScript. When I say the whole front-end, I’m talking about more than 150,000 lines of plain JavaScript code. The result was outstanding, and it still works alongside newly developed React
components.
asp.net
front-end code and implementing API handlers instead. Later, I realised this approach was REST API
, and I had been doing it for years without realising it.
stored procedures
with T-SQL
instead of the Entity Model
. The Entity Model had significant performance issues, especially with complex queries, so using stored procedures greatly improved performance.
The idea of a form builder came to me when we started receiving numerous requests from customers with varying requirements. Each customer needed forms with different inputs.
Instead of creating individual forms for them, I decided to provide them with a form builder so they could create whatever forms they needed.
I developed the first version in less than a week. Initially, it had only four types of fields: Text
, Number
, Date
, and Multiple Choice
. Later, I enhanced its user experience and features, adding many more field types such as Binary
, RichText
, Email
, Link
, Table
, Item Select
, Autocomplete
, File & Media
, User Select
, Multi-Level Select
(e.g. Country → City), and Divider
.
The benefits of this approach were:
Just like the form builder, I decided to develop the workflow engine to meet the diverse requirements of our customers. Another advantage was that it made the software more appealing to potential customers.
My workflow engine functioned as a state machine. The concept was:
I implemented the visual representation of the workflow using vis.js
, a JavaScript
network visualisation library.
The Wiki was used as a tool to manage unstructured content, allowing users to write rich-text content, add media or documents, and tag other documents or people.
To ensure the validity of the content, I implemented a simple, optional workflow that could be enabled in the system settings.
With this workflow, whenever a wiki was edited, subject matter experts were notified to review the changes. A single approval from a subject matter expert was sufficient to publish the update.
The key features of the Wiki were:
I also used CKEditor
as the Wiki’s WYSIWYG editor.
Search is a crucial element of any software, especially if the software deals with content. When designing the search engine, I considered the following requirements:
wiki
, form
, and files
, I needed to ensure that users could find an item by searching for something within any of its sections.
I implemented the search engine using Apache Lucene
and adopted an event-driven
approach to keep the index updated. Whenever a section of an item was updated by the user, an event was triggered to update the entry.
I used Tika
to extract the text content from uploaded files. However, some files, like text documents, didn’t require any third-party library.
RaaiVan includes several additional modules:
SignalR
.
JIT
library.
Form Builder
. A key feature of this module is its ability to run surveys periodically, monitor the results, and track trends.