Becoming a CTO
juokaz.com
juokaz.com
Ever been through an acquisition where 50% of the team was to be let go and you had to decide who and then tell them? Kill off a product after the team had almost completed it? Perform a lay off when times got bad? Give a serious, reasoned, estimated answer to the question (from the CEO): "How fast could we rewrite our entire code base from $FOO to Java?" Fire someone 20 years older than you and wonder quietly to yourself if he'd find another job? Manage more than a handful of engineers? Figure out how to outsource part of your development to India for financial reasons? Deal with a rapidly expanding customer base with creaking code? Manage a multi-million dollar budget when VCs aren't throwing money at you? Handle alleged sexual harassment? Spend hours and hours flying from customer to customer to explain your technology?
The 'pick which technology' to use part is easy and fun. Now go make that work in a real environment with real constraints.
My advice on becoming a CTO: learn how to write. You'll be spending a very large amount of time communicating your ideas.
Again, not intending to disrepect anyone, but that was my impression when reading this article -- I didn't feel like I was really listening to what my idea of a CTO is.
I think it's tempting for people to just say, well yes that's true, but there is no great line that is crossed that makes the distinction obvious.
Let's face it.. title is one of the currencies of a startup. You want me to work for below market wage? Sure. I want equity to profit if we succeed, and I want a title that keeps me from having people hired over my head as we grow.
I don't think that just a title will protect you. If you can handle managing 5 people but don't have the skills to manage 50 people, it's not going to be in the company's best interests to keep you on as the CTO. So you'll be offered the following options:
- Accept a demotion and report to the new CTO
- Be fired from your job and get replaced by the new CTO
If the company wants to avoid this unpleasantness, they can call your role something other than CTO, e.g., "Director of Development". Then, if the company grows, they can either promote you to CTO or hire a CTO to be your boss, depending on how promising you are.
If your title is Director someone might reasonably even assume there was a CTO above you at the tiny company, and you were a "director" or "vp" by being actually the absolute lowest man on the totem pole.
As meaningless as "CTO" is, having a title worse than that could be seen as non-meaningless as a negative signal.
These two things together render the term nearly meaningless.
I want a title that indicates that I'm the manager of a group of devs and that I also have final call on the technical side of the company.
Any ideas?
I make it a habit of not telling people my official title, unless I'm emailing support at one of our service providers...
There's large swaths of CTOs who are only hired to code at early stage startups.
CTO is a real title with many overloaded definitions.
The duties also vastly depend on the industry/vertical.
Eg: I'm a CTO for an infra startup that sells to large companies. Part of my job is technology direction, part of it is sales, part of it is keeping the engineering team happy, and part of it is coding.
I'm imagining a CTO for a more cookie cutter SAAS startup would have a some overlap but a lot of differences.
A lot of my job is just aligning code being written to revenue and attaching ROI to projects being done.
I've become a way better communicator over the years by sheer force. Otherwise you can't get much done.
Technology at the end of the day is about delivering value to customers. A big part of the CTO's job is making sure that that happens.
Duties tend to change as teams grow too. The CTO title is a moving definition. Company vertical/business model and stage matter quite a bit here.
I would say overall, when you're small, you're just doing what a founder does: filling in the gaps till you are ready to hire someone better than you for the role you hand off.
The other day there was a thread about the Google CTO test. I thought the entire thing was nothing less than ridiculous. I've hired many engineers and management over time. I don't care about anything someone can solve by having two bookcases full of relevant books by their desk.
I care about how the person things and how they solve problems they never had to face before.
None of the technologies I've worked with during the last 20 years existed when I was in school. FPGA's, for example, required a deep dive into a new universe of hardware design. The foundation helped, of course, but nobody would have hired me at the start of my first FPGA project, yet I developed technology for my own business that resulted in millions of dollars in sales.
The case is similar for management. I've been CTO/VP a couple of times before launching my own businesses. Didn't know what I was doing. I thought it was a technical job. Eventually I would joke that I had more business books by my bedside than engineering books anywhere in the house.
A person who is good at problem solving can learn and become good at anything. Be it CTO or developing the next ground-breaking idea in AI. That's why I don't care about resume's and truly senseless programming quiz interviews. They are useless.
As a CTO, my team knows I do not need to approve what the team wants in regards to TDD or how many environments they feel they need. We operate in a mode of "do whats best" and engineers smarter than me sure as shit dont need me to rubber stamp approval of writing unit tests. I absolutely create an environment that encourages high quality products and a robust testing process. How they accomplish that is up to them.
A good CTO is a bullshit deflector. And sometimes that bullshit is in the form of "Why should an engineer have to consider decades-long maintenance timelines including projects he or she isn't even associated with?" Sometimes the CTO needs to say "No" to a proposal, but the benefit to the engineer is the rest of the time they're isolated from having to think about impacts they don't want to.*
*All of this is only applicable to orgs past a certain size
> Sometime down the road legacy applications become expensive to manage,
> but rewrites almost always deliver zero value to the customer.
What a weird thing for a CTO to say. Even in my role, I can justify a rewrite by identifying the savings in support, maintenance, and infrastructure, and balance that against the time for the project & make a call that in 6/12/X months, we will have recovered the cost of the rewrite & be saving the company month money (which then can be used to develop more user-facing features, improve performance, etc.)It's not all that weird for a startup CTO / technical cofounder to say, because in those companies velocity is king, queen and the jack of diamonds; rewriting code is a waste because you're only worried about the next milestone, which is no more than six to nine months out.
Mature orgs operate at a different cadence, where your analysis is spot on. (Unfortunately, it often doesn't hold for them either; I've had contracts where I ended up scoping in IT project valuation methodologies so CTOs and/or IT managers could learn how to translate savings into defensible balance-sheet numbers, since the business would only accept "real" savings or revenue enhancement as justification.)
What do you do better than other people that justifies your title?
I'd argue that the technology department should be very independent and empowered when it comes to the _technology_ decision making process. I'm less convinced that that's true for the product decision making process. I've worked in places where Product Managers and designers wrote all the requirements and dictated the look and feel down to the pixel, tossing it over the wall to developers to implement. I've worked in a place without independent, dedicated product professionals, where software engineering decided what the product should be. Both extremes have major weaknesses. You have to find the right spot on the spectrum between the two that works for the company and mix of talent you have. It's not all or nothing.
I am a product manager - I spend some days arguing, civilly but intensely with the architects and engineering teams on what should be done and why.
This conflict - these "battles" so to speak, ultimately lead to the best results IMO. I push for something, the engineers push for something else, and in the end we end up building the best possible product for the customer - it's both what they want and technically sound.
Keep in mind when I say this I don't mean an immature argument calling people names etc. - it's intense but it's always respectable and all parties know and recognize that the best idea wins - regardless of who it comes from.
Front end services do have product managers. But the product managers are really conduits between the engineers and the customers. They look at what customers are asking for, the results of focus groups, etc, and then create A/B tests for those things. Then they convince the engineers that it's a good idea based on their well researched ideas. Usually the engineer agrees.
So basically in all cases the engineers are setting the direction for the product, but for the front end services, the product managers help them by doing what they are good at, which is converting customer thoughts into engineering ideas.
As a CTO myself, I strongly disagree with this. Yes, a dev team needs to tend to it's own ideas, but no, it shouldn't be making product decisions. You should have product and design teams that tease out user problems and come up with solutions. In that sense, the dev team does simply implement the ideas of the company. They still make technical decisions of course, but not product or UX decisions.
Engineers dont want a "script for implementation". They want to exhibit autonomy and creativity to the product as much as everyone else, especially product managers. I am not saying they should be product managers in a vacuum, but every good CTO knows the value of ownership and autonomy of a product is extremely rewarding to engineers.
I think your comment is an (IMHO incorrect) blanket statement that is impossible to apply to all engineers.
Having dedicated people understanding what users want, what competitors are doing and what are the future directions of the market is probably necessary and worth dedicating serious time to.
It is just how people organize teams right now that seems a little broken; a Product Manager and 'their' team. This leads to the Engineers who like to innovate becoming bored and finding smart ways to get out of the 'typingpool'. This innovative talent is really necessary to scale product teams though, e.g. spotting common patterns across code bases. With that loss in innovation companies suddenly find a comparable feature that took 2 weeks taking 2 months.
Also as technology evolves new features previously impossible become possible. A Product Manager probably will not see this.
Perhaps there is a more 'ownership' heavy way of organizing Engineers. Something a bit more democratic like having a pool of ideas coming from Product Designers and Engineers. Self forming teams can come together to deliver whatever motivates them.
No offense to the mentioned, but the "ideas are like assholes, everyone has one" comment seems to apply extremely accurately to non-technical design and product teams who are blessed by management to throw things over to "those technical people" without any concern.
And why would a 2 week task not take 2 months under that structure? If your high-performing, creative engineers are sisyphean implementers of someone else's features without some empowerment, ownership, and accolades for the end result, good luck retaining them.
2. Not every engineer yearns to be a Product Manager. Sure, many want to make product decisions but don't want to do the other necessary work that comes with the role (like market research, metrics and analytics, managing the schedule and budget, writing PRDs, communicating with customers and partners, dealing with Legal, making sure the user manual is accurate, coordinating releases with ops and tech support, etc.) I think some techies think being a PM means merely sitting in your cube dreaming up a feature and saying "This Shall Be".
3. Good PMs most definitely need to stay on top of technology as it evolves. They need to know their platforms' capabilities and when new things become possible.
2> Nobody is saying they should be product managers, I am just suggesting they want more direct input to the shape of the product itself (not suggesting ALL engineers either)
3> Agreed, and PMs should continue to be good at this, its a core part of their role, understanding the ecosystem
Collaboration and communication is key, but responsibility is ultimately with each group, design with design, problem prioritization with product, and technical design with the development group.
However, separate teams for product and design easily leads to the organisational antipattern where every feature implemented has to go through handoff between multiple teams. First product teams decide what to do, then design teams design it and hand off to UX for testing and later hand off to dev with full specification for building. When dev find that the designed/tested approach won't work due to implementation realities then it gets handed back over to the other team and so on.
Changes can take a really long time to get implemented and often no one team is fully aware of everything from the tech challenges/limitations, the cost of different approaches, the design implications, and the value of different options. Each team also has different and often conflicting motivations. Ops teams want reliability, Product want to move fast, Design want consistency. It's challenging to make good decisions on the tradeoffs in this model.
An alternative to this is vertically sliced teams where each team has all of the specialities embedded within it in order to look after a product. That means Dev, Product, Design, UX, Ops etc specialities within the team. They can then work together to add value to the product rapidly without handoffs between teams.
When cross-functional teams work well they understand both the cost and value opportunities of things they could work on, and can propose and implement features quickly and without top-down command and control.
We're doing this at Omada Health.
It comes with its own challenges, though, as every organization:
- the leadership team needs to accept a more bottom up approach to decision making (ie LT give direction and strategy, has a power of creating teams and defining their goal, but teams decide _how_ to reach these goals)
- goals and KPIs need to be clear to everyone in the org, and in the team themselves
- you need to be clear on the values of your teams at large or individually (focus on learning/exploration? Design "quality"? Timeliness of projects?)
- you also need a certain type of teammates. Ones that sometimes can accept unclarity, ones that want to be part of whole product development lifecycle
When you have these ingredients, it's beautiful to see unfold.
Having communicated these to the product and design teams, the devs must understand the tasks still get prioritized according to business needs and customer measured preference. No dev team should be implementing major UX decisions that aren't supported by data.
But as a consultant, I want to actually get paid, and paid well. If I work on ill-conceived design put together by an incompetent product team or an inexperienced founder, I'm also much more likely to have to push hard to get paid for each milestone. So I only consult when it's clear that I can add strategic value and that my client really understands their market. Once I'm sure those conditions are met, I can help them on the technology side.
When I ask my clients probing questions about their product plans, they generally seem quite happy that I care. And yes, I have advised some of them that PHP would have been a terrible choice for their technical requirements. A large part of the value a senior consultant brings is knowing how far out on the bleeding edge is wise for a given company, product and team. You want a good balance of development speed and a reasonably mature ecosystem.
Why do you think a developer should have decision making power in the area of design? They are not trained in design and UX. Conversely would you be ok with designers or other non-technical people dictating technical decisions? Of course not!
Engineering can and should have an advisory role in addition to an implementation role.
Every product is designed, but if you have no UX people then the design is done either by product managers or by technical people, neither of whom are qualified to be doing that.
Being good at development or some other domain doesn't necessarily correlate with being good at design. Developers understand that their trade takes time and effort to learn, it amazes me that some of them can't understand that it's the same for other domains.
If the solutions are technical, it makes no sense whatsoever not to include the tech team in the solutions.
I can't tell you how many times I've been given a "solution" that was needlessly complex at the technical level because the product team thought it was "easy" and were "helping" the tech team out. Product people often have no idea which approaches make sense technically, and worse, apparently no intuition about tech. It's amazing, really.
Having people from the technical side in there early also means helps to spread understanding of why something is designed as it is.
Being a CTO doesn’t mean you are the craziest hacker on the team.
In actuality, writing code is probably the last thing you will be doing.
Not entirely true. This is a typical "You Mileage May Vary" scenario, in actuality. From all the small startup teams (headcount less than 15) that I've worked at in the past decade, CTO must be the role who leads in coding - in almost all the cases the first version of the software product was 100% done by CTOs because small agile teams don't have the luxury to be managing instead of doing and EVERYONE (even CEOs) wears a lot of hats.After bootstrap and rounds of fundings, things will change for sure. But CTOs at very early startups are definitely more about doing less about managing IMMO.
Instead of saying "The definition of CTO is evolving" which is rather contradictory, a definition to make something distinct and clear, it would be better to frame it as that person's role is evolving, and that their title of CTO is not indicative of their actual role.
>It’s easy to accidentally become a CTO by getting hired by a small company with no other developers, like you would see in most startups. But while the title might say “Chief Technology Officer,” it is probably just a fancy acronym for an “overworked developer.”
About 4 articles down the article is about why PHP doesn't suck. This amuses me for some reason.
If I thought slagging PHP in a blog would get us more hires, I'd do it without hesitation.
I can do that, if you really couldn't do it yourself. It's not uncommon at all.
Like I said, I don't do it because I don't think it would help. But in some cases, it can definitely help. How many startups use their dedication to a specific (incrementally more modern) tech stack as a perk while hiring? Quite a few, and these often have subtly disparaging remarks baked in. And I've absolutely had success hiring and growing my team by explaining why we use Clojure over stock java whenever possible.
and imo explanation of why you use one technology over another is not equal to just a "PHP sucks!" blog post.
A CTO isn't a technology evangelist for or against that technology. The role is to get the most out of whatever technology the company is using. If talking down weaknesses in one technology and talking up strengths in another helps find hires looking for the technology the company is using or shows the strength of the company in being able to address those weaknesses or take advantage of those strengths, then that's good for the company.
CCP Games is probably certain someone else can do without Stackless Python. The folks at Facebook don't care if you use PHP or Hack at some other company. Booking.com is perfectly happy for you to use Python, Java, Forth, Haskell, or whatever at your company but they sponsor Perl conferences. Those companies will continue selling their in-house stack and its advantages. They'll continue pointing out where one solution grew creaky and they improved it with something else (like Facebook and Hack). They do that because it's good for them.
[0] https://www.linkedin.com/pulse/five-flavors-being-cto-matt-t...
Sometime down the road legacy applications become expensive to
manage, but rewrites almost always deliver zero value to the
customer. It’s about balancing development efforts.
Well said. What is the guarantee that the rewrite would be relatively free from technical debt? I've seen several 100K lines of code being produced in rewrites that add absolutely no value -- neither in terms of performance, reliability, maintenance or even code readability.Being a CTO also means that "age" matters. Not because you are not smart but because you haven't worked with people enough to become a CTO. A person on his 20s or early 30, maybe has lots of technical experience already but definitely not the social skills to lead an organisation.
I remember I was interviewed once by a 25 years old "CTO" in a suit and really it was a nightmare!
> I’ve sat in a few roundtables with fellow CTOs: This is kinda of what I don't like. We the "CTOs" gather to say "our" things and write blog posts about it.
I wish more people would realize this.
I disagree. Sure no immediate value, but in the long run? You could argue certain rewrites would mean faster product development, less bug proneness, happier developers. All of these deliver value to your customers.
When the company I work for was being started, a technical advisor (who had sold his company months before) told us not to worry a lot about the first codebase, because we were going to throw that away after some time. I am deffinitely sure even what we have now, will get obsolete in a couple of years (two at most)
For this reason, I think having a good planned rewrite (even if it is underestimated) can be good. I think the important part is understanding why the rewrite is performed, and be sure that it is done for the right reasons.
[1] http://nerds.kueski.com/the-path-to-kueski-2-0/If anything this blog post (along with others) just keeps confirming that CTO is something I never want to be.
Edit: I should also mention that it is practice at my current company that our leads basically are the ones that consider the balance of implementation details and whether we do rewrites vs. staged refactoring. Not the CTO. This definitely seems like more of an engineering call.
Titles vary so much company to company though that there's not a one-size-fits-all answer.
Check out StartupCTO.io. Would love any feedback here or on Twitter @startupctoio
"Sorry guys, the event for tonight is cancelled, turns out the tables we were to sit at are rectangular."