The "best" engineer in the world would probably tell you that "the only thing that they know is that they know nothing". They may also say that the most valuable thing that they have learned over their career is humility. There is always going to be something new and shiny to learn, things will always be breaking around you, a fake prophet will push today's ideology to sunset yesterday's. The only thing that you can do is to always be resourceful, to grow holistically as a person, and help others grow as well. Avoid any company that tries to distill these virtues inside banal presentations and check-the-box training sessions. It is better to ask an unassuming looking person inside the company if they have grown as a person, who helped them, and whom are they helping do the same. Good luck!
That's what makes the difference. And no company can make you like the software you're making, to be disciplined if you don't train yourself so and to genuinely like and enjoy what you produce. It'd be equivalent to brainwashing.
Why?
Most of the training sessions I attended or used to happen in my organisation were on very general topics. All these topics can be easily learnt via any other medium like youtube.
Instead, I have seen pair programming or code-reviews making better engineers. The organisation used to change the pair programming partners every sprint making us understand new ways of working every time. Plus reading other's code in code reviews exposes you to new patterns making you better at writing code.
How my company is trying to deal with that is by creating a library of self-paced training modules maintained by software engineers, and facilities to help anyone do that. I'm not sure it's going to achieve exactly what the OP is asking about, but I think it's better than alternatives.
We also have a private Stack Exchange server, frequent tech meetups, internal support slack channels and a bunch of other ways to interact with internal platform teams that help quite a bit.
Still, you have to walk the walk and figure things out on your own at the end of the day.
I strongly believe if you want to make it in this industry you have be self motivated to educate yourself and develop relationships with potential mentors. Nothing will come from your employer.
Trainings don't work. What does work is pair programming but you have to do this effectively. Say you have 3 buckets, frontend, backend and infrastructure. Ideally, you want to pair someone who has very full infrastructure and backend buckets, with someone who has an overflowing frontend bucket. Mix and match. There's no value in pairing two more backend oriented engineers together.
There's also no value in categorizing things in frontend and backend, if you just have a frontend engineer that throws things over the hedge to the backenders garden, you're going to have a shit shoveling contest and this doesn't work. Of course, you should still have people specialized in certain domains, but you should try to share knowledge within your team as much as possible and try to broaden's people experience instead of having people work on their own little islands. Pair someone with a backend background on a big frontend ticket with an experienced frontender and before you know it you'll have two full stack engineers that'll possibly grow to become a "10x" or whatever that means.
Code reviews are critical and it's important to have someone in your team that carries a big stick and isn't afraid to use it. This is a sensitive thing I've noticed, I've worked at companies where I wasn't the only 10x engineer, and the code reviews there were a joy because I was getting very valuable feedback. It wasn't so much that my code was wrong, but more something like `{} as MyInterface` could also be written as `
I work for the so-called "software house". They keep on asking if I want to do a cloud cert yet they don't really provide any course materials nor allow me to take time off to focus on learning. This is a very common pattern for these certs and I've seen the same in other places as well; there's always someone who wants you to get that certificate but you're never really provided with anything to help you reach that goal. It makes it feel like the entire ordeal is pointless to begin with.
Recently the client I work for started moving to Kubernetes, which we did not use previously. It took my company 6 months to organize a Kubernetes course for us. The person who prepared that course was a relatively inexperienced engineer from an another team that never used Kubernetes in production. The engineer himself tried his best but in the end that person was not a very good teacher (which I feel is the natural outcome, this person was not hired to organize course work) and we never moved past the tutorial level knowledge-wise. Personally I got nothing out of attending these sessions aside from the liability of having to work on tasks related to Kubernetes (previously we didn't work on them as it was understood that we have no training, but now that we have "training" we are supposed to pick up that work). I feel like I was tricked.
I’m expecting awesome results any time now
The difference between them and a run-of-the-mill external psych is that they can actually influence company policy (for real - hiring them was the CEOs idea). They also know the company and the people there, which helps a lot in understanding people's chemistry and habits.
In addition the company reimburses for all external training courses taken which you can even in some way say are connected to what you are doing - or want to do at work.
Does this make everyone 10x? Nope. Has it made a huge difference in the way I work? Yes.
So I don't see much benefit in training, what works much better is learning by example. Put junior engineers in a team with a 10x engineer and if they are open to it, they can quickly acquire the same mindset. But ofc this only works if the 10x engineer is a good tutor and coach as well.
Everyone who is a manager actively makes independent contributions for a not-insignificant portion of their work-week.
So, when we have 1-on-1s with them, we can actually discuss improvement avenues from the same vantage point. Not some spreadsheet pushing manager who has no clue how to measure engineer-productivity or performance.
When they do code reviews, their comments serve as an important learning opportunity, pointing out good practices/conventions, etc.
And finally, when you disagree, it's backed by the validity of your points as 2 engineers, rather than their authority as a manager vs you, their direct report.
How do professional sports clubs create 10x athletes? I expect the answer is that they don't. They seek out 10x athletes who were most likely born with certain qualities that allow them to stand out above the typical player. It would be a lot simpler for them if they could simply choose any person at random, put them through a training program, and output a star athlete but the world does not appear to work that way.
I imagine engineering isn't a whole lot different.
* Providing us the training and paying for a cloud vendor certification
* It’s a small company so team discusses all major tactical decisions
* Providing me the opportunity to implement and document a new but super fast approach to architecture that I have developed over the past three years in a personal project
* This is only the second time in my career that I am engaged all day (been in the corporate world nearly 20 years). In prior jobs I went to meetings and maybe did 1 hour of work a day. That was either because task assignment was in competent or because they were not training developers which me a 10x developer only because I do work on personal projects outside the office
It is the people who make themselves 10x
Seriously, though, even if the code itself has lots of room for improvement, the product is great and the team is competent and laid back; they trust me to take my time and do the right thing, and aren't breathing down my neck to get features out by end of sprint.
So give me the spaghetti code base with a non-toxic work environment where everybody is dedicated to incrementally fixing and improving it, any day.
Individual team members suggest trainings on a topic, and if enough people are interested they schedule a time and do it. We have book clubs, and regular developer discussion group. All of this is encouraged and on company time.
There are also more extensive multi day trainings and certifications I haven’t been part of.
We also have a monthly training stipend which accumulates.
Etc.
The value of a person engaged in software development is highly context dependent. In the last year as an "engineer" in my previous role, I made a single code commit. A one line configuration change as part of an ops rotation. When I announced I was leaving, my supervisor (and his supervisor) was sad. They threw me a party with a customized cake. How was my contribution being measured? I wasn't managing people. I wasn't coding. But I had "built" multiple products.
Someone once asked me "how do you explain to your parents what it is you do at work?" I replied "I can't even explain it to my boss."
People regarded as 10x in one situation will enter another situation and appear to fail miserably.
> What skills
Currently focusing on the cloud.
> Training frequency
Whatever I want to outside working hours (expensed), 10-15 percent of working time for long term training (over months), 100% of working time for short-term training (say a 5 day course).
> How is your next set of skills decided?
By me and my manager. Long and short term trainings need to be approved by manager, but I never heard of anyone getting denied for that.
> Is it personalized?
> Are you involved in the discussion?
Yes, I need to find and register for the courses myself.
> What are the biggest obstacles to your training?
Lack of time. For AWS - corp policies are very restrictive so it's easier to bankroll my own AWS account for training, rather than use company's accounts.
In my entire career (spanning 20 years by the year, 16 years of active time), I've only met one engineer who astonished me with his prodigious amount of _correct and clean_ output. But the downside was that engineering was his entire life; you couldn't hang out with him, because all he ever wanted to talk about was engineering.
There's a tradeoff for that kind of output.
- my company is using DataDog and they offer us training on that. Well I don't care much about DataDog; I care more about how metrics work and what's behind the curtains (e.g., time-series dbs). Chances are that DataDog will be gone soon or, most probably, it won't be used when I switch companies. So, I prefer to focus on non-hype stuff
- same for specific frameworks we use at work. In one of my past companies we were using Laravel. They offered us training on Laravel... but I just couldn't care less. I don't use Laravel anymore (not even PHP). I would have preferred trainings on more agnostic stuff like architecture/design/algorithms
And like this, tons of similar examples. So, the way I become a better engineer is by studying by myself mostly during working hours but also a bit during my own free time. I read "the classics" (i.e., books every software engineer should read), I keep myself updated with releveant technologies and work on personal projects to solidify my knowledge. It's a win-win for both myself and my current company (even if my company doesn't realize).
When I've been through the interview process, it's been very obvious that I have strong backend skills but lack on cloud and DevOps stuff, so that's what I'm focusing on now.
>Training frequency?
As of now, most of my tasks are related to cloud and CI/CD and, to be honest, I'm enjoying it a lot, it's more fun than backend to me as there's plenty of new things to explore and learn. I even feel like I might switch from backend development to Developer Experience Engineer, exploring new ways to make development, testing, deployment and initial setup faster, easier and more enjoyable, since I like to think that I know how developers feel about our current processes and what can be improved.
>How is your next set of skills decided?
I just tell my manager that there is some stuff I'd like to learn and tell them what is it.
>Is it personalized?
Yes.
>Are you involved in the discussion?
I start it.
>What are the biggest obstacles to your training?
Sometimes, when I meet a new task I have no clue how to even approach it, I feel a bit overwhelmed and unmotivated, so I take my time preparing for it and asking around for initial problem study.
I know it's not very productive, but it's an enjoyable pace for me and my company promised me a raise if I get better at cloud, DevOps, Docker and AWS stuff while I'm on my probation.
It's one of those things that is so rare that there is little in common across actual 10xers. To cherry pick any aspects of "common" 10xer backgrounds and try to apply these to "grow" a 10xer makes about as much sense, in the business domain, as finding out what Warren Buffet eats for breakfast and then doing the same expecting some kind of results-- or maybe wearing turtlenecks like Steve Jobs (people have tried).
It it far more realistic, I think, to simply strive-for and train-for valuable skills/capabilities, to seek out effective people around you and learn from them at a "ground-level" and solve problems collaboratively and thus learn their approaches, developing an intuition of how to proceed against challenges.
Here's my reasoning why the reverse would work also: Most comments on here that acknowledge the 10X programmer is a real phenomenon agree it's not about speed of writing but understanding the business's needs and finding the optimal solution, not coding the obvious one 10X as quickly. That requires a workplace where people feel safe thinking outside the box.
Much of this idea comes from this speech by John Cleese: https://www.youtube.com/watch?v=Pb5oIIPO62g
Then going from Groovy to Kotlin (using types in your advantage, functional-style where it makes sense, IDE comprehension of code, fear-less refactoring).
Now we are using Elm to replace some brittle React/Litelements/jQuery mess (sum-types, strong typing, currying, etc.)
Also I believe we should regularly discuss bad code examples, code style improvements and evolving the processes. We do this in a "retro" session at least once a month.
One of the best thing I learned is to accept to be a "bad programmer", hence I like strong typing, defensive coding styles, and smart IDEs.
My previous company had bi-weekly presentations by some engineer on a technical topic they enjoyed.
"great teams make great engineers", not vice versa
https://www.youtube.com/watch?v=XppRCB99djw&list=PLuAItjWV4p...
How do you think a team of ordinary (1x) engineers will function if you add a 10x engineer to it?
I'm my case it was like putting a car driving 100 mph where the speed limit is 10 mph. A disaster.
I think that a 10x engineer could work alone in isolation.
Base in my experience a 10x engine would also not function in a team of other 10x engineers. You need to have complete disregard for what others think and do if it's anything like my experience.
Biggest obstacle; time/energy. 40 hours with 10 hours a day invested in the job leave me with zero motivation to further do training. Risking burnout here, I need to get away.
My employer current and past has no problem teaching me what I need to know to do my present job but zero involved in progression, that's 100% on me. Obviously that's their prerogative. They all do generally pay for things I take electively, I just need to figure out what I want to do and figure out when to do it.
After having looked for opportunities for a while, I suspect being independent/in a co-op, or at least in a very employee oriented/owned shop is required to take care of your own long term development.
Right now our strategy is some combination of mentoring/pairing time, teaching concepts and how to apply them, encouraging devs to take ownership of their work and rewarding them by having them present their work to clients.
Is it working? Staff seems generally happy with that way of doing things but we aren’t measuring it.
Will continue to look for ideas here.
Today? You need 5 years of specific tools to get a job. 10 years of total experience. There are exceptions as always..
They don't. All the ones I can think of appeared before getting paid. I'd hesitate to say they are born but they're certainly not made in the corporate world.
Also to answer your first question: my company isn't.
It's about 10 years late, but it's an improvement...
2. let people have time to spike WHILE working