Totavi and Nimi join forces to Accelerate FinTech go to Market...
There are many companies that continue to neglect their need for having a website. Sure, it may be a thorough process to start building your own domain or platform, but there are many companies out there with the experience and expertise to help. One of which is our team at Nimi. We are confident that we can support your website development efforts successfully.
  1. JavaScript Thread: Where your React Native JavaScript code runs.
  2. Native Modules Thread: Where the native code executes.
  3. UI Thread: Responsible for rendering the user interface.
Nimi is a revolutionary product development firm that supports entrepreneurs in acquiring new businesses, expanding their TAM, retaining current clients, and closing agreements. We realize your ideas as a full-service product development company. Though everyone has brilliant ideas, those who can carry them through to completion are the true innovators. Companies choose us for our impeccable testimonials, unbeatable ROI, and more.
On that note, we’d love to share with you one of our recent success stories. Clutch has named us as one of the game-changing Web Developers in California and we are excited to finally share this with all of you.
Clutch, for those of you who don’t know, they are a B2B ratings and reviews platform based in Washington, DC. They evaluate technology service and solutions companies based on the quality of work, thought leadership, and client reviews. A rapidly expanding startup, Clutch has become the go-to resource in the agency space.
“Our key success metric was completing the work before the end of July 2023, and Nimi delivered on time — they were fast. The quality of their work was okay. We had to make some fixes, but that was fine. They delivered their work on time and on budget. On top of that, the team’s communication was great. They were super proactive and honest. For tools, we used Slack and Trello.” Founder & CEO, B2B Payment API Company
“Their hiring process was very good and I felt confident in the engineers they had brought onboard specifically for our fintech business. Their leadership was so attentive; I felt like they were my partners. The technical skill of their team was both deep and wide which allowed us to configure our teams in the best way possible and build in parallel.''
They communicated daily, sometimes twice a day because of the time difference. We could always count on them to attend video meetings for stand-up. Nimi's engineers were always receptive to our feedback and they were quick to make adjustments as necessary. They were flexible in working with a startup too and knew how to pivot with us as we made decisions based on real-time data.” Loc Nguyen, Head of Engineering at Productfy
Let’s help your business grow! Connect with us today.
Why Use Native Modules?
While React Native offers many built-in components and APIs, certain features may require access to platform-specific functionalities that are not exposed by default. For instance, accessing low-level hardware features or third-party native libraries necessitates creating custom native modules.
How I Implemented TheBridge Repository
The Bridge repository demonstrates how to build a React Native bridge and native modules. Here’s a detailed breakdown of how I implemented it.
Step 1: Setting Up the React Native Project
npx @react-native-community/cli@latest init exampleProject
This generated a boilerplate React Native project. I then set up the necessary files for implementing the native module.
Step 2: Implementing the Android Native Module
  1. When you run a piece of code, tasks go into the call stack, which is where synchronous tasks are handled.
  2. f an asynchronous task (like a network request or a timer) is encountered, it gets pushed to the event queue after it completes.
  3. The event loop continuously checks the call stack and event queue. When the call stack is empty, it takes tasks from the event queue and processes them.
