How it Feels Working in Incubit
I joined Incubit more than two years ago. Some asked me what it is like to work at Incubit and I think it deserves a blog. Since I am a web developer in Incubit, I will describe the company from the web team's point of view.
I will describe the culture company-wise and (web) team-wise.
We embrace transparency. Every week we have a meeting to update the status of projects to teams, and the status of upcoming or potential clients. We also have a quarterly all-hands meeting which demos our achievements, R&D results, strategy for the following quarter, and even financial status of the company. I really like having such transparent information, which helps me prepare earlier for the tactic in the short term or strategy in the long term.
Open mind. During the meeting, we can always ask questions to anyone. Everyone is equal here, so if anyone has a better idea, we can always replace the current one. If someone has a new idea for a product, he/she just needs to make a slide and propose it to the team. Recently, we were trying to come up with a product name for some internal tools, and many funny names were accepted and discussed!
Work-life Balance. Everyone loves new ideas, and that will not come out if life is occupied by work. We are encouraged to have side projects and different types of life to bring up new ideas. The company does not care how long or how we work, as long as we have the output. I am benefited a lot from this culture, and it allows me to spend more time with my family. I am even encouraged to learn things totally different from my working experience like machine learning, and I believe this will bring more ideas to me and to the company in the future.
Everything can be challenged. You can always discuss anything with the team. We believe everyone is professional enough to make a reasonable decision.
Don't vote, convince. If you have different opinions to your teammate, convince them with anything you can prove. The owner should make the final decision.
Don't be afraid to change. There's no silver bullet, so if you have difficulty in making a decision, take the relatively better one (at the moment) and move on. Create another discussion for it afterward if necessary.
No one knows everything. No one is perfect. Discuss the technical issue with your teammate who is the expert in the field and make a decision together.
Look for ways rather than excuses. Before you give up, look harder for a solution. There is always an alternative way.
Deliver the result you can be proud of. Avoid the situation - you do your best but you are not proud of it.
Be serious, but not that serious. Don't say "What the hell are you doing?", say "May I ask you what the hell are you doing, please?" instead.
We currently have two teams, AI and web. AI is our main competitiveness in recent years so and we build everything surrounding it. We make tools for data-pre and post-processing, infrastructure for model training and deployment, and anything can make the work easier.
I am in web team and things the team is doing are relatively traditional. AI stuff is like a planet to me, all the things I build are satellites surrounding it to make it work smoother. The interesting part is, the tools we built to support AI team are becoming a standalone galaxy gradually! We are building a spin-out with those tools as an ecosystem for image recognition.
In web team, we only have two roles - team lead and team member. Here are the responsibilities of them:
Be a guardian of culture. Sometimes people would break the culture rule, you should remind them of the culture at the moment. And so do you.
Be responsible for the performance of the team. You should have a reasonable schedule for the project you are working on, make sure everyone is delivering their best and make things on the right track.
Embrace the culture. Join it or change it, a culture can not be formed without your participation.
Do your best. You are here because you are an expert in some fields. We rely on you and believe you can contribute your best to the project/product.
We want to work with not just talented, but also culture-fitted people. So even though I feel overloaded because of our picky hiring, the matched teammates can help us move stronger and faster in the long run.
I work remotely for about a year already so the main communicating method to me is via Slack. And due to COVID-19, the company has worked remotely for around a month as well. Slack is still our main communicating tool, along with Google Doc and Slide. For meetings, we use Zoom (yeah I know...). Besides meetings, we tend to communicate asynchronously because we don't have strict working hours and some like to work in the morning and some evening.
Every quarter or half a year we meet each other face to face either in Japan or Taiwan because sometimes it is clearer in idea-expression than video communication.
I love this face to face communication periodically because most of the time the work I need to do is on a computer, and sometimes discuss on video call. A quarter or half a year to meet each other makes me feel warmer between people and utilize the time more efficiently.
I am not sure about the workflow of the AI team so I will only describe the web team.
Product owner (or anyone) analyzes the requirement and makes it as a slide, the requirement can either come from our client or figure on our own. Then the slide is proposed to the team members to see if it's really necessary or can be better.
Once the proposal is done, we then split it into tasks for engineers to implement. During the implementation, we tend to start from UI, and check with product owner once it's done. After the UI is confirmed we then carry on the back-end part.
Even if all the steps are confirmed, we can still discuss or modify them if necessary. But every discussion and modification takes time so we tend to clarify the requirement at the very beginning.
The main web app We use Ruby on Rails, VueJS for complicated web components, and Ansible for server provisioning. For other API only stuff, we use ExpressJS. For AI server, we use Flask for now. Most of the services are built on AWS and some on Heroku.
We use Docker for the development environment and planning to move to Kubernetes for AI infrastructure.
We have only little test code coverage and we are adding more since the product has passed the MVP status. I was proud of my code quality but it went down since everything was on fire. After increasing our test code coverage I think it's time to bring it back to glory!
Nowaday the web is splitted into multiple fields like back-end, front-end, SRE, etc. I like it because it means the technology is getting deeper in each field and, we know when to go deeper and when to go wider.
If you are interested in our company, we are hiring!