My Internship at Bloom

Cryptocurrency, working remote, and more!

I applied as an Intern Software Engineer at Bloom last August 2018. For the span of 15 weeks, I learned many things, mostly about cryptocurrency and how it works.

I stumbled upon Bloom when I was searching for companies that is involved with crypto. I visited their site then found that they’re using Ruby/Rails in their stack. I applied because I was interested on learning how crypto works and the tech behind it, plus they’re using Rails in their stack which I am using in building simple web apps. I sent my application through email along with my resume. After a couple of days, Ramon, the CTO of Bloom, replied to my application. We did an online interview, and I got accepted.

Working on projects

On my first week, I was tasked to learn about Stellar. Stellar is a platform that connects banks, payments systems, and people. Here at Bloom, we follow test-driven development or TDD for short. TDD is writing the tests first as a guide on how should the scenario execute, and then the tests will tell you if the expected results from the scenario was fulfilled or not. Bloom builds apps using Stellar’s Ruby libraries. The Stellar test network, or the main Stellar playground for developers is the Stellar Laboratory. I used the test network to visualize how a transaction or process in Stellar work. First, I learned how to generate an account, fund it and pay other accounts. Then I was tasked to create a Ruby gem called stellar_spectrum. It is an open source project that lets the user of the gem to utilize Stellar payment channels with ease. Ramon discussed me the details on how should the gem work.

I got to learn how to use Sidekiq and Redis. While working on the gem, I always get confused because it is actually my first time using stellar_sdk and my first time in building a real gem. I failed many times, so I got Ramon to help me. We wrote the tests cases with RSpec.

After working on stellar_spectrum, I worked on another project called stellar_multisig. stellar_multisig is a Rails Engine that aims to secure transactions through Multisignatures. It was like creating a Ruby gem, but with models, controllers and routes. Working on stellar_multisig is fun because I got to hone my skills on TDD and building RESTful APIs.

Expectations and realizations

My first expectations on the company was that I thought it would be hard and stressful, given that I am still studying. It turns out that it was actually fun, having to meet new people and experience a different culture compared when I’m at the university. One problem I sometimes experience is the traffic. I’m from Manila, and when I go to the office at Makati, I always experience heavy traffic. I travel by bus, and the supposed 20 to 45 minute travel time from Manila to Makati suddenly become 1 hour and a half, worst case scenario, 2 hours. On the other hand, when I decide not to go to the office, I do remote work. I realized that doing remote work saves you time, money and effort, especially that I do internships while I’m attending classes at my uni. I also realized that being on a real working environment brings more joy and learning than attending typical university classes. Lastly, I realized that I could’ve done more in my 15 weeks of internship. I’ve always thought of my school activities, that I’m suddenly forgetting my responsibility as an intern.

Lessons learned and experiences on internship

Adopting TDD in your workflow isn’t bad

I hear many people say that writing tests is a nuisance in programming because the belief is that “you’re gonna finish, test and correct the code anyway, why make the development slower by writing another set of code?” I disagree on that because writing tests first can actually make your thinking faster. As you write the tests, you’re giving yourself an overview on what code you will write. If the code fails, then you just got to tweak your code a little bit then test it again. Plus, when you are following TDD, you get to prioritize on the more vital process of the system, avoiding the “this should’ve worked” scenario that is common on apps without unit tests. Adopting TDD also helps you to identify erroneous or buggy code that can potentially harm in production, that is why it is suitable for an iterative and agile development. My Medium article on building Rails Engine with TDD is here.

1-on-1 meetings with your manager

Having a 1-on-1 meeting with your manager gives you an opportunity to grow more not only as an employee, but also as a person. If your manager conducts 1-on-1, you have the chance to strengthen your working relationship with your manager. 1-on-1 is a great avenue for coaching and feedback, so you will definitely learn a lot. 1-on-1 also gives you the opportunity to bring out things you want to talk about, may it be problems or issues in the office. Having a 1-on-1 session with your manager also helps you in knowing more about the company and its people.

Two-way communication between you and your manager is the best way of learning. You get the chance to speak and listen and your manager also get the chance to speak and listen. This 1-on-1 conversation is the best avenue of your career development because you get to ask the person who is most likely a senior who has a lot of experience in the field. This is the opportunity you wouldn’t want to miss, as you can ask tips on how to tackle problems in your field. It also makes you more performant employee, by asking how do you do, and 1-on-1 also boosts your self-confidence.

Me, as an intern, having 1-on-1 talks with Ramon really helped me foresee what career will I take after I graduate. He advised me on what work environment should an employee take based on the employee’s needs and wants.

Working remotely/ remote pairing

Now, this is one of the best experiences I had when I’m on Bloom. I really got the chance of working remotely. Working remotely gives a lot of benefits: save the time from traveling through traffic, save money from the fare and increase of productivity. I also got to experience remote pairing, which is real-time coding with someone remotely. Working remotely is really fun, plus it makes me more productive because I have a partner to help me solve an issue.

Trying out unfamiliar tools that enhance workflow and productivity

Working at Bloom made me try unfamiliar tools also. I learned how to use the good ole infamous Vim. This badboy really made me search Google many times on my first week of using it. It took a lot of time before I got used to it. I tried the Vim-Bootstrap site to generate my .vimrc configuration file. It comes with NERDTree and silver searcher. vim-surround is not shipped with it, so you must install it manually.

Next is tmate, which enables us to pair remotely on the terminal through SSH. This is the perfect tool for people who code in terminal, like Vim or Emacs. tmate is what we use at Bloom when we are pair programming and want to share a terminal session.

I also got to use RSpec and FactoryBot for TDD. These tools is super efficient when building Rails apps or gems. FactoryBot is used for creating test data, and RSpec for creating unit tests.

Communication is the key

Whenever I have a problem in a code, I will search first the problem. If I don’t understand the problem, then I will ask to my co-devs. The people here at Bloom are approachable, and they won’t hesitate to help. Even in the office, whenever I ask something, they reply right away. Also the work environment here at Bloom is nice.

Summary

Learning cryptocurrency is great. It opens a big opportunity for transactions and payments to be secure. Here at Bloom, we use Stellar technology in building apps. I applied an internship at Bloom, and had a lot of fun. I got to try many things like following the TDD way while building apps/ Ruby gems, using vim as a text editor and many more. I also got to try working remotely, remote pairing and 1-on-1 talks with my boss.

It was a great experience working here at Bloom. I really learned a lot not only as a software engineer but also as a future professional person. I really like the people here at Bloom because they are always accommodating and nice. I realized I could’ve done more, but I wish this is not the end of my journey in the blockchain technology.

If you are finding an internship as a software engineer, inclined in learning crypto and knows how to code in Ruby, then I definitely recommend taking an internship here at Bloom.