Morten Primdahl, CTO and Co-Founder at Zendesk
1. Scaling your tech is a challenge. Just do it.
We went from a scrappy start-up of 3 guys with everything in their heads to a big organization that can take on scalability, operations, databases and product development. If you really get passionate about business in your life, that’s where you need to go.
When you grow from a couple of dozen guys in 2009 to the size we have today, the company changes a lot all the time, and you need to adapt to that. The challenges are both technical and organizational. Scaling your business means growing fast and hiring engineers. And that’s a big global challenge. To put it that way: It’s just hard.
2. Follow your passion
Do what you like. Do what you’re passionate about. Don’t do whatever anyone else thinks. Figure out how to be yourself, and beat your own path. It’s going to be all right.
3. Face time is essential for remote teams
We use a lot of travelling to bring people together because face-to-face time is really valuable. Even though we have Skype and Google Hangouts and Flowdock, we try to bring people together a few time a year. When you join the company, you spend two weeks in San Francisco and meet the team, and get to understand the experience.
Sunil Sadasivan, CTO at Buffer
4. Roles are more important than job titles
In an unnatural hierarchy my role is considered to be the CTO. But in a natural hierarchy, someone can take on some of the roles that I have that if they feel fulfilled in that way.
Therefore at Buffer, job titles have started to feel quite odd – since most of us take on quite a few different roles.
5. Invest in yourself
Mark Cuban says “The best investment you can make is in yourself,” and it’s compounding really.
Even though it didn’t work out with my previous startup, it was probably the best thing that I had ever done because it was an investment.
I invested that time to focus on myself.
6. 100% test coverage isn’t that important
We’re not too concerned with 100% test coverage.
It’s more about using your best judgment on what’s really critical and what will break, and then add testing to it on that way.
PJ Hagerty, Team Lead at Engine Yard
7. Challenge yourself in boot camp and free online courses
There’s a huge shift going on about technology education. Technology is moving so fast as it is, and more and more people are realizing that we need to get a grip on it.
So I’ve always been an advocate of going to do the weekend rails bridge course just to challenge yourself and see if its something you’re interested in. It’s much better than spending forty grand and finding out that you didn’t really like it.
8. Test first, release often.
One of the things that we are very espoused to is the idea of testing first. There is very little that goes into our products that go public without a high standard of testing.
I don’t think there is any way to make everything a hundred percent bug proof.
Rani Angel, Head of Web development at Infragistics
9. Managing remote workers is a challenge.
The biggest challenge is definitely working on a globally dispersed team. It is a huge challenge. One of the biggest struggles is when the overlap between the times the two teams are both working is only a few hours.
The challenge is how to make sure that as a manager you are going to keep on top of everything. Plus, you want to make sure that your team is shielded from the the pain of not being in the same location.
10. Explore various industries
I would have loved to have different opportunities while I was growing up, like being able to do an internship, do some marketing, do a little bit of sales to be able to understand the areas a little better instead of having to wait so long.
Having experience at a younger age would have changed my perspective a lot more and would have made me more comfortable as I moved into the workforce.
Thomas Schranz, CEO at Blossom
11. Learn how to code no matter how old you are.
I thought: “Yeah, I can’t program, and learning to program is really complicated.” I already knew back then that there are children being younger than me but already started with programming, and I thought: “Yeah, I’m already late.” And then, just by accident, I learnt it.
I would recommend to anyone, literally anyone, in any age group to at least just start programming.
12. Learn how to say “No”
Sometimes saying “no” is harder than actually doing this thing.
I think one recurring challenge is saying “no” to requirements. If it’s from a customer, if it’s from your own team, if it’s from yourself.
Saying “no” to an idea doesn’t mean that the idea has to be bad. Saying “no” is the more taxing thing. We would have to explain it to everyone involved, convince them and then basically leave the meeting with low motivation for everyone. And just building the thing, even knowing it isn’t the right thing, is the easier thing to do.
Leif Singer, Head of Product at iDoneThis
13. Follow other developer’s practices
I think the main thing there is just to use it – to practice and to get better at it, and to follow not so much the technologies but the practices that people are exploring. Staying on top of current practices at this point is really more important for us than technology.
14. Don’t be afraid to remove features of your product
We also remove features from time to time because we realize nobody uses them or not enough people use them.
Removing the technical cruft that isn’t used anymore then is a kind of an issue because it’s not really refining the product but it’s a task. And this task goes into Asana.
Eric Elliott, Founder of Fight Poverty with Code
15. Choose your programming language wisely
16. Real-time features will be a huge (and complicated) thing for developers
We’ve got a lot more real time and collaborative features. Multiple people manipulating the state of the app at the same time is enormously complex.
I worked on the Creative Cloud team at Adobe. Creative Cloud is all about collaborating with people on creative projects. I got to see firsthand how complex managing that collaboration can be and how hard it is to make a really good user workflow for interacting with other users without stepping on each other’s toes.
Johannes Nagl, CTO at Swat.io
17. Standardise coding styles
When migrating developers from creating short-lived marketing campaigns to long-lasting, always-on SAAS-solutions, it’s a big challenge to implement a complete new mindset regarding architecture, code and sustainability.
The agency projects where often one-man-shows, where different coding styles were applied. Standardising these styles was one of the first efforts which paid out very quickly. Using tools like vagrant or continuous integration helped to focus on the product even more.
18. Developers need to internalize testing
In web development, as it’s not really a rocket science like managing a nuclear plant, I deeply believe in testing as “yet another discipline, every developer has to know and has to integrate in his/her workflow”.
So, dedicated resources are a good way to maintain an already well-established testing environment. But it’s more important that every developer has internalized testing in his/her mindset before.
Florian Motlik, CTO at Codeship
19. There’s no common understanding of the role of a CTO
The problem with the CTO role is there’s like a million books about CEOs. There’s not a lot of books about being a CTO, because it’s also so different in different companies. I’m a very external facing CTO. I don’t manage a team.
I’ve never really managed a team internally. Once we really grew, where we really needed more management, we got a VP of Engineering.
20. Infrastructure as a service will become a huge thing
The cloud is still a collection of services, and a collection of services is still something you have to manage, which I don’t like to do. What we should have is a service for that.
21. There’s a great trade off between complexity of testing and speed of testing
One of the biggest trade-offs that we see is the trade-off between the complexity of test and the speed that you want to have.
Best case, you want to test everything in every browser to make sure it work everywhere, and run the whole suite through everything. But that takes forever.
That’s a very big trade-off to do and you have to find the right balance.
Christian Braun, VP of Engineering at PAYMILL
22. Hiring great developers is a challenge.
Of course, you have different challenges as an engineering department. One major challenge is the question of how to hire good developers, because everybody wants them. You also have a challenge that you have enough developers in order to work on a lot of product improvements.
23. Make communication plain & clear
We estimate change requests with t-shirt sizes. Then the management can get a clear overview about costs and priorities.
Way more learnings
Well, besides these 23 valuable lessons, there are literally hundreds more which we’ve gathered from these outstanding interviews.
Besides the mentioned interviews, there are also way more on bugtrackers.io and I’d recommend to give them a read. We’ve gotten some great feedback on that interview series and I’m thrilled about further interview partners we keep adding to the site. Personally, I’ve gotten a huge return from these insights. And if you’ve been following bugtrackers.io, I hope you’ve also learned a lot.
So, I’m pretty curious. What’s your biggest takeaway? Let us know in the comments or on twitter.
PS: If you prefer slides, I’ve got you covered. Check out the following Slideshare presentation with some of the best lessons learned as well: