Scale By the Bay always teaches us something new, and this time, while reviewing the talks for this year’s event, we discovered that Functional Programming can be something that a whole family can enjoy together, and Kavita Laddad, Co-founder at Paya Labs, Inc., knows best how to nurture engineering culture within a family.
Kavita’s son Shadaj started coding at 7 and Scala at 10, and her husband and Shadaj’s dad Ramnivas both spoke at Scale By the Bay in the past years. Shadaj introduced Slinky, the Scala.js-React interface, at SF Scala and Ramnivas and Kavita, Shadaj’s parents, launched their startup, learnraga.com, built on Slinky. Continuing the family tradition, this year, Kavita Laddad is speaking at Scale By the Bay sharing her learnings on using Scala.js & React combination to deliver a complex set of requirements in a user-friendly application.
In advance of her talk, we spoke to Kavita about nurturing engineering culture in her family, teaching programming to kids, the key trends that are shaping the space, and learning Indian classical music using Scala.
Welcome to Scale By the Bay! Please tell us more about yourself: how did you get interested in Scala?
I grew up in a small town in India and have an undergraduate degree in Computer Science. After college, I started working with a local startup that created custom software for businesses as well as taught computer programming to kids, engineering students, and accountants. I loved every minute of this job. It was very interesting to talk to business owners who were simultaneously excited by the potential of automating parts of their business and afraid of challenges it might bring. Equally interesting was translating their vaguely defined requirements into a useful software product. Teaching was a lot of fun as well. I learned a lot about how kids grasp programming concepts and use them in a way you may not have thought about.
When I came to the United States, I started my first job at HP working on a real-time version of Java, Chai. Later I worked for a startup where we used Java servlets, JSPs, and all the cool technologies of those days! Since then, I have been working as an independent consultant in Java, Scala, and web programming.
My husband Ramnivas was the first one to adopt Scala in our family. He was really impressed by the language and started using it on a few projects we were tinkering with at that time. I started to learn Scala through books and online courses but used it seriously for the first time while creating a web application for Basant Bahar - a local non-profit devoted to Indian Classical Music. Since then Scala has been my go-to language due to its expressibility that allows writing shorter, clearer code and its flexibility in using it on both backend and frontend.
Software engineering runs in your family - both your husband and your son are regular speakers at tech conferences, including Scale By the Bay. What's your family secret to embracing software engineering?
This is a really interesting question that made me think a lot. We are fundamentally curious people. When we see a problem, we naturally gravitate towards solving it using computer programming. Even though we share our passion for computer science, each of us approaches it a bit differently. This forces us to explain to each other those individual approaches, expanding our viewpoint. At the same time, we share some common habits of writing clean code, liking for statically typed languages and functional programming. We consider ourselves as a life-long student which motivates us to keep learning and remain humble.
Being in the same field, we usually end up having dinner-table conversations about technologies we are using, any problems we are facing, or something new one of us has read or tried. We also routinely end up challenging each other’s deeply held beliefs about how to approach software development. Sometimes discussions such as “should we use styled-components or not” can get quite heated but it also helps us understand other perspectives.
For Shadaj, looking back, what we really offered is an encouragement to tinker, not be afraid to take challenges, offer feedback/review, and challenge him to write better quality code. In some ways, right from the beginning, we treated him as a smart colleague who needs a bit of mentoring. None of this was by design; it just happened.
What's your current role at Paya Labs and what exciting things are you working on at the moment?
Currently, I do whatever I need to do! From frontend, backend, content development, talking to our users, and marketing.
Being a startup, it is amazing to see and learn how users interact with the system. We often develop a feature with a certain image of how users will interact with it. When we release that feature, sometimes it perfectly resonates with our users and other times not so much. Then we go back to the drawing board and try to understand what the user really needs. Discoverability of a feature is another challenge we have been facing. Several times users ask for a feature we already have. After scratching our heads for a while, we realize that it is not as obvious to reach the functionality as we thought.
We try to keep up with new releases and advances in the frameworks and techniques we use. Often in the short term, it slows down our development but it usually pays off later by keeping our code cleaner and avoiding bit rot. Recently when Facebook released React Hooks we started to use it. First, by implementing new components with it, but soon realized that it was reducing and clarifying the code so much that we started converting existing components as well. It not only improved our code but uncovered some hard-to-reproduce bugs.
We recently worked on a feature to let users set their goals while learning and displaying their progress. It was challenging to decide what details we should show. There are complex questions involved, such as what will be beneficial to the users but not repetitive and annoying. We went through a few iterations before settling on a final, polished product.
You are building an online learning platform using full-stack Scala - LearnRaga. Can you tell us more about it, what its mission is and what need you plan to address with this learning platform?
Indian Classical Music is an ancient form of classical music. Its melodies are based on a concept called “raga”. A raga can be roughly defined as a set of notes, their relations to each other, and an approach of transitioning between those notes. A raga is meant to evoke a particular emotion ranging from joy to melancholy and is associated with a particular time of the day or season. Even though at its core a raga system sounds like a rigid form, most of the presentation consists of improvisation. This allows the artist to express a raga with an individual approach while staying true to the raga’s form.
In our family, we are all students of Indian Classical Music. I am learning to sing, Ramnivas is learning to play Flute, and Shadaj has been learning Sitar. We all learn from our teachers in India over Skype. This product started with difficulties we faced during our learning process. We usually take one lesson every week. During the class, the teacher guides us if we miss any notes or do not approach certain phrases correctly. But when we are practicing on our own, there is no such feedback. The teacher also wants us to practice some patterns to hone our skills. Then there are somewhat mundane requirements such as writing down a composition easily. Through all these requirements, LearnRaga was born.
ICM has been traditionally taught by teachers in person where students live with their teachers to learn it. But in modern times this is nearly impossible. We have taken on a challenge to convince students and teachers that even though ICM is traditional music, its learning experience could be enhanced by using modern tools.
LearnRaga is an online learning platform for Indian Classical music which provides tools such as a composition editor that makes creating and sharing a composition an easy task, supports synthesized playback with accompanying instruments, and provides real-time pitch feedback. The core idea is to make music practice effective for busy people.
What's the biggest challenge that you face in your work and how are you addressing the challenge?
Currently, LearnRaga serves well to music students with some prior training or those who are concurrently working with a teacher. However, we have some ways to go when it comes to beginners, especially with their onboarding experience. We are trying to solve this by adding some intelligence to our system so that it can figure out the level of a student and guide them to choose an appropriate activity and add some courses to make them familiar with the core concepts.
What's the biggest thing that is misunderstood about Scala?
That it is a difficult language. Sure, coming from an imperative programming background (like I was), it may take some time to start thinking in a functional way, but once you get it, there is no looking back.
What are the three trends that will shape the future of the space?
Most desktop apps will move to the web, given how capable browsers are becoming. Ten years back we would not have even imagined that we would be able to do real-time pitch feedback right in the browser.
WebAssembly (perhaps with Rust as the most common implementation language) will become a key part of the web stack.
Statically-typed languages will keep rising in their usage. If we had used a dynamically-typed language, there is no way we would have survived through so many refactorings due to changing domain models or revamping the user-experience.
What will you talk about at Scale By the Bay and why did you choose to cover this subject?
LearnRaga is implemented in Scala both frontend and backend. In my talk, I will mostly focus on the front-end part. I will show how Scala.js combined with React and Slinky presents a coherent combination of emphasizing both functional programming and immutability and how we use this combination to deliver a complex set of requirements in a user-friendly application.
LearnRaga is a UI heavy application with stringent performance requirements. I want to share my experience of developing it, what I learned from the obstacles we faced, and the pleasant surprises we came across.
Who should attend your talk and what will they learn?
Developers who are familiar with Scala, but have been using it mostly for backend programming. This talk will convince them that frontend programming with Scala is actually possible and even fun.
Anything else you'd like to add?
This will be my first time speaking at a major technical conference. It will be a great experience for me. So far I have been talking to users about what LearnRaga does; this conference is my opportunity to talk to developers about how it does so. I am looking forward to the conference!