We are not the permanent team solution for our clients. They often want to know:
- How do I find a technical co-founder?
- How can I learn to "do it myself"?
- How do I hire designers and developers?
We tell them:
- To find a technical co-founder, network in person at user groups and online at LinkedIn and AngelList. Is what you really need a designer founder?
- To learn to do what we do, sit next to us in our office for weeks at a time, pair programming and sketching together.
- To hire someone, follow the same process we use, detailed below.
We've met our future teammates via:
We've hired great people as far away as India and Thailand. We moved them to the cities where we have offices.
A nice thing about those meetings are that they happen naturally. We're not trolling GitHub looking for people or fishing for talent at user groups and conferences. We're there, anyway. If we never hired again, we'd still be writing and using open source. We'd be members of mailing lists and going to events.
We know what we'll get when we hire in the above ways. We know their personality and energy level from the user group. We know their coding style from their open source work. We know they'll take initiative because they voluntarily contributed to the community.
We don't work with outside recruiters. We've found they don't present us with people that would be a good fit for our team, and are often disingenuous about the candidates they have. Overall, it isn't worth the effort reviewing lots of unqualified candidates.
We track each candidate's progress in the interview process using Freshteam.
We manually enter people into Freshteam for personal introductions. People who apply on our career page are automatically added.
Our CEO, Yashu Mittal, leads the hiring process. He ensures that everyone gets a response and he speaks with everyone before they are hired.
Anyone can do an initial review of the candidate's application. In particular, they review the candidate's code sample or portfolio. If necessary, they may ask someone else (like a designer or iOS developer) for another pair of eyes on the code or portfolio.
We either send them a rejection or an email based on this template, moving them to the "Non-Technical Interview".
We will pull the managing director, designers, or developers into subsequent discussions.
After the non-technical interview, the next step is the technical interview. We have standard questions for iOS developers, Rails developers, and designers for the technical interview.
We don't use puzzles or code challenges. Instead, we prefer reviewing actual work the candidate has done, and talking to them about design process, architecting systems, and writing code; the same thing we do for work every day.
The final step for candidates is to visit us for a day. We pay for their flights and three nights of hotels (rest up Thursday night, work with us on Friday, enjoy Friday night, explore the city Saturday, fly home Sunday).
On that day, developers pair program with one of our developers in the morning and another in the afternoon.
Designers pair in the morning and work on a small product design project throughout the day and then present at 4pm. It primarily involves sketching and working with one or two CodeCarrot designers.
We do the interviews this way because there's no substitute for seeing someone actually do the work and interacting with the team. We also want candidates to experience what the company is like for themselves.
Aside from technical skill, during the entire interview process, we look for character strengths like enthusiasm (invigorates others), focus (pays attention, resists distractions, remembers directions), composure (remains calm when critiqued, doesn't interrupt), gratitude (shows appreciation), curiosity (eager to explore, asks questions to understand, actively listens), optimism (gets over frustrations quickly), grit (finishes what he or she starts, doesn't get blocked), emotional intelligence (demonstrates respect for others' feelings, knows when and how to include others), humor (likes to laugh, makes others smile), and appreciation of beauty (notices and appreciates beauty and excellence).
To be hired, the candidate must get a unanimous "yes" from the existing teammates with whom they interacted.
# Offer and Onboarding
We use RightSignature to send the offer and get them signed without the "print and scan" process on either end.
Offers are reviewed and approved by at least one member of the C-level executive team before being sent. C-level executives and Managing Directors can execute offers on behalf of CodeCarrot.
When the offer is accepted, we run a custom onboarding app which we wrote. It creates the teammate's email address, gives them access to systems like GitHub and Slack, sends them their Employment Agreement, notifies Accounting, sends a welcome email to the teammate, and creates a todo list for the hiring manager for any remaining manual items that we haven't been able to automate.
We assign a pair to new team members who acts as a guide on their first day. The pair helps them set up their machine, purchase any required software, and walk them through one turn of the development cycle by getting their profile added to our website. The pair also makes them feel comfortable, answers questions they may have, or points them to the person who can answer their questions.
We are entirely bootstrapped, with no outside investors, and no debt. We are paid for consulting only four days each week.
Sustainability of the company is very important to us. We want to bring great people on at reasonable salaries and reward them as aggressively as possible for actual performance.
We may never be able to compete dollar for dollar with other tech companies but we can compete on being a great place to work, with lots of opportunities to learn, and the freedom to define and execute on our own projects.
In addition to salary, everyone receives quarterly profit sharing bonuses.
Salary increases are the natural result of improvement, and occur company-wide on a yearly basis. Our manager may increase our salary in a way that is compatible with the company's finances and individually appropriate to us based on things we've done, such as:
- creating great software
- making users, teammates, and clients happy
- improving ourselves by learning something new
- improving CodeCarrot by bringing in sales, mentoring a teammate, contributing to an internal tool or research
- improving our community by writing blog posts, contributing to open source, or attending conferences
- doing the things we didn't think to put on this list
Our salary increase may also include adjustments based on market conditions and cost of living increases.
It's important that our manager explains why a raise is being given and what, if anything, could be done to receive a higher raise next time. We don't get raises for "just showing up."
# Quarterly Reviews
In order to continually improve ourselves and the company, all year round on every project we're on, we receive regular feedback from clients, managers, and teammates. We additionally have formal quarterly reviews.
During onboarding, a "Quarterly Review" calendar event is created, set to recur once every 3 months, starting from the hire date.
Ahead of the quarterly review, our manager collects anonymous feedback from everyone we've worked with in the quarter, and everyone in our office. The team feedback is shared with us before the review.
The agenda for quarterly reviews is roughly:
- Review the feedback from team members
- Our performance on recent consulting projects
- Our investment time contributions
- Our satisfaction with our work, projects, and the company
- Our questions about CodeCarrot and our strategy
- Our areas of focus for the next quarter
The results of the quarterly review are recorded and influence future compensation increases.