Disclaimer: This picture has absolutely nothing to do with the following post. But it shows someone coding. And has the Enki logo in it.

Behind the scenes at Enki — Episode 1

Spyros Psychogios
Enki Blog
Published in
6 min readMar 1, 2016

--

Since Enki’s beta release we’ve been working hard to fix issues and iterate on the app. We decided that it was time to give you all some insight on what is keeping us busy; our new features, the things we broke and fixed, and what we’re currently working on.

New stuff:

Sorry Android users, we’ll ‘materialize’ this soon!
  • Skip/Go back options in the workout. We heard a lot of requests to go back to an insight so users can favourite it, comment on it or change their review. We now added this option on the top right corner of the UI. This was quite the UI challenge since we had decided from early on that swiping for feedback should be the “core” interaction. Still, we understand some users want to skip an insight if they find it irrelevant, wrong or inappropriate for their training, and this is feedback we’ll also be taking into account.
  • Material(-ish) UI for Android. We started out developing Enki just for iPhone but seeing how a lot (more than half) of the people who answered our questionnaire (thank you!) are android users, we made a port for Android using the same codebase. Since then, we’ve been working on differentiating UI elements between the two, starting with the main insight actions (comment, favourite & share). We’re aware there’s still more to do and we’re working on it!

Under the hood

  • Re-do it with redux. You might have heard about this hanging about in the ether. This magic new framework, inspired by the Flux model that has been sweeping the React and JS community. We did, and we decided to refactor our app with redux handling everything that’s happening under the hood. It has been a very interesting experience so far and we’re very excited to see this brave new framework grow and be adopted by more and more projects.
  • Recommendation algorithm. As our database of insights grows, we’re constantly trying to improve how to combine our somewhat atomic insights to form the perfect workout for you. For example, we have now added relationships between different insights so you always see the introduction to subjects before you dig deeper into the specifics.
  • Devops. We’ve reworked our infrastructure and now we can deploy new features even faster with the help of Docker, Gitlab and Rundeck. Our monitoring has also improved significantly in order to ensure that we prepare a workout for each of you every day. Last but not least, we’re getting ready for more users so we’ve moved to AWS and set up Docker Swarm to be able to scale at any time.

Fixed stuff:

  • UI. We’ve made some changes in the UI to make things clearer and more accessible:
  • Topic selection: it wasn’t clear that different levels could be selected when we were still using the “bubbles” which got bigger with more taps (hey, Apple did it, why couldn’t we?). So we switched to just displaying the available difficulty levels.
  • Hidden Actions: Insight actions used to be hidden behind the top bar and you had to pull the insight down to reveal. That was just too much noise to do something as simple as favouriting an insight so we made them directly available at a bottom bar and a Floating Action Button.
  • Onboarding: Though this makes this little difference to existing users, we’ve updated our onboarding process to make interactions clearer to everyone. If you’ve already been through the process, you can’t see it again but it now involves animations, flashing buttons, cats, dogs and a Michael Bay movie (I swear it does).
Just look at this lovely 12s loading time…
  • Recent Performance issues. We recently noticed a significant increase at the app’s loading time. In direct correlation, we also noticed an increase in users complaining about performance issues. After looking into it we found the culprit and… (drum roll) it was our new code highlighting library. We recently switched from Highlightjs to Prismjs to highlight the code examples in our insights, mainly due to Prism’s support of ReactJS/JSX syntax (and we ❤ React). The loading time on iPhone wasn’t affected much, but on Android, users started reporting loading times of up to 18 seconds (!). Once we looked into it, we realised (with deep embarrassment) that we were shipping Prism’s code for every single supported language (even including brainfuck and LOLCode). This has now been fixed, and performance greatly improved:
  • Workout not prepared. Our daily workout preparation job failed on Saturday, February 20th and a lot of people didn’t get their workout that day. We experienced problems with our backend but didn’t realise early enough so some users were affected. We are very sorry that some people lost their streak and for that reason we introduced a (slightly dirty and hacky) fix that will still count that day in your streak.
  • Sign-up/Log-in issues. Trying to fix Android’s backstack, we broke some parts of the navigation that meant users were redirected outside the main app instead of the Home page when they logged in. We rolled back the changes and this has also been fixed now.
  • Android backstack. We tried to fix it. We failed and broke other things (read above). We tried again. We succeeded!

Work in Progress & Future plans:

  • Content: We have put a lot of work in improving and expanding our topics and subjects. Hundreds of new insights are ready to enter your workouts with hundreds of others currently in our review stage. We’re also working on introducing new topics, including python, git, CS Theory, Networking… One of them will be coming to an Enki device near you in the next couple of weeks. So far we have kept the content creation process in-house which means we could closely monitor the quality of insights and give everyone a good idea of our desired format. We are still hiring teachers for multiple subjects but our grand plan is to eventually open content contribution to the community!
  • Progress Tracking: Right now, a daily streak and game scores are the only things giving you a sense of your “performance” in the app. Instead, we’re working on tracking users’ progress on each topic and subtopic so they are more aware of how they’re spending their time in Enki, as well as giving them more option on what they’d like to improve on.
  • Interactive Insights: We’ve had some very positive feedback regarding our enki games but we’ve also heard users request more interaction during their lessons. We now have a working version that will quiz you on specific insights and we’re working on creating content for all our existing insights.
  • Native app: Making Enki as a hybrid app has given us a lot of advantages in our early stage. We can iterate on features much quicker, give similar levels of attention to both iOS and Android as well as push updates and fixes to installed apps without forcing users to update the app (check this out to find out how). However, as Enki is becoming more feature rich, we feel we are close to pushing the abilities of a hybrid app to its limit. So we’re planning on releasing native apps for Android & iOS before releasing the app’s public version.
  • Blog posts: Like this one (recursion joke, too meta?), with more to come.

It’s a very exciting time for us and we’re thrilled to have our users be part of it. Our plates are full but we’re all hungry to advance and to learn through the process. If you’re a fellow software developer then you are most likely familiar with this feeling and that is why we’re building enki! We want you to become part of our journey — if you’re already a user please submit your best ideas and biggest pains here. Or if you’ve stumbled on this post and read this far then you should join us!

Until next time,

Enki on

--

--