Kenneth Ponders His Time as an Ona Intern
Kenneth joined us three months ago as our youngest ever intern. In this post, he writes about getting a sense of what being a software engineer at Ona is all about.
Prologue
When I got an email from Ona inviting me for an interview, I couldn’t believe my luck. Though I just finished a full-time course at Moringa School, I still very much considered myself fresh from high school and the idea of being in a work environment was surreal to me.
The interview was really great. The code test I did was projected to a larger screen for the interviewers to see. I did the interview in JavaScript which is a joy to write. Later on, I got an email saying I had been accepted for the internship. #Winning
Working at Ona
My first day at Ona was hardly forgettable. Mostly because I was at the office at 7:30 am (that’s 1.5 hours before people get to the office). Ninety minutes is a long time: a football match takes ninety minutes.
Eventually, Rosalia got to the office and showed me to my desk where a MacBook Pro was awaiting me. However, Apple keyboards have their own keymapping so it took a while to know whether Ctrl+C
meant using control
or Cmd
. That was fun.
I was told I’d be working on Facebook Messenger bots and was paired with Njagi. Njagi, who I fancy was my code mentor and brogrammer (yes brogrammer!), had some ideological differences from myself:
- I was a sucker for GUI applications while he did almost everything over the terminal.
Kenneth: Is that Emacs you're using? Cool!
Njagi: Yeah! Do you know other Emacs users?
Kenneth: I know a guy who only used Vim.
I later came to know that Emacs and Vim users are mortal enemies, so I had made a terrible comparison. LOL.
- Njagi preferred spaces over tabs. 🙁
Even though, I haven’t worked at many places, I have to admit developers at Ona are as excited to teach you something as they are to learn from you. Especially when you meet people like Mark: the voice of the weak. The weak in this case being fans of JavaScript and PHP. (But we all know JavaScript is not weak. Am I right?) Mark was also always happy. I mean always.
To help with learning, Ona’s engineering team has a tech forum every fortnight to share interesting things they use either in their work or just stuff that would be great to know.
Outside of work, Ona is part of developer groups like NairobiLUG (LUG stands for Linux, Unix and GNU). I actually got to speak on the first NairobiLUG I attended where I talked about HTTP/2. The demo code is here. For my first ever presentation, it went pretty well. None of the attendees knew I actually code on Windows at home. That’s some double agent stuff right there. 😉
The Actual Coding Experience
Time for a bad joke guys, 😀
What is the favourite programming language for devs at Ona?
It's C.
Ba Dum Tss!
Get it? Ona means “see” so the devs like using the language C…
Bad jokes aside, Ona majorly uses functional programming in their stack (Clojure, ClojureScript, Haskell, Python, JavaScript) except for their Android stack (Java) and the bots. Having only used OOP before it was interesting to use some functional programming principles on my Messenger bot work.
Test-driven development is highly valued at Ona. When I heard that we were going to test if our bot would be able to withstand a large number of users, I was amazed to learn stress tests would be used for that purpose. We used Tsung for the stress tests. Tsung is written in Erlang, but the tests are defined in XML. Here’s an example of a stress test where a user visits a server every second for a whole minute:
<?xml version="1.0" encoding="UTF-8"?>
<!--The DOCTYPE tag points to the version of Tsung your system will use-->
<!DOCTYPE tsung SYSTEM "/usr/local/Cellar/tsung/1.7.0/share/tsung/tsung-1.0.dtd" [] >
<!--Everything in Tsung happens between the tsung tags-->
<tsung loglevel="info">
<clients>
<!--Clients in this case are the users-->
<client host="localhost" use_controller_vm="true" maxusers="20000"/>
</clients>
<servers>
<server host="localhost" port="3000" type="tcp"></server>
</servers>
<load>
<arrivalphase phase="1" duration="1" unit="minute">
<users arrivalrate="1" unit="second"></users>
</arrivalphase>
</load>
<sessions>
<session name="home" probability="100" type="ts_http">
<request>
<!--The http tag includes the route the users are visiting-->
<http url="/" method="GET"
version="1.1" content_type="application/json"
>
</request>
</session>
</sessions>
</tsung>
Seems like a lot of markup for a test right? And it doesn’t even have added logic and data yet. But it is really not hard to set up, and chances are you never even have to use Erlang itself. I also had the chance to build Docker images for our projects and deploy them to Docker hub, which was genuinely fun.
Ordinarily you pay people to learn skills from them, but I can’t put a price on the skills I gained while at Ona. A full 5-star experience as an intern here.