My job (Jolly Good Coder, “CEO and CTO”) at Jolly Good Code is finished. I learned an immense amount of things. Working at Jolly Good Code motivated me and help me become a better engineer I am today. Endless thanks to my Jolly Good Colleagues: Winston Teo Yong Wei and Chew Choon Keat! I'm eternally humble and grateful to have the honor and pleasure to work with them, and learn from them.
I joined Jolly Good Code in its early stage around Mid-July 2014 as Employee #1 (yea :victory_hand:). The following is my story worked there and some things I learned along the way.
How I got hired we need to fast backwards to RubyConf Taiwan 2014. Winston came to Taiwan and gave a talk: Happy Teams. The talk was great and was very interesting for me (Still awesome, recommend you check out). This is my first conference ever. The talk was like a delightful light, shines my gloomy life. So I gathered my courage and approached him to talk more about it. This is how we knew each other. Then after the conference, we went to the RubyKaraoke (My first Ruby Karaoke :heart: ever). THAT WAS A GREAT NIGHT!
Around that time I just finished my last job and then one day I saw Winston wants to hire someone to help his company on Facebook. I applied and with an interview. Then voilà, I joined Jolly Good Code! :tada:
I think the main reason Winston hired me was because: We sang a perfect duet together at the #RubyKaraoke party after the conference :wink:, and another reason maybe is because I contribute to Open Source:
So important lessons noted here:
- Go to the Conference and Talk to People :speech_balloon:
- Join the (Ruby Karaoke) Party :studio_microphone::beers: and Make Friends :two_men_holding_hands::couple::two_women_holding_hands:
- Contribute to Open Source :chipmunk:
- Facebook can be good if you use correctly, see I got a job :smirk:
This job is also my first time working remotely full-time. That was a lot of challenges. I enjoy life without pants, read the bible, and many other stuff over these two years. Working remotely could be 12 hours a day or 4 hours a day. It is all about trust and responsibility. Async communication is key. We have three persons in total based in Singapore (2) & Taiwan (1). No time difference between Singapore and Taiwan (but why fly from Taipei to Singapore took 5-hour :scream:) and we're Remote-First. Time Zone is less of an issue for us.
Everything in Winston talk: Happy Teams were all checked!
-
Hire For The Right Fit
Hired me, so this one is easily checked :cake::sunglasses:
-
Realistic Planning
We make frequent, small releases of working application through frequent communication and weekly iterations on the project. And Winston talks to clients that manages priorities so well, so I always got enough of time to do any task. :spiral_calendar_pad:
-
Open Communication
In Chinese culture this is a rare thing. Asian people actually never speak up. They hide their thoughts till the day they can't take it anymore. But my great fellow Singaporeans changed me. I can actually speak up with literally ANYTHING. When I see something wrong, I can say it, I can comfortably reach out any time. We are respectful in seeking and giving open and honest feedback to each other frequently.
-
Daily Status Updates
We update to each other whenever we need in a day. Daily updates help build trust and maintain momentum.
-
Code Review / Pair Programming
Strong Code Review culture from a “single space missing” to “general implementations” on GitHub, pivotal-style pair programming via Slack plugin: Screenhero.
-
Code Style Guides
At first we nitpicking styles by ourselves. But that hurts and should be solved by automated tools. We've tried rubocop, PullReview, CodeClimate, forked houndci, and houndci service.
-
Write Tests
I can proudly say we never ship a project to our clients without tests. Our Internal & Open Source projects has decent test coverage! And I learned a lot of testing knowledge at Jolly Good Code. I even dare to give a talk about testing and started to write a book about testing (Book in Chinese and very WIP :sweat:, though).
-
Continuous Integration / Deployment
We use Travis CI and Codeship for Continuous Integration, Automatic deploys on heroku. We even take one-step further and built a Continuous Updates service called deppbot.
-
Automation
Yes! We always try to automate routinely happened task by writing our own tool or just use paid services to solve. An example is: we need to ship latest project to our clients, that's why we created deppbot. You should because the time saved as illustrated by this great xkcd:
-
Team Learning Activities
We have a Slack channel #share to share literally anything and discuss them. Learn from books, screencasts, and workshops are all available. Also learning through Code Review.
-
Retrospectives / Feedback Sessions
On the first week from this job, Winston did an MVP application in few hours that was very similar to Know Your Company. The application sent personal retrospective me an email every Friday afternoon with series of questions that Winston put up or I can write anything as feedback. And monthly Retrospective sessions, a simple
:) Meh :(
columns with Google Spreadsheets to reflect my thoughts! -
Go Home
I work from home :joy: But... I have never been asked to work overtime, not even once! Winston is always very generous and flexible about my plans and schedules. Always wants me to have good rest :sob:
With a happy team and chosen right language and tool, we do client work, consultancy, training and created some products, open source, and spread our love of Ruby, and better ways of Engineering.
I remember the first project I did was to rewrite a joomla website into Ruby on Rails in three months :scream: I did many client projects at Jolly Good Code, from MVP to maintain legacy code. With these projects I participate, practice and learn agile practices in action, embrace tools like Pivotal Tracker and Trello. Practicing TDD, refactoring, fixing tests, trying out new gems / patterns / ways, wrote Unit / Integration tests, code review, leverage GitHub flow, feature branch, frequent rebases, merge with style, help debug memory leaks, tune app performances, secure the app data, all aspects of web application.
Disclaimer: These products are not failed, they're just not succeeded yet :sweat_smile:!
-
Automated Security and Dependency Updates for your Ruby project, listed on GitHub Integration page.
-
Rediscover those saved and forgotten bookmarks. Here is a post that summarized the learnings from building reread.io.
-
A job site that want to let other developers “rebase” their life by their favorable cultures. And solving our own problem.
-
A simple and beautiful material-based dashboard for your projects. Explore Turbolinks 3 (That was pretty bleedingly edge at the time) and Test Parallelizations.
Winston always wants to find a way to give back to the community. So he taught Ruby on Rails in Singapore. I once had a chance to Singapore and help him with a Ruby on Rails training at an Enterprise together and later on more trainings evolved and a WIP Rails book was born.
Given the current circumstances, did the simplest thing that could possibly work.
Simplest thing goes hand in hand with the principle of “good enough”. I am the kind of person seeking for (the level of) perfection (I can achieve for now). So was very frustrated at first, now I learned how to find the balance. Make the best decision at the moment.
Choonkeat's Twitter has this line in bio:
i solve problems
Which is very cool! I think he can solve any problem if he is not busy changing diapers :)
I hope one day I can be a great problem solver like him.
If stuck for too long, let's say 30 minutes, seek for help. Because nothing is real until it is shipped, and maybe now isn't a good time, take a break and come back at it.
If today the code does not fit our need anymore, we need to throw it away. Everything could be changed.
No one ever has everything figured out if you don't ask questions, things are always changing, we need to ask a lot of questions in order to figure things out.
Jolly Good Code is a company that you can make any kind of mistakes and no blames whatsoever! I found it is important to make mistakes so you learn and gain experiences.
I suggest to Winston that we abuse GitHub like a Pro. That's why we use GitHub issues as our blog. Because GitHub has the best UI & UX for our target readers and everyone already got an account, ready to comment on. Some of the posts I am proud of:
Winston and Choonkeat helped me almost about everything. They're not only great developers, but also great mentors. At the end of day, it is group of people (a company) doing work. So helping others is actually helping yourself, too.
The most important thing from Matz's philosophy on Ruby:
Ruby is designed to make programmers happy.
-- Matz
We are passionate about being Jolly, producing Good work, and writing Code. It's Software Craftsmanship (ソフトウェア職人). Committed to ethics and morals, integrity.
12 various talks given! I am a rather shy person actually, this couldn't be done without the encouragement by my Jolly Good Fellows!
I love going to meetups and conferences. It is a way to prevent burn out and refill my passions of working. Jolly Good Code enables me to attend / travel to these conferences / meetups:
- Local Meetups in Taiwan
- RubyConfChina 2016
- RubyConf Taiwan 2014, 2015, 2016
- Rails Pacific 2014, 2016
- Ruby Kaigi 2014, 2015, 2016
- RubyConf Philippines 2016
- RedDotRubyConf 2015, 2016
- RubySG, KopiJS :point_left: Don't miss them if you visit Singapore
- Many times to Tokyo for Asakusa.rb (The best meetup you must attend if you visit Tokyo)
I shared many reasons Why I attend conferences post by awesome Lim Chee Aun). I traveled to many meetups and conferences, met many nice Rubyists, all people I met are super lovely, and made friends with amazing people all over the world.
Winston did excellent jobs organized RedDotRubyConf, he organized RedDotRubyConf for more than half of decade and show me how professionalism is like! He often kindly asks me about my opinions and let me be part of it. He even published a conference playbook at the end.
I got "OK, have fun and enjoy" every time when I said: Can I use some of the work time to contribute to events like Rails Girls, Rails Bridge, and GitHub Patchwork. Those Aha moments are the most valuable things also it feels so good to help people.
With the job at Jolly Good Code, I was able to maintain the Chinese locale of Ruby Official Website (I'm probably maintaining forever) and translated tons of documentations like Ruby on Rails doctrine, and Rails Guides, a variety of style guides.
Before I joined Jolly Good Code, I already contributed to Open Source sometimes. But since day one, explicitly in the first email, Winston wrote to me, and I quote:
At the same time, I want you to continue to contribute to open source,
in the ways that you are already doing. Don't stop.
So I contributed more to Open Source, I got many internet points on my GitHub profile :grin::
At Jolly Good Code, we love using open source software as it makes us nimble and productive. We love even more to create open source software and contribute back to the community! Jolly Good Code has produced many Open Source tools:
- New way to solve Image Upload: attache
- Organize your JavaScript and CSS, flash messages: rails_utils
- Integrate Twitter Emojis in your Ruby application: twemoji
- and many more
Last year around July, my mom got Stroke. That was super tough times for me but Winston & Choonkeat gave me every possible support that friend, colleague could ever give. For that, I couldn't thank them more! :bow:
I am very blessed to have the opportunity to work at Jolly Good Code with great people. I was so lucky to have work with Winston and Choonkeat who helped me through the bumps in the road. I got constant praises and kind words with everything I did. This makes me feel the work I did was appreciated. I received loads of great advice from them, I was so lucky to have got on this journey.
Singapore & RubySG community has became a very special place (+ the great food, good startup scene) in my heart (I even cried when I saw the news that Joseph Schooling won the gold medal :cry:). We have a guide for you if you visit Singapore.
Also, never stop learning and growing your knowledge! :)
-- Winston Teo Yong Wei
I will pack these Jolly Good Lessons to whatever adventures ahead with me. It's a lot like leaving home. Winston is like my founding father of my underdeveloped software career. And Choonkeat always give me a sharp perspective to look at problems, he solves problems swiftly, I still have a lot to learn. But all good things has an end...
Now I will remember those Jolly Good Memories, lessons, spirits and became a Jolly Good Fellow. Lastly I want to say:
To my lovely Jolly Good Fellow that make me feel welcomed, trusted, appreciated, and respected on a daily basis, it has been a blessing to work with you all, and my sincere wishes for you, your life, your families :tada:
You guys rock and enrich my life. Thank you all for being awesome. :bow:
:rainbow: Jolly Good Fellows at RedDotRubyConf 2016 after party :wind_chime:
Yea, I ord loh :wave::sunglasses:
Love :kissing_heart:,
Juanito Fatas