3. Software Engineer Intern
3
Acknowledgement
First, I would like to thank Supervisor Mr. Anand Prajapati, Co-Founder, and the CTO at
Leena AI for giving me the internship opportunity.
During my summer internship, the staff at Leena AI and persons guiding me were very helpful
and extended their valuable guidance and help whenever required for the projects which I
worked on. I had many engaging conversations with everyone about their work and the
progress in the field of Software Development.
I would like to take this opportunity to express my deepest gratitude to my mentor, Dr.
Raghunath Reddy for guiding, supporting and helping me in every possible way.
I learned a lot about the industry and gained more insight. I would also like to express my
deepest gratitude to Dr. Deepak Garg (HoD CSE), Dr. Sudhir Chandra (Dean of SEAS) and
Placement Cell of the university for giving me an opportunity to be a part of this internship.
Harshit Singhai
E16CSE147
B.Tech. CSE, 7th Sem
4. Software Engineer Intern
4
Table of Contents
S. No. Particulars Page No.
1 Abstract 5
2 About company 6
3 Introduction 7
4 Problem Statement 8
5 Why and how the project was chosen 9
6 Background Search 10
7 Project Design Diagram 11
8 Functionality of the project and snap shots 12
9 Testing procedure 18
10 Implementation details 19
11 Project Development Time Schedule 20
13 Learning and reflections from the project 21
14 Conclusion 22
15 Challenges and Future Enhancements 23
16 References 23
5. Software Engineer Intern
5
Abstract
This report describes my internship at Leena AI. Leena AI is a leading company operating in
hr-tech domain which provides an AI-powered HR Assistant providing instant responses to
employee queries improving employee experience.
The scope of this document is to identify and describe the analysis carried out, projects
completed, experience gained and focuses on the achievement as a software engineer Intern.
Bennett University provides that glorious opportunity to their students of having an internship
within their bachelor program.
During my internship at Leena AI, I was introduced to some new technologies, languages and
frameworks. But the most amazing experience was to work in a multicultural work
environment culture.
Overall, I am very satisfied with the results of my internship. I was able to use my software
development knowledge and apply it a real organization working in a real-life problem. I was
able to see some differences in functioning that resulted from my efforts. Due to the character
of the internship and the short time period spent at Leena AI, I took this experience as an
opportunity to provide Leena AI with the skills which I learned while a computer science
student at Bennett University.
6. Software Engineer Intern
6
About the Company
Launched in 2017, the startup is a recent graduate of Y Combinator, an American seed
accelerator, and announced a $2 million seed round from a variety of investors including
Snapdeal co-founders Kunal Bahl and Rohit Bansal and Elad Gil.
Leena AI, a member of the Y Combinator Summer 2018 class, wants to change that by
building HR bots to answer questions for employees instantly. Leena AI improves the
experience for the HR manager and employees by facilitating a chatbot. It guarantees
immediate answers to staff queries, leaves inquiries, tickets and also maintains handy
helpful data such as salary, policy updates and company rules.
The HR problem is full of deliberations—finding out answers to basic questions like
how to a get a new baby on their health insurance requires a call to a help desk or a
series of emails, even though the information is out there in the HR policy. Leena AI
feels that a chatbot is a good way to solve this problem and can save a lot of time
searching or calling for answers that can be easily found. Moreover, they learned that
most of the questions are fairly easy and require a simple index for a system to learn.
Taking a look from HR managers ' perspective, it allows them to readily handle
discussions and communicate all organizational updates at one location. Leena AI is also
a partner for Facebook Workplace and can be integrated with other platforms such as
Slack and Workplace.
At present, Leena AI has more than 200,00+ users worldwide with more than 15 paying
clients including the big names Coca-Cola, Pidilite, Reliance Capital, Kohler, Vodafone Idea,
Ceat, Maruti Suzuki, Cairn, Tata Technologies, Marico, Piramal, KEC Axis Bank, Pearson,
Saint Gobain among others.
7. Software Engineer Intern
7
Introduction
As a software engineering intern, I was in charge of a number of projects including
creating a notification web application to make it easier for HR to schedule a notification
for their employees. I was given the freedom to execute every project fully from solution
architecture to implementation and testing while acting on feedback received from my
mentor.
This internship has been a great learning experience as I have discovered most of the
tools and techniques I used during the internship. These range from web development
and good practices to database operations, code organization, code splitting and learning
about The Twelver-Factor App architecture. I have also met a number of people who are
passionate about innovation during community events and talks who have made this
journey truly inspiring from a human as well as a technological standpoint.
Prior to internship, I’ve already had experience working with React – A JavaScript
library for building user interfaces. It is mostly used to create a single-page web
application as it is optimal for fetching rapidly changing data that needs to be recorded.
React makes it painless to create interactive UIs. Design simple interface for each state
in your application, and when your data changes, the right components will be efficiently
updated by React. It follows “Learn Once, Write Anywhere” methodology.
Before joining Leena AI, I was already familiarized and comfortable with MERN stack
i.e MongoDB, Express, React and Node.js as I’ve used it for my semester projects which
helped me in the interview process. Initially, I was given the role as a frontend intern,
but after competition of my first project I was presented with an opportunity to get some
production experience in backend and database as well.
8. Software Engineer Intern
8
Problem Statement
Leena AI wanted a dashboard where admins can configure trigger-based notifications to
a set of users, or broadcast simple bot messages across users, as well as monitor the
metrics of all sent push notifications. Messages can be configured by trigger (an event
that causes the push to be sent), the audience (who the message is sent to), schedule
(when is the push to be sent), and response (what actions can the user take to the push, if
any).
The solution was to build a web application which enables HR to configure and schedule
a notification message that will be sent to all the employees across the company. The
employee response will be analysed and shown in the forms of pie chart in the
application.
Another problem the company was facing was the time for the new recruit to make
himself comfortable with the company coding practices and libraries that are followed by
the company. Traditionally, the new recruit and a senior software engineer sit together
for long hours to transfer knowledge as a result of which lots of working hours are
wasted.
My task was to build a bootstrap starter project kit for developers so that the new joining
can quickly start a new project following the best practices preferred by the company. I
talked to the senior engineers and project managers, made a list of libraries and
methodology they want the new recruiter to follow and made a starter developer project
skeleton containing all the libraries, methodologies, best practices and push it to
Bitbucket along with the documentation. Now, the new developer is required to clone the
repository from Bitbucket, read the documentation, get comfortable with the company
best practices and start building on top of it. It also helps other developers to quickly
start a new project via the project starter developer skeleton kit.
As the company grew, new employees were hired, which in turn made it difficult for the
frontend engineers to regularly update the “about us” page of the website with the details
of the new employee as the employee details were hardcoded in the website.
My task was to make a simple RESTful API using node, connect the google spreadsheet
with the MongoDB using MongoDB Stitch – which allows Authentication, data access
regulations and services to be readily configured. The HR manager will just update the
google spreadsheet with the new information. The new information will be automatically
reflected on the website. The website will make an API call to the backend to populate
the “about us” page every time the user visits the page. This automated the task of
manually updating the website’s “about us page”
9. Software Engineer Intern
9
Why and how the project was chosen
Leena AI wanted a web application where admins can configure notifications and send it
to a set of users. Broadcast simple bot messages across users, as well as monitor the
metrics of all sent push notifications.
They also wanted to automate the process of updating the “about us” page of the website.
The information was hardcoded which made it difficult for developers to constantly
change or add new information. Thus, RESTful API was implemented which made it
easier for HR to update and add new information using google spreadsheets. Google
spreadsheets were directly connected to the database using MongoDB Stich thus, making
it easier to edit, update or delete information.
Apart from it, they wanted to make a get-started kit to bootstrap both the frontend and
the backend project with all the basic dependencies and code structure that are followed
through the company resulting in quicker development.
Few of the project was developed using the older version of React 12 and React 14
which made it difficult in terms of code maintainability, readability, and complexity.
Leena AI wanted to re-write some features of their existing code to new version 16.8 as
the new version was much optimized and provides better out-of-the-box features. React
16.2 gave a lot of features out of the box making the projects running the older version
much faster.
There were lots of small projects in which I was asked to read the existing code and add
a new feature. Reading other’s code helped me get better by developing a new way of
solving problems.
10. Software Engineer Intern
10
Background Search
Before starting out, I learned about the new version of React 16.8. I read about new
features and concepts like Hooks, Fragments, Lazy, Redux, Memo, Server-Side
rendering, Debounce, Socket.io, Immutability, and Promises.
I went much further in those areas, discovered many new tools and programming
languages (TypeScript) as well as coding patterns (Singleton, lazy initialization, factory
method).
Working in a team also made me comfortable with using Git and Bitbucket. I was also
familiarized with the ESLint – code analysis tool for identifying problematic patterns
found in JavaScript code. Using ESLint helped me write maintainable, clean and
readable code.
I also learned how to use functional programming together with object-oriented
programming and when to use what. Brushed up my JavaScript concepts.
Learning about TypeScript further enhanced my ability to write maintainable code.
Typescript is a superset of Javascript which was used for backend across the
organization. TypeScript has some major benefits, which includes, support for Classes
and Modules, Type-checking, ES6 features support, Class library API definition, support
for Javascript packaging, and a lot more.
Further, my concepts working with Redux, ContextAPI, Hooks, JWT cookies, local
storage, and Debounce were strengthened as I learned a lot using them and debugging
the errors.
I used libraries like UglifyJS 3, a javascript parser, minifier, compressor, and beautifier
toolkit. UglifyJS reduced the size of the production build resulting in better performance.
The reduced size increased the response time of the website by making it load faster.
Increased performance by reducing repeated API calls by storing the data in browser
cache, local storage and cookies. Storing data in browser helps with faster access as it
avoids network call.
For node.js, I leant about express, mongoose, JWT token, Socket.io, underscore.js,
Lodash, uglifyJS2, nodemailer among other libraries.
11. Software Engineer Intern
11
Project Design Diagram
An overview of push notification architecture. How different components interact with each
other and what role does each component have.
12. Software Engineer Intern
12
Functionality of the project and snap shots
A dashboard where admins can configure trigger-based notifications to a set of users, or
broadcast simple bot messages across users, as well as monitor the metrics of all sent push
notifications. Messages can be configured by trigger (event that causes the push to be sent),
audience (who the message is sent to), schedule (when is the push to be sent), and response
(what actions can the user take to the push, if any).
Following prominent features has been implemented:
It allows scheduling the broadcast message at a specific time. Time zone is
customizable i.e. admin is able to choose if he wants to send the message in the user's
time zone or UTC.
Along with each push notification, there is a progress percentage that shows the
progress of the current broadcast message. It also displays how many messages have
been successful and failed along with status of delivery and read status. There is also
an option to cancel an ongoing/scheduled broadcast message.
While scheduling a broadcast, it allows filtering audience using Boolean conditions.
Conditions are allowed over channels and params of a user.
For content of a broadcast, user can either execute a module or create new module
defining the content of the message. User can also connect the newly created push
module to an existing module within the flow.
Bot user
A bot user receives notifications in all the platforms, namely, workplace, messenger,
web client, android app, outlook, slack, hangouts, MS teams.
On clicking the notification, the user interacts with the notification or discard it.
Clicking the notification, invoke the flow related to the notification.
User is able to see a list of previous notifications sent out to him.
Interacting with a notification on one platform, disappear/’show read’ on other
platforms.
13. Software Engineer Intern
13
See the distribution of responses of a public poll in a bar chart when selecting a quick
reply.
HR Admin
HR admin is able to broadcast a notification to users containing a short notification
text and a longer module text. The short message becomes the subject and the module
text becomes the body if the notification needs to be sent via email.
HR admin, is able to multicast a notification to a set of users based on user params.
Send a notification to a list of users.
Include images, video and/or a document to the selected set of users.
View a list of all notifications sent out by me.
See the audience, the subject of the notification, the message, the status of the
notification and the sender’s name as details of the notification.
Choose a date & time for the notification to be pushed.
Reschedule a notification.
Delete a notification yet to be sent.
Not be able to delete a notification once it has been sent out to even a single user.
Stop a notification currently being pushed which results in no further delivery of the
notification to new users and behaviour as expected to the users the notification has
reached.
Resend a notification to a different audience by clicking on the resend button.
Check the click rate of the notification as an indication of the notification being read.
Attach a poll to a notification by adding the question as the module bot says and
options as quick replies.
Set the poll as private or public.
Distribution of responses in a bar chart next to the push notification with a poll.
18. Software Engineer Intern
18
Testing Procedure
At Leena AI, there was no testing team as such. The developers are expected to test and
maintain their platform by trying different edge case and thinking from an end-user
perspective about how he/she might interact with the system. Before releasing into
production, there will be an internal assessment testing in which different stakeholders related
to the project will internally use the platform and report the bug to me if any. After internal
testing, the platform is deployed in production.
19. Software Engineer Intern
19
Implementation details
The project is developed using React 16.8 and Node.js
In React, the entire project is made using Hooks, Fragments, Lazy Loading, Redux,
Memo, Debounce, Socket.io, Immutability. Axios a Promise based HTTP client is used
to make API call in the backend. TypeScript is used to write maintainable and readable
code. ESLint – code analysis tool for identifying problematic patterns found in
JavaScript code was used to follow best code practices.
The projects follow The Twelve-Factor App methodology (a methodology for building
modern, scalable, maintainable software-as-a-service apps.)
Git was used for version control and Bitbucket was used as a version control repository
hosting service.
React state was managed through Redux and ContextAPI. JWT cookies, local storage
was used to store data in the browser as it helps with faster access and avoids network
call.
Libraries like UglifyJS 3, and node-minify was used to reduce the size of the production
build resulting in better performance. The reduced size increased the response time of
For RESTful API was developed using node.js, express, mongoose, JWT token,
Socket.io, lodash, and typescript. Mongoose was used to connect the backend with the
database. Socket.io was used to keep track of the scheduled notification in real-time.
Express to make endpoints for serving GET, POST, PUT, DELETE request. Await/Async
and Promises to handle the asynchronous nature of JavaScript. CRUD operations were
developed using MongoDB.
MongoDB Compass was used as a Graphical User Interface for MongoDB to analyse and
understand the contents of the data. Embedded Documents were used as data model to
describe a one-to-many relationship.
JOI was used for Object Schema Validation. Authorization and Authentication were used to
check if the user is authenticated and authorized to make a request. JSON Web tokens used
for authorization. Middleware to protect routes for authorized users.
Jest (a delightful JavaScript Testing Framework with a focus on simplicity) was used for unit
testing of different functions in Node.js
Postman was used to test the RESTful API. Npm a package manager for the JavaScript
programming language used to install various libraries for both React and Node.js
20. Software Engineer Intern
20
Project Development Time Schedule
The company were using Agile project methodology to breaks down projects into small
pieces that are completed in work sessions that run from the design phase to testing and
quality assurance. At each sprint, the most priority feature was expected to be completed.
Sprints were generally short, running over days or weeks; they're typically two to four weeks
long. At the end of each spring, I was expected to complete some features of the website, get
it tested, document it, then start planning about the next sprint.
Agile Project Methodology made it easier for me as changes can be discussed and features
can be newly effected or removed based on feedback. This effectively provides the customer
with the finished system they want or need.
Issue tracking tools like JIRA that allows bug tracking, and agile project management was
also used to keep track of important priority features. If the internal testing team found any
bug or any features not working as expected will open an issue in JIRA and assigned it to me.
Work culture allowed me to stay focused on delivering iterative and incremental value, as
fast as possible with customizable scrum boards.
I completed the first version of Push Notification on 13th June. After the competition of the
first version, I was assigned to different projects throughout the remainder of my internship.
From 25th of June, I started working on Push Notification 2.0 adding other features like add
images or convert the notification into a poll.
The timeline was given for all the tasks assigned to me and I’ve completed all my projects
within the given timeline.
21. Software Engineer Intern
21
Learning and reflections from the project
I acquired a better understanding of web development and research through hands-on
experience. Leena AI, being a young start-up was an ideal situation for me to showcase my
skills and solve a real-world problem that will be actually used by people. From making app
for semester projects to solving a real-world problem and deploying it in production, I felt as
though I have a strong understanding of the subject on what it would take to peruse a career
in software development.
Being a developer, I also witnessed the complete lifecycle on how the development process
works, how to turn an idea into code and deploy it in production.
As a software engineering intern, I was in charge of a number of projects including
creating a notification web application to make it easier for HR to schedule a notification
for their employees. I was given freedom to execute every project fully from solution
architecture to implementation and testing while acting on feedback received from my
mentor.
Having completed an entire project on my own and shipped it to production gave me
immense satisfaction and confidence to work on my ideas and bring them to reality. As a
developer, I learned how projects are maintained, integrated and shipped. Working as a
developer, completely taking ownership of the project and delivering it on time, made
me confident on taking bigger challenges in the future for my capstone project.
During this internship, I had the chance to work on many aspects of Software Engineering. I
developed new technical knowledge and soft skills while communicating with other
developers. I have also discovered a vibrant start-up ecosystem from the inside, this
experience has shifted my career plans towards building start-ups and reinforced my interest
in expatriation.
22. Software Engineer Intern
22
Conclusion
Working as a software engineer intern in a young startup, I felt working in a startup is
essential in term of growth, as they place loads of responsibility on their interns. They’ll hire
because of skills, but founders expect much more.
At Leena AI, I was directly working under the supervision and mentorship of the CTO of the
company. Founders and interns work together; there’s no middle management, so you learn
from the best.
Startups make you work hard, interns work under extreme pressure. Work-life balance is
tough and exhaustive hours at the office makes you tired. Having been a part of such work
culture help me equipped better to work under extreme pressure and tight deadline.
Startups need to grow fast, as a result interns have the license to show off their brilliance and
skills to deliver results with fresh designs, implement new concepts and discuss new ideas.
Apart from my stipend, other perks which were useful for me as a young aspiring software
engineer were a unique growth opportunity, the ability to get the most out of limited
resources, ability to learn, diverse responsibilities, added value and appreciation, control over
the project, flexibility, interesting and challenging environment.
I am extremely satisfied by this internship and I am grateful to Leena AI for providing me
with this opportunity.
23. Software Engineer Intern
23
Challenges and Future Enhancements
I designed the solution from our side, thinking about database tables and code architecture. I
discussed my findings with senior developers whose input often made me rethink my
approach.
The code architecture was very different from what I had encountered before with a clear
separation between the business logic and file structuring. At first, it found it useless but once
I wrote code using a proper structure, I quickly understood the advantages of such an
architecture and managed to find my way between the file more quickly.
The code review helped me a lot by developing a better understanding and giving me another
dimension and a new way to solve problems. The code reviewer challenged my
implementation decisions and showed me how to comply it to make it better. I began to use
best practices so as to reduce the complexity.
Before joining Leena AI, I had a very limited knowledge of React, Node.js and reasonable
bases in Object Oriented Programming with JavaScript. I went further in those areas,
discovered many new tools (Postman, MongoDB Compass, JIRA, Bitbucket and Git),
programming languages (TypeScript) as well as architecture like The Twelver-Factor App.
For the future enhancement, there are lots of features which can be added to the project.
The current feature holds good for the current requirement, but in future, if the
requirement change then features can be added or removed from the existing project.
I think the application can be made better with features like uploading video files or
selecting users by uploading an excel file.
Overall, it was a great experience being a part of such an amazing workplace culture and
project. The internship certainly made me better software engineer and equipped me
better understanding of how to handle a real world projects.