npx @react-native-community/cli@latest init exampleProject
This generated a boilerplate React Native project. I then set up the necessary files for implementing the native module.
How I Implemented TheBridge Repository
The Bridge repository demonstrates how to build a React Native bridge and native modules. Here’s a detailed breakdown of how I implemented it.
Here’s how this plays out:
npx @react-native-community/cli@latest init exampleProject
This generated a boilerplate React Native project. I then set up the necessary files for implementing the native module.
The Problem with Callbacks: “Callback Hell”
While callbacks work, they can get messy quickly. As the complexity grows, you might end up with deeply nested functions that are hard to read and maintain, commonly called callback hell:
This quickly becomes a nightmare to manage. Thankfully, JavaScript has evolved, introducing Promises and later async/await, which allow us to write cleaner and more readable code.
Promises: A Better Way
A Promise in JavaScript is like saying, “I promise to do something when this task finishes.” You can attach .then() to a promise to handle the result and .catch() to deal with any errors.
Here’s the previous coffee shop example using Promises:
With promises, the code becomes more linear and easier to read. You can chain .then() to handle sequential tasks.
Async/Await: The Cleanest Approach
Finally, the introduction of async/await made asynchronous code even simpler to work with. It allows us to write asynchronous code that looks like synchronous code — more natural and readable.
Here’s how you’d rewrite the coffee shop example using async/await:
With async/await, the code looks cleaner, as if the asynchronous operations are happening one after the other, even though they’re still non-blocking in nature.
The Engine Behind Asynchronous JavaScript: The Event Loop
Behind the scenes, JavaScript uses something called the event loop to handle asynchronous tasks. It’s like a smart traffic controller, making sure all tasks are executed in the right order without blocking each other.
Here’s how it works in a nutshell:
  1. When you run a piece of code, tasks go into the call stack, which is where synchronous tasks are handled.
  2. f an asynchronous task (like a network request or a timer) is encountered, it gets pushed to the event queue after it completes.
  3. The event loop continuously checks the call stack and event queue. When the call stack is empty, it takes tasks from the event queue and processes them.
Wrapping Up
Asynchronous programming is at the heart of modern JavaScript, allowing developers to build fast, responsive applications that can handle multiple tasks at once. While callbacks were the original tool, they often led to messy code. Promises and async/await have since provided cleaner, more readable ways to handle asynchronous tasks.
Whether you’re fetching data, handling timers, or making a coffee shop order, understanding async in JavaScript helps you write code that’s efficient and maintainable.
As many of you know, Nimi (www.nimidev.com) started as a product management consulting firm, helping founders with product strategy and hiring the first CPO or PMs. Over the past few years, we expanded our services to include web and mobile development, API development and test automation.
  1. JavaScript Thread: Where your React Native JavaScript code runs.
  2. Native Modules Thread: Where the native code executes.
  3. UI Thread: Responsible for rendering the user interface.
