Could you introduce your app in a few sentences?
Enlighten is an evidence-based personal trainer for your wellbeing and mental health.
Upon downloading the app, users complete an intake questionnaire. The answers from this are then used to create a personalized track that provides each user with a couple activities to do each day based on his or her specific needs. Each activity has a body of scientific research supporting its efficacy in improving mental health conditions and/or making people happier in general. Because of this, anyone can use Enlighten and benefit from it—everyone could stand to be happier and healthier, improve their relationships, and find more meaning in their lives. Users can also do any of these activities—meditation, deep breathing, gratitude journaling, and more—whenever they want in the app. And Enlighten provides users the ability to track their mood and habits over time and see how they relate to one another.
Enlighten is different from apps in the meditation sector in that it offers a much more comprehensive take on wellbeing and a more personalized, guided experience. It’s not a meditation app, but it offers meditation. Another big difference is that the platform is constantly improving and adapting over time as users engage with it more. For example, if it sees that a user is struggling to complete their daily activities, it will dial back the load to, say, just one activity per day until a user has mastery of that, and then scale it back up to continue to give them a fitting challenge.
Enlighten is available for iOS on the App Store right now, and will be hitting the Play Store in the coming months
What made you decide to use/switch to React Native?
My path to using React Native was a lot different from that of most developers, I think. I’m a solo founder, and year or so ago when I started working on Enlighten, I was non-technical. My degrees were in Philosophy and Psychology, so I had no formal technical training. I had always been really interested in programming but had never really gotten into it, so that interest coupled with a lack of any real alternatives led me to decide to just teach myself how to code from scratch.
React Native was the natural choice for me. The important things were that it was beginner-friendly and would be able to accomplish what I want to do with Enlighten. With respect to the former, I think React Native is about as beginner friendly as it’s gonna get when trying to go straight into building production-ready mobile apps. The component-based system is easy to wrap your head around and JavaScript is a good language for beginners, especially compared to the more daunting Swift/Objective-C combo I would have been faced with had I chosen to go the native development route. The second major draw for me I mentioned above was just how good React Native is. It performs very well and can do just about anything you need. The native look and feel were important to me, and this checked those boxes. There are other reasons on account of which I would now recommend React Native, but these weren’t a part of my original decision making process, so I’ll touch on these later. At the time it primarily boiled down to accessibility for a beginner and the fact that I didn’t feel like I would need to compromise quality to attain this level of accessibility.
For better or for worse, I have strong perfectionistic inclinations, and had React Native’s accessibility come at a cost, I couldn’t have brought myself to use it. I’m not sure where that would have left me today but I’m happy I don’t have to think about it. The cross-platform functionality was a cherry on top.
How did you transition to React Native?
I graduated college last year and at first wanted to travel for a while using money I had saved up from running a small landscaping/lawn mowing operation with a friend throughout our high school and college years. I did a two week sampler trip of sorts right after graduation, and for a variety of reasons came to the immediate conclusion that the traveling idea would not be happening. I always knew that I wanted to start my own company, and was especially interested in tech companies, but at that time I didn’t have a specific idea in mind. So I spent that summer back home trying to figure out what I wanted to do, kicked around a few ideas, and eventually started to develop the idea for Enlighten. I spent a while researching and fleshing out the idea, but then the time came to actually build something.
Like I mentioned above, I had no real programming experience when I started with React Native. I had dabbled some before, but never extensively and nothing ever stuck. I was starting from scratch. I decided I wanted to use React Native to build Enlighten and just dove right in. I first learned JavaScript/coding essentials for a few days, and then from there just started the Enlighten project with CRNA and began learning while building. It’s a rather haphazard approach, laying foundations for a large, production-scale application when you don’t even know what you’re doing, but it turned out just fine. I was uninformed, but I was aware of this and so I was very careful in everything I did early on. The process wasn’t always smooth, but I was committed to it and I made it work. I think React Native was really the best option I could have hoped for as a beginner, so I’m pretty lucky in that regard given how lacking in domain knowledge I was at the time and the fact that I actually proceeded with React Native against the recommendation of some friends.
Have your tried other cross platform technologies before using React Native?
I have not. I don’t really have much of value to add here since my programming experience outside of React Native is so limited.
What has your experience been working with React Native in terms of app performance, have you noticed any impacts?
Unfortunately I don’t really have anything to benchmark it against, given my lack of native development experience. But I can say that I think Enlighten performs well and feels native.
How has adopting React Native affected developer productivity?
Again, my case is an oddity because I have no prior experience to compare it to. That being said, I am quite certain that I would not have been able to do what I’ve done with React Native using another development environment. I feel that anytime I’m building new features, the vast majority of the work really feels like I’m working on the meat of the feature and that there’s relatively little boilerplate. Someone with a broader range of experience may disagree but my perception of how it impacts my workflow is largely positive. And I haven’t even built for Android yet! I’m at once interested, excited, and nervous about what starting working on the Android version will be like. But of course an incredible amount of time is going to be saved compared to if I had to start from scratch for Android. I’m very happy with what it’s enabled me to do. Especially now that I’m up and running with it it’s a pretty frictionless experience.
Which tools, libraries and frameworks are part of your development process with React Native?
Xcode is my sole IDE since I haven’t built for Android yet. I write in VSCode, which I like a lot. I use Chrome developer tools for debugging. I started working on Enlighten in Expo and ejected after a little while in order to use packages that require linking. But to be honest I was so unexperienced at the time that the functions I ejected for may have been things I could’ve accomplished in Expo. I don’t really know and have no real reason to look into it, because post-eject development has been fine. I have four different build configurations which can be a bit tricky. react-native-schemes-manager helps with this. It basically automates the process of configuring your dependencies for each build scheme. Redux is pretty great for state management. Clean and simple once you learn the ropes.
What resources have you used to learn React Native? Books, tutorials, courses etc. Anything you can recommend?
Oh Lord. Everything. Reading StackOverflow issues and Medium articles by the thousands. I found Codecademy helpful for picking up basic JavaScript. I use Mozilla’s JavaScript documentation when I need to for reference to this day. The React Native documentation was a necessary read. I still reference it regularly. The Complete React Native and Redux course on Udemy was very helpful for me when getting started. I highly recommend that to beginners if they’re going to be taking the Redux path. But really just what I said at first—everything. Being resourceful and turning to Google and StackOverflow when you’re having trouble with something. Or even when something is going well but perhaps there could be a better way. Resourcefulness is a critical skill for a developer.
What are some things that you don’t like about React Native or that need to be improved?
The open-source nature of the React Native ecosystem is at once its greatest strength and a major weakness. The ability to use third-party packages enables so much functionality and really is wonderful. It also means that you have to deal with making sure your package versions are compatible when updating React Native or other dependencies. And packages are liable to be abandoned at any time. Bugs pile up and sometimes maintainers disappear, and you’ve integrated this package into the fabric of your app and are now stuck with code you didn’t write trying to figure out what’s going wrong. And the fact that this is all non-native means that edge cases will pop up where a module fails to handle what less complicated native code could have gotten done. Having experience in Objective-C would definitely be helpful for a React Native developer, because it means that if a package is giving you trouble or you want to add functionality, or you need to write some native code, you can just dive in and solve the problem yourself.
Anything else you would like to mention?
Improving Enlighten to better serve people in the pursuit of meaningful, joy-filled lives is my ultimate goal. I’d love for anyone reading this to download and check it out if they can. If you have any feedback, I seriously want to hear it, so please email me at kevin@enlightenlabs.com.
You can find Enlighten on the App Store by searching Enlighten—Wellbeing Simplified or check out the website. And I’m hiring, so if you have any interest or know someone who might, let me know!