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.
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.
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
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. :(
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, :D
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…
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.