I'm excited to announce that this month, we've partnered with Oktay Tech (https://oktaytech.com/), a team with 14+ years of experience designing and implementing real-time and streaming cloud-native big data systems using AI and ML. Their customers include Wall Street firms to Enterprise Startups. Oktay specializes in ultra-resilient, massive-scale, ultra-low latency algorithmic, high frequency trading systems utilizing a hybrid cloud.
Last year, Oktay and Nimi partnered to help DriveWealth launch a new trading system and a modern, slick developer experience. We complement each other in building full-stack solutions to help emerging high-growth FinTechs stand out from the competition and win new business.
If there's anything we can build for you, please reach out.
Why Use Native Modules?
While React Native offers many built-in components and APIs, certain features may require access to platform-specific functionalities that are not exposed by default. For instance, accessing low-level hardware features or third-party native libraries necessitates creating custom native modules.
How I Implemented TheBridge Repository
The Bridge repository demonstrates how to build a React Native bridge and native modules. Here’s a detailed breakdown of how I implemented it.
Step 1: Setting Up the React Native Project
npx @react-native-community/cli@latest init exampleProject
This generated a boilerplate React Native project. I then set up the necessary files for implementing the native module.
Step 2: Implementing the Android Native Module
  1. When you run a piece of code, tasks go into the call stack, which is where synchronous tasks are handled.
  2. f an asynchronous task (like a network request or a timer) is encountered, it gets pushed to the event queue after it completes.
  3. The event loop continuously checks the call stack and event queue. When the call stack is empty, it takes tasks from the event queue and processes them.
npx @react-native-community/cli@latest init exampleProject
This generated a boilerplate React Native project. I then set up the necessary files for implementing the native module.
How I Implemented TheBridge Repository
The Bridge repository demonstrates how to build a React Native bridge and native modules. Here’s a detailed breakdown of how I implemented it.
Here’s how this plays out:
npx @react-native-community/cli@latest init exampleProject
This generated a boilerplate React Native project. I then set up the necessary files for implementing the native module.
The Problem with Callbacks: “Callback Hell”
While callbacks work, they can get messy quickly. As the complexity grows, you might end up with deeply nested functions that are hard to read and maintain, commonly called callback hell:
This quickly becomes a nightmare to manage. Thankfully, JavaScript has evolved, introducing Promises and later async/await, which allow us to write cleaner and more readable code.
Promises: A Better Way
A Promise in JavaScript is like saying, “I promise to do something when this task finishes.” You can attach .then() to a promise to handle the result and .catch() to deal with any errors.
Here’s the previous coffee shop example using Promises:
With promises, the code becomes more linear and easier to read. You can chain .then() to handle sequential tasks.
Async/Await: The Cleanest Approach
Finally, the introduction of async/await made asynchronous code even simpler to work with. It allows us to write asynchronous code that looks like synchronous code — more natural and readable.
Here’s how you’d rewrite the coffee shop example using async/await:
With async/await, the code looks cleaner, as if the asynchronous operations are happening one after the other, even though they’re still non-blocking in nature.
The Engine Behind Asynchronous JavaScript: The Event Loop
Behind the scenes, JavaScript uses something called the event loop to handle asynchronous tasks. It’s like a smart traffic controller, making sure all tasks are executed in the right order without blocking each other.
Here’s how it works in a nutshell:
  1. When you run a piece of code, tasks go into the call stack, which is where synchronous tasks are handled.
  2. f an asynchronous task (like a network request or a timer) is encountered, it gets pushed to the event queue after it completes.
  3. The event loop continuously checks the call stack and event queue. When the call stack is empty, it takes tasks from the event queue and processes them.
Wrapping Up
Asynchronous programming is at the heart of modern JavaScript, allowing developers to build fast, responsive applications that can handle multiple tasks at once. While callbacks were the original tool, they often led to messy code. Promises and async/await have since provided cleaner, more readable ways to handle asynchronous tasks.
Whether you’re fetching data, handling timers, or making a coffee shop order, understanding async in JavaScript helps you write code that’s efficient and maintainable.
Here at Nimi (www.nimidev.com), in 2023 we have diversified our business capabilities from FinTech API development and test automation. In addition to supporting FinTech Infrastructure companies, Nimi has also built web portals and mobile apps for FinTech entrepreneurs, transitioning into a full-service product delivery firm.
  1. JavaScript Thread: Where your React Native JavaScript code runs.
  2. Native Modules Thread: Where the native code executes.
  3. UI Thread: Responsible for rendering the user interface.
Totavi is a boutique consulting firm focused on providing real, operational experience that varies from the earliest days of a startup, high-growth phases, and public company leadership to solve product and strategy challenges. We provide fractional product and technology leadership to be your partner in growth.
In July 2023, Nimi officially partnered with Totavi (https://www.totavi.com) to take our business to the next level. Over the last two months we have already worked together to help a handful of FinTech entrepreneurs evaluate their ideas, test hypotheses and figure out the levers that can give them the velocity to raise funds and bring a solid product to market.
Contact us for more information, or if you'd like an introduction to Totavi.
Why Use Native Modules?
While React Native offers many built-in components and APIs, certain features may require access to platform-specific functionalities that are not exposed by default. For instance, accessing low-level hardware features or third-party native libraries necessitates creating custom native modules.
How I Implemented TheBridge Repository
The Bridge repository demonstrates how to build a React Native bridge and native modules. Here’s a detailed breakdown of how I implemented it.
Step 1: Setting Up the React Native Project
npx @react-native-community/cli@latest init exampleProject
This generated a boilerplate React Native project. I then set up the necessary files for implementing the native module.
Step 2: Implementing the Android Native Module
  1. When you run a piece of code, tasks go into the call stack, which is where synchronous tasks are handled.
  2. f an asynchronous task (like a network request or a timer) is encountered, it gets pushed to the event queue after it completes.
  3. The event loop continuously checks the call stack and event queue. When the call stack is empty, it takes tasks from the event queue and processes them.
npx @react-native-community/cli@latest init exampleProject
This generated a boilerplate React Native project. I then set up the necessary files for implementing the native module.
How I Implemented TheBridge Repository
The Bridge repository demonstrates how to build a React Native bridge and native modules. Here’s a detailed breakdown of how I implemented it.
Here’s how this plays out:
npx @react-native-community/cli@latest init exampleProject
This generated a boilerplate React Native project. I then set up the necessary files for implementing the native module.
The Problem with Callbacks: “Callback Hell”
While callbacks work, they can get messy quickly. As the complexity grows, you might end up with deeply nested functions that are hard to read and maintain, commonly called callback hell:
This quickly becomes a nightmare to manage. Thankfully, JavaScript has evolved, introducing Promises and later async/await, which allow us to write cleaner and more readable code.
Promises: A Better Way
A Promise in JavaScript is like saying, “I promise to do something when this task finishes.” You can attach .then() to a promise to handle the result and .catch() to deal with any errors.
Here’s the previous coffee shop example using Promises:
With promises, the code becomes more linear and easier to read. You can chain .then() to handle sequential tasks.
Async/Await: The Cleanest Approach
Finally, the introduction of async/await made asynchronous code even simpler to work with. It allows us to write asynchronous code that looks like synchronous code — more natural and readable.
Here’s how you’d rewrite the coffee shop example using async/await:
With async/await, the code looks cleaner, as if the asynchronous operations are happening one after the other, even though they’re still non-blocking in nature.
The Engine Behind Asynchronous JavaScript: The Event Loop
Behind the scenes, JavaScript uses something called the event loop to handle asynchronous tasks. It’s like a smart traffic controller, making sure all tasks are executed in the right order without blocking each other.
Here’s how it works in a nutshell:
  1. When you run a piece of code, tasks go into the call stack, which is where synchronous tasks are handled.
  2. f an asynchronous task (like a network request or a timer) is encountered, it gets pushed to the event queue after it completes.
  3. The event loop continuously checks the call stack and event queue. When the call stack is empty, it takes tasks from the event queue and processes them.
Wrapping Up
Asynchronous programming is at the heart of modern JavaScript, allowing developers to build fast, responsive applications that can handle multiple tasks at once. While callbacks were the original tool, they often led to messy code. Promises and async/await have since provided cleaner, more readable ways to handle asynchronous tasks.
Whether you’re fetching data, handling timers, or making a coffee shop order, understanding async in JavaScript helps you write code that’s efficient and maintainable.
“Learning Mondays are something special at Nimi”.
This is a common answer from employees who took part in an interview about Nimi’s experimental “Grow Today” work week. Back in Q4 of 2022, the executive team had a transformational idea to reinvent the work experience in Sri Lanka.
We eliminated large team meetings, shifted from a web meeting culture to digital-first asynchronous communication and introduced the concept of learning Mondays.
Changing our meeting culture created more focus time for our employees and made in-person meetings something to look forward to. As expected it boosted productivity for both our office and remote teams.
The most transformative introduction was learning Mondays.
Why Learning Mondays
Here at Nimi, we only take on engagements where we are working on the latest and cutting-edge technologies. We build APIs, web and mobile applications and test automation frameworks.
A fundamental expectation of the Nimi experience is that our employees are “Growing Today”, and not at some arbitrary point in the future. To ensure this, we created a certification program in 2022 where we would reimburse any educational expenses for our employees when they take and successfully complete an exam.
Despite this great benefit, we actually found that our employees did not prioritize time to learn. This is understandable because the customer always comes first, resulting in our team having a very packed work week.
We also noticed that due to our meeting culture, and this constant feeling of “falling behind” our employees were actually having to introduce learning time throughout the week and weekend in a disjointed way which we identified as “not productive.”
What if we could combine all the 15-minute learning sessions throughout the week into a block of focus time on a single day?
After implementing this and making the necessary tweaks to support our customer and employee needs, we officially made it part of our benefits package in January 2023.
What Nimians think of Learning Monday
Nimi has always offered new learning and skill development to all employees who joined and employees are happily sharing what they gained individually out of Nimi.
“Nimi gave me the opportunity to test the practicality of the theories I learned” said Navodya, an Associate Software Engineer. In her tenure she was able to learn coding standards, GIT commands usage, and merging. Overall, she was able to learn the flow of a project from soup to nuts.
Amanda an Intern on the Nimi QA team, said that automation was very new to her before joining Nimi. Prior to joining the company she had been trained on manual testing. Apart from the technical benefits of Learning Monday she was also able to develop her communication skills by understanding the needs and wants of the clients and satisfying them. She dedicated a day per week to research, focus and learn time management. Plus, the additional course materials in the Nimi library have helped her in identifying context.
Taking Madawa’s experience at Nimi, he only knew basics of Java programming. But Nimi offered him the opportunity to get a deeper understanding of Java as well as the fundamentals of full stack software development through exposure to Node and React.
Maneesha admitted that she had a very basic knowledge of programming when she joined the Nimi Grow program. Through the last few months she’s gathered exposure to development tactics, test cases, frameworks, and apps used in test automation.
The Nimi Experience
When interviewing Nimians for this post, we discovered that culture was a key driver of their satisfaction. Learning Monday turned out to be a highlight. They liked that Monday could be dedicated as a time to focus on their individual developments as well as planning for the rest of the week — an additional boon when you consider that most of Monday is Sunday night in the United States.
Another thing which all employees mentioned was even though the operations were happening remotely during the Covid shutdown, Nimi made sure all members are engaged and knew each other very well. So, monthly meet ups were organized where all employees could get to know each other personally and build lasting professional relationships.
Employees also commented that events such as the Holiday party, birthday celebrations and the annual Hackathon were things that they really looked forward to. The combination of a thoughtful event calendar with an open collaborative environment has helped build bonds between Nimians that are lifelong.
We challenged everything at Nimi, from how we interview candidates (collaborative group interviews vs. 1–1 grilling sessions), to how we work and have fun as a team. The thesis was that there was an opportunity to bring the silicon-valley mindset to the rest of the world in upskilling global talent.
And that’s what we’ve done and more.
What’s next
The first half of 2023 is a very critical time at Nimi, as we take our learnings from building this company to see how we can positively impact all other employers in Sri Lanka and the rest of the world. Stay tuned for some of our exciting product launches that challenge the status quo on what tools and services we can provide to improve productivity for R&D teams in the global south.
In today’s globalised world, the significance of diversity, equity, and inclusion in the workplace cannot be overstated. DEI initiatives are not just buzzwords but essential elements that drive innovation, creativity, and overall organizational success. At Nimi, we firmly believe in and practice DEI principles to foster a thriving work environment.
One of the key aspects of DEI at Nimi is our commitment to maintaining a gender balance with a 1:1 ratio. This approach ensures that both men and women have equal opportunities and representation within our company. Gender diversity brings diverse perspectives to the table, leading to better problem-solving and decision-making. It also helps in creating a more inclusive environment where everyone feels valued and respected.
At Nimi, we understand that career growth is not solely about the work employees do within the office. We actively promote professional development through various initiatives, such as organizing “Ask Me Anything” (AMA) sessions. These webinars provide a platform for employees to engage with experts, ask questions, and gain insights into different aspects of their careers. Furthermore, we encourage our employees to attend industry events for learning and development. By exposing them to new ideas and trends, we ensure that our workforce remains competitive and innovative. This commitment to continuous learning helps employees grow both personally and professionally.
Recognizing the importance of work-life balance, Nimi offers a hybrid work model that provides employees with the flexibility to work from home. This approach not only helps in accommodating personal commitments but also enhances productivity and job satisfaction. By trusting our employees to manage their time and work environment, we create a culture of responsibility and autonomy.
Quarterly meet-ups are another cornerstone of our DEI strategy. These gatherings are designed to promote employee engagement and strengthen the sense of community within Nimi. By bringing everyone together regularly, we ensure that employees feel connected to the company’s goals and values. These events also provide an opportunity for employees to share their experiences, celebrate achievements, and build relationships.
Our commitment to work-life balance, employee engagement, and professional development through DEI initiatives sets Nimi apart as a forward-thinking organization. By fostering an inclusive and equitable workplace, we not only enhance our employees’ well-being but also drive the overall success and growth of our company.

Grow your Revenue