Makers, Don't Let Yourself Be Forced into the 'Manager Schedule'
blog.nuclino.com
blog.nuclino.com
Eventually, other people started asking to work 3 days a week, suggesting that they too would pull all-nighters in an effort to have 2 mid-week days off. I let a few experiments happen but sadly in most cases the result was less than 50% of what they had been previously able to accomplish.
This led to a new merit based working system when we placed emphasis on sprints and achieving. This too ended up failing because the interconnected dependandcies of sprints were always bottlenecked by the slowest operator.
The final result was the eventual departure of my most prized teammate, and mostly due to peer pressure. I often think about how I could have better allowed his brilliance while not alienating the rest of his team, but in the end I failed.
Senior Architect
Legendary Architect
"Of course not. There is only room for one Dennis Rodman on this team. In fact, you really can only have a very few Dennis Rodmans in society as a whole; otherwise, we would degenerate into anarchy."
Similarly, John Madden on Terrell Owens:
"If you hold the bus for everyone on the team, then you’ll be so late that you’ll miss the game, so you can’t do that. The bus must leave on time. However, sometimes you’ll have a player that’s so good that you hold the bus for him, but only him."
Obama got the peace prize before even entering office and EU is a study in dysfunction ...
Just want to verify my assumption that you were too small to have a "Research" or "Tech Strategy" department to move that guy into?
In my case, I eventually learned that the odd hours weren't the key to his perceived success. Instead, he used the odd hours to force us to give him only work that could be accomplished alone. We were lulled into letting him make key architecture decisions in isolation, because no one else was awake or online at the same time to discuss them.
Eventually he became the architect by virtue of operating in isolation, where we couldn't discuss his decisions. Everyone else was forced to work around his code. If he refactored the codebase in the middle of the night to make his job easier, the other team members were all forced to work around his refactor and waste time updating their PRs to match his work.
Worse yet, having someone like that on the team drives away other great employees. Eventually everyone else will get sick of accommodating the architects isolated schedule. If they have other opportunities, they'll leave.
> I often think about how I could have better allowed his brilliance while not alienating the rest of his team, but in the end I failed.
It's not on you. Brilliance and individual productivity aren't everything in a team setting. If your project must scale past a single person, you need everyone operating on the same page. It's painful in the short term to lose the quirky rockstars, but it makes for a healthier team in the long run.
You want the "quirky rockstars" as your prototypers, not your architects. Then everyone can thrive.
If you're a manager, the math of having true rockstars on your team rarely works. They take more effort to manage yet produce fractional more output (they might be 10x better than a terrible developer but they're not multiples of solid devs). So I'm way further ahead if I can focus my efforts on improving broad-based productivity 5-10% than if I cater to my rare unicorns that are 30-50% better than my average team. Something I think ICs often overlook is a focus on leverage and scale to drive big improvements.
Mind expanding on "leverage and scale" in this context?
An outlet for unicorns that keeps them away from the company bread & butter and unicorns.
The problem is there aren't many prototype gigs out there, so it's not a great specialty.
I haven't seen R&D Divisions at companies, but I'm sure something exists.
It should be possible to set up asynchronous communication channels, like a collaborative document-editing service (Google Docs, Dropbox Paper, etc).
I get that asynchronous does not always work, but it has some benefits, especially for tasks such as architecturing an app. I'd be worried if such discussions would happen only in an oral fashion, or in chat channels.
Good documentation is also invaluable, and good documentation being 1:N is often more valuable than a 1:1 synchronous discussion for certain things.
You're right that people need to be on the same page, but being on the same page should not be 5 scattered 15-minute meetings in a day on top of "Hey did you see my e-mail" and "Hey check this out" and "Hey where is that site you mentioned yesterday".
Real work gets done when people work undisturbed in blocks of time. Meetings should be scheduled such that engineers have large blocks of continuous time. Meetings should be focused on generating action items and establishing the prerequisites for those action items so that further ad hoc requests are minimized.
For example, you might find that 1pm is a good time for meetings because it accommodates all (early/late-shifted) commute schedules, is right after lunch which people need to take a break for anyway, and leaves a continuous block of work time after the meeting until the end of the day. The timing may differ in your work place but you should figure out what works best. Asking your engineers is a good first step.
I think this is a self-inflicting ailment in the tech world. Many who are ICs fancies themselves one of these mythical "rockstars" who can code the business saving solution in 24 hour benders. Management/hiring/culture in general put too much emphasis on the brilliance of a single person on the team. But as you said, there's a time and place for the brilliant IC, and that's usually the very very early stages of a business.
I've seen this sort of situation play out at my current job. We had a "rockstar" who was with us from the beginning. He was able to ship solutions extremely fast, was a fantastic eng, but loved to do things on his own schedule. He was the backbone of the eng side of the business... until he decided to take an offer somewhere else. He pulled off a crazy last 48 hour bender to wrap things up he was working on, but in his haste left behind a half-finished total rework of the back end which nobody other than him had a vision for.
We spent the next 6 months trying to understand and finish where he was going with this rework. The manager who enabled this from the beginning also left, so we were left with a bigger mess than when we started.
Sure, this particular eng got a metric ton of features shipped in our early days, but in the end ended up costing almost as much to clean up his mess as the value we got from him in the first place.
There's a way to make these situations work, but blindly enabling the whims of the rockstar is not it.
I definitely agree with this with a slight alteration....early stages of a project
Coming up with a fantastic green fields design isn't hard and represents a fraction of a percentage of the overall work.
Give me a solid engineer who can deal with all the legacy cruft and still produce a maintainable piece of software.
The hyper-productive antisocial back room whiz kid is perfect for an R&D role. They can launch off solo and come back a few weeks later with a working prototype to prove the viability of a new product line. Then, before they get bored and stop being productive, you send them off on another deep space mission to invent something else.
All the while, you have a team of less flashy but more dependable and cooperative engineers taking the prototypes and building sustainable systems and marketable products out of them.
I've done the impossible since I was in college. Still am. I'm resented by peers. Feared by less competent managers. I can't be controlled.
I have a deep sense of integrity. I refuse to compromise my morals. I will not be forced to implement anything I believe could be used for unethical purposes. I won't bury the truth.
I won't keep my mouth shut if blame is cast inappropriately. I will not see people thrown under the bus. I work too hard. I'm an over achiever. Others start to believe they are looking bad by comparison. I'm held back by them.
I work all night. I get 'er done. I care. I listen. I empathize. I'm hated.
I'm not a team player because I am able to do all the jobs but focus what I do best. I'll help you do your job better but I won't do it for you.
I won't tolerate lies. I have high standards for myself and my team. I won't fall in line.
People assume I'm arrogant but I always under promise and over deliver.
I'm lost.
There is no place for me.
I'm alone.
(btw might look into Aspergers/ASD)
Time to let go.
You're conflating lies/truth, empathy/hate, peers/team, productivity, etc all together, it's bananas.
But the basic gist is that it sounds like you're not suitable for larger companies at all. You should limit yourself to companies smaller than 50 people.
I mean, avoiding allocating memory unnecessarily is not related to moral nor ethics.
And you know.. just because you have a moral opinion doesn't mean you MUST point out divergence with others, when they pronounce their world view. I really find it unusual to point out "morals" in a topic like this one.
I had the same thought—revert the changes to get the rest of the team back on track. The problem could be that the changes could be over the course of many commits, so rolling back is complicated and almost as difficult as moving forward.
Was possible to revert, but the work needed to be done. The biggest mistake was letting this singular person take control and not let anyone else in on it. Reverting would have been a big effort as well.
Well intentioned work can still be bad or not usable or not the thing the code needs right now.
There are two kinds of ICs that I like to call capability guys and capacity guys. Capability guys can bring new skills into the organisation, and capacity guys can do the bread-and-butter work that actually pays the bills. You need to balance the two. Make sure the capacity guys benefit from learning the new skills and make sure the capability guys don’t go off on a tangent, and it can be a very enriching experience for everyone.
Most software work out there is babysitting. Oh I know, I know we’re rockstars inside.
In the early days, as the story goes, one person shipped a bunch of features. This part of the anecdote is underdeveloped, IMO. Hazy past recollections formed after emotionally processing a big shift.
Was someone bringing this up before manager and rockstar bailed? Sounds like the team and upper management as a hole lacked foresight, and this is an after the fact realization.
It’s a TEAM effort after all. Poor organization isn’t the fault of one brilliant eng or manager.
Yes, of a sort. Green fields are rare, and with the way things are today your picking up a massive pile of pre written infrastructure and libraries that you hardly look at (until they are a problem).
The rockstar mentality is not wrong, but some days you need to pick up the pack and walk up the mountain too.
The problem starts at the interview. We give people coding tests to see if they can produce, but that's less than 10% of the technical side of the job. Really we should be giving code reading tests. What does this do, is there anything wrong with it, is there anything you would change and so on.
No, your job as a manager is to understand the trade-offs of taking such risks and make a decision that fits your situation.
I.e. your competitor may capture your market with a single engaged risky engineer before you can produce anything usable with your best practice low risk team. Once they capture the market, they can stabilize later and hire your team, because you went out of business.
More often then not, innovation comes from a reduced number of people doing things differently, and it's very hard to assemble a team of engineers which is willing or even capable of doing this sort of work.
This also comes back to the "decision shielding" from working different hours: it's very common for managers or people averse to risks to try to stick to solutions they know, even if they are suboptimal or do not fit the problem very nicely.
Anyone capable of doing more will soon realize they are spending most of their time solving mismatches between what solution was used/implemented and the problem they were trying to solve. If they don't find an alternative or a way around these limitations, they will leave.
Manager may have some challenging performances lined up and the creative operator has to really toe the line, but the purpose of the team is to support that to the best of their ability.
Anything less, and the desired expression of talent might be dampened. If this is too severe expect the star to move away toward a more functional arrangement.
edit: IC = individual contributor (just found that answered somewhat deeper in another subthread)
The term is often used in reference to the engineer career track where you don’t become a manager but instead focus on technical leadership, but more generally it refers to being a leaf on the org tree.
In contrast to a lead, manager, or pm.
The IC is usually the person who actually writes software/code. (The bulk of employees at a software company are ICs)
The 48 hour push was to "finish" which didn't end up happening.
Reverting was possible, but would have been just as much work as pushing forward (since the rewrite needed to happen anyway).
I was on contract so I just left. No way was I going to deal with that environment. I lost all respect for the technical management there too. The director in charge of the project seemed to be confusing arrogance and belligerence for ability. Rather than reign in a clearly toxic employee he actually encouraged everyone to work around him and touted the benefits of the crazy XML system he was building. These benefits, of course, were no more than empty promises from the employee himself. But they were politically expedient ... the director could claim the team was building some advanced system that could potentially be reused. It gave him some cover to explain why things were taking so long to deliver.
IMO, this is the worst environment possible for development. You have directors favouring empty promises for incredibly complex systems to give them good talking points. You have toxic developers who make any dissent to their bad ideas so unpleasant that they gain control. This creates a feedback loop where good engineers see bad ideas and bad behaviour get rewarded with special treatment.
It's ironic, right?
The more fragile and over-complicated the system, the more the engineers who created the mess in the first are considered "brilliant."
I've seen this countless times.
(In defense of such engineers, it's often not their fault. They built one thing, and then management and business needs dictated a plethora of changes and technical debt against their wishes. I have been one of these engineers on occasion)
I have seen this play out multiple times - acting like asshole can make you look smarter then you are and smarter then nicer people.
First, he ended up dominating discussions, so other peoples ideas were not told. This is simple, he is having ideas and they seemingly don't.
Second, other people got criticized a lot and he did not got criticized. Hence, others looking like having bad ideas and him looking like having good ideas. Yes, criticism was actually insults and dismiss and actually actual arguments, but it unfortunately often does not matter when people make impressions.
Third, people have tendency to buffer criticism with praise. So when they criticize him for having been asshole, they will first euphemise with "low social skills" and then add something like "but he is good programmer/professional" to it. So that they dont sound biased or overly negative. Unfortunately, they rarely buffer praise with praise "he is so nice" is rarely followed with "and also good programmer" cause it feels unnecessary.
It does not work that way for every kind of asshole through, not everyone can achieve the same. But when it works this way, imo, above are factors.
He offered a grand vision for a highly-configurable system. This vision meshed with the directors desire to have such a system. He was effective in promising all of the features of such a system that the director wanted. In fact, he promised even more! To be fair to him as a developer, he was trying his best to deliver on this promise. The system as promised was beyond what he could produce.
Within the giant mess he had created were many of the elements required for the grand system, they were just buried underneath very complicated XML systems and over-engineered code. He would prototype new system features working (held together with digital tape and bubble gum) to prove viability. The fact that these features were incomplete would be hand-waved away. Of course, sooner or later the system would have to be "filled in" so that all of the details were correctly handled - which would inevitably require further massive rewrites to all systems. This gave a feeling of progress but that progress was actually hollow.
If anyone pointed out that most of the systems he was implementing were basically prototypes and would fail on any case other than the ones he used as examples - he would become extremely toxic. I mean, literal yelling matches. His tactic was to belittle anyone who pointed out issues in his design or his code. Most of the developers on the project were junior so they didn't stand up to his tirades, the rest just didn't want to deal with it. I have no idea why the director allowed that behaviour to continue but it was a regular occurrence. This meant that his examples worked barely enough and no one else could get their own code working without his input. That matched his toxic rhetoric that everyone else was just getting in the way of him getting things done. It also gave him the cover to work late nights when no one else was around, so no one would interrupt him while he completed this grand system.
This attitude of "I am so great that others are getting in my way" is now a huge red flag for me. If your attitude is "once I'm done my grand system, everyone will thank me" then I want you off my team. Your grand system will never be done and if you develop it in isolation I can guarantee it will be of no use to anyone. If you react to feedback about your grand system with "you are too stupid to understand it" then that is even worse and I cannot get rid of you fast enough. If your system cannot be understood then that is your problem, not a problem for everyone else. The fact that someone with either of those attitudes is seen as "brilliant" by anyone is a mystery to me.
Q: was the programmer in question fairly young and inexperienced? My gut tells me that these types of “brilliant programmers” flare up early on in their careers, think they are hotshots, but mature a few years into it.
I definitely believe people with those kind of negative attitudes can be reformed because I've seen it with my own eyes. Often all it takes is a supportive manager and some positive role models.
Generally speaking, this is an occurrance that is exceedingly common and extremely under-recognized in our industry.
Instead, he used the odd hours to force us to give him only
work that could be accomplished alone. We were lulled into
letting him make key architecture decisions in isolation
Our guy accomplished this via different means but the end result was the same: because of various factors, he became "architect" and essentially was able to make decisions alone. Then we had to live with them. Eventually he became the architect by virtue of operating in
isolation, where we couldn't discuss his decisions. Everyone
else was forced to work around his code.
Yyyyeeeeeeep.Our guy was genuinely, I think, the best engineer on a team of pretty good engineers. But in terms of sheer talent he was not a "10x" coder in terms of raw talent. Call him perhaps a "1.2x" or "1.5x" in terms of raw talent.
However, he was essentially able to operate as something like a "10x" talent because he got to do a lot of greenfield work, make sweeping architecture changes and decisions, and so forth. Meanwhile we were all left to deal with his fallout.
Whether or not you believe there are legitimate "10x" engineers (we'll set that debate aside for a moment) I think it is very, very obvious that we have misidentified the talent level of many engineers. Your actual output level as an engineer, be it 1x or 100x, is always a product of many factors and your actual talent level is only one of those factors.
Worse yet, having someone like that on the team drives away other great employees.
Yes. Two big reasons.1. It's not a good way to make software, obviously. Great employees want to make great software and will be frustrated.
2. It's career fucking suicide to work under somebody like that. It's impossible to shine when working under somebody like that. You can't clean up a mess as quickly as other people can create a mess. You just can't. With very rare exceptions you simply cannot mop a floor well enough to be seen as something other than a janitor.
This causes other people to have to follow the style, but it also prevents them from making something worse.
However.
Howwwwwever....
The ILLUSION of democratic (or at least collegial) meritocracy is how our faux-10x engineer pulled the wool over folks’ eyes. He gave the appearance of soliciting feedback. We had internal RFCs and everything. But in the end though he really did just push his ideas through unmolested, because he had management's blessing to do so.
Not sure how much was an intentional masquerade on his part. I think he really did think it was a meritocracy and his ideas were simply the best. It is certainly not unheard-of for folks to fail to recognize their own privilege. Whatever the case, management enabled it. He was not an awful guy in general, and I rather liked him, just not as architect-dictator.
One of his favorite tactics was to spend weeks or months coming up with something in isolation. If you raised objections he’d brush them off by demanding to know your alternative. Which was horseshit - how could you have a viable alternative when he’d had weeks to come up with his idea and you’d only had 10 seconds, especially when these "ideas" are his fulltime responsibility and your responsibility is to ship 40 or 50 hours' worth of software a week. And past experiences had taught you resistance was futile anyway, so why pour your heart into a doomed battle in this latest bit of asymmetrical warfare?
This tactic played well to management though. He looked like the brilliant idea guy and you looked like the negative Nancy. This is a very common bit of political and rhetorical warfare and you see it everywhere.
It is, essentially, a tactic that has much in common with the dreaded "Gish gallop" - you fling stuff at your opponent faster than they could possibly refute it.
https://en.wikipedia.org/wiki/Gish_gallop
The cure for this in the software simple and difficult. Managers "simply" need to be aware of this possibility. However, they also need a certain level of technical chops IMO. If they're too far removed "from the trenches" they can't accurately judge the situation.
"The cure for this in the software simple and difficult"
Apologies. This should read: "The cure for this, both in software development and
elsewhere, is both simple and difficult"Luckily, I'm out of that predicament. It was actually really hard to see it for what it was when I was in it. That environment had all the trappings of a healthy engineering culture, and sometimes it truly was healthy, but only in hindsight have I realized some of the ways in which it was deeply screwed up.
What helped was talking with former coworkers, and going to work someplace that is actually healthy. It's not totally unlike finding yourself in a healthy relationship again after being in an unhealthy one.
1) Lack of focus - everyone had their own annoying part of the system they wanted to fix badly and were not aware much about what going on elsewhere.
2) Our group of ~10 people would cost 10x of senior salaries to the company to do such architecture work. No manager would ever authorize that.
A group of 10 seems too large and counterproductive. I think a group of roughly 3 seems about right.
That worked pretty well and kept each review fairly focused.
And it was generally one of my favorite parts of the day from either end.
It’s really nice to be able to sit with a group of engineers, hear each other’s thoughts, find things you missed, and get away from the laptops for a bit to thing about new systems.
This does not mean that vision should come from a single person. Ideally, it comes from the people who are able to contribute and critique that vision (other senior developers), with the acknowledgment of the people who don't have the information to contribute or critique (the junior coder).
This harkens back to the MMM and Mills's proposal.
> The surgeon. Mills calls him a chief programmer. He personally defines the functional and performance specifications, designs the program, codes it, tests it, and writes its documentation.
> The copilot. He is the alter ego of the surgeon, able to do any part of the job, but is less experienced. His main function is to share in the design as a thinker, discussant, and evaluator. The surgeon tries ideas on him, but is not bound by his advice.
> The success of the scaling-up process depends upon the fact that the conceptual integrity of each piece has been radically improved—that the number of minds determining the design has been divided by seven. So it is possible to put 200 people on a problem and face the problem of coordinating only 20 minds, those of the surgeons.
Chapter 4 is all about conceptual integrity of a project.
> Conceptual integrity in turn dictates that the design must proceed from one mind, or from a very small number of agreeing resonant minds.
If there's someone with a proven track record of making sound decisions at the required level, often the team benefits from just following their lead.
Obviously, this can't be another case of the 4x engineer making everyone else 0.4x engineers. Fairly situational indeed.
I would agree that it certainly shouldn't be a "one person, one vote" style democracy that makes everybody exactly equal regardless of talent, dedication, experience, domain knowledge, etc!
I was a lot happier and less busy trying to be a 3x engineer making everyone else into 1.5x engineers.
That sort of work often goes unrecognized though, if you are an in-the-trenches engineer. Unless your manager is pretty hands on and spends time “in the trenches” with the team they won’t see that. Most organizations reward selfishness and punish benevolence. Not on purpose. They just can’t see it, because they are too far removed from the work and benevolence is nontrivial to measure. So it takes a back seat to trivial measures.
These days I'm more likely to fix things that bother me and then share them after they're debugged. And often after I have my fingers in something new.
It makes me wonder if the proportion of 'scratch your itch' projects wouldn't be lower if people weren't disillusioned by the process of doing something solely for other programmers.
I created a side project that became its own very successful product, and now there are a couple of other engineers in the team and I'm the "tech lead". We have a front end and backend component, and I have another brilliant full stack taking full charge of the frontend. the other two engineers are _very_ mediocre at best. The code is complex partly because I (without formal training) wrote it all myself, but also because it's a very complex priduct, not just a CRUD. I'm Constantly stymied by the fact that on the backend, asking the mediocre engineer to do something means it will take a full Sprint instead of the two hours it'll take me. The other engineers are also not able to fully understand the PRs (because the code is still too complex to them after six months joining the project) so I feel minimal upside to wait for their code reviews (which I still do anyways). I've asked to staff with better engineers but given the complexity of the product (directly query very large datasets with very complex jobs from a clean frontend) and our small orgs inability to attract great talent, I'm not getting anyone.
I'm forced with two possibilities: 1. Ask for the mediocre engineers to be removed from the team, and continue working on the backend solo (but making it actively a job to document and make it as easy as possible for a good engineer to take over after me). This would actually boost productivity 2x from what we are now frankly.
2. I stop coding fully or slow down 5x and work primarily as just someone who asks others to code. It would probably slow us down 3-4x,but I suppose it'll match the pattern of a regular team, though to what end I don't know.
Is there any advice you can give? I'm sure I'm not seeing something obvious here that I'm doing wrong, and am fully open to honest input.
In fact, I might say that pretty much every engineer will be guilty of this if they have been in the industry long enough.
It doesn't mean you're evil! It just means you're the one who created a bunch of stuff and naturally you can work with your own stuff more efficiently than others can.
In fact I actually was "this guy" with one section of the code at my old company; the one where we had the "faux 10x" architect-dictator. I did manage to achieve a fairly clean transition once my involvement in that bit of the code ended.
Ask for the mediocre engineers to be
removed from the team
It sounds like this codebase is significantly complicated that even above-average engineers might find it an uphill battle. Is this true? If so, perhaps the answers are the largely the same whether or not the mediocre engineers are replaced. "asking the mediocre engineer to do something
means it will take a full Sprint instead of
the two hours it'll take me"
"[Transitioning from coder to mgmt/mentor]
would probably slow us down 3-4x"
How many hours of useful coding do you do per day? There are a lot of studies that suggest even great engineers don't code for more than a few hours per day. I don't think I'm great, but this definitely applies to me.Maybe you could divide your time in a way that's not too painful. Perhaps you could spend a fixed 1-2 hours per day on knowledge transfer (pair programming, etc) and not impact your productivity.
Here's what I would say.
0. Get buy-in from the rest of the management/leadership team. They should fully support your efforts to get others up to speed. Tell them you are concerned about being the only one who can maintain the product effectively. They should NOT want you, personally, to remain an indispensible single point of failure. What if you leave? What if you are hit by a bus?
1. As I said above, if you can devote perhaps 25% of your week to full-time knowledge transfer, you might find that you accomplish a lot without sacrificing your other productivity unduly.
2. Pair programming is, I think, the fastest form of knowledge transfer. An hour or two of pairing with the newbie engineers at the outset of a task goes a LONG way and may save dozens of hours later in the sprint. It sounds like these engies should never, ever begin a task without this guidance from you. They will learn the code, they will learn the thought process that went into the code, and they will learn your problem-solving process.
3. Is your test suite awesome? Writing or improving tests can be an excellent way for folks to get up to speed on the code in a low risk way. And a strong test suite has long-lasting benefits. If you don't have a test suite at all, even a very rudimentary one will reap large rewards down the road.
4. I document my code (via inline code comments) more than most. My opinion is that if a bit of code represents a non-obvious technical kludge, or a bit of business logic, it should have an explanatory note. Theoretically this could be accomplished via diligent commit messages, but sifting through hundreds of commit messages is awfully tough.
5. YOUR ENGINEERS ARE PEOPLE. Working on your legacy hairball of code is... frustrating. Recognize their pain. Be sure to get them some "wins" on a regular basis so they can feel good. Praise their efforts in private, and in front of others in meetings.
Good luck to you! My email is john edmund rose "at" gmail if you want to correspond. I'd like that!
“Average” engineers manage to be productive with React, Spring, WPF[1]... These are not simple technologies. Why can’t “average” engineers be productive with my stuff?
Quite often it’s because these bigger, more complex, projects have far more comprehensive docs.
It sounds like this codebase has a fair few abstract concepts in it. Those things can be hard to understand without comments and docs explaining core concepts.
Sequence diagrams are also great. I like generating sequence diagrams from logs during automated testing so they never go out of date.
I also find it useful to have docs at the top of each class (or file) explaining 1. what its responsibilities are, and 2. what it collaborates with. Like the old CRC cards.
Obviously this stuff can drift out of date, but it’s less of a problem with the core bits of the system once they’ve settled a bit.
If they don’t exist already, it’s nice to write docs by pairing with new devs.
It is of course possible your engineers really aren’t up to the job, in which case the effort you put in to explaining things now will still make things easier for their eventual replacements.
I had all this wrong for so many years.
[1] whether these are “good” technologies is beside the point here
The primary purpose of source code is to be understandable and manipulable by other engineers. No matter how well it accomplishes its goals, it's not "good code" unless it can be understood by other people.
I question whether you're actually working with a "very complex product" - it might just be that the way you're representing it is complex. If the code is still too complex to other engineers after 6 months, it's not the engineers who are wrong. At 6 months they should deeply understand some parts of the code and have confidence about diving into and understanding other parts with some ramp-up time.
I say this as someone who writes a lot of code that other people find hard to understand because it's "clever", and it's taken me a long time to fully internalize that, when someone else can't pick it up, it's not their problem, it's mine. Code is user interface, and good user interface meets the users where they are, not where you wish they would be.
Honestly, this aspect of software engineering is really the bottom line hardest part - it's not getting a working binary out of the compiler/interpreter, it's about getting a living system to evolve well. That means nomenclature and abstractions have to be top notch, not just the algorithms.
There's an old saw about "if it's twice as hard to debug code as to write it, never write code that's more than half as clever as you're capable of, otherwise you'll by-definition be unqualified to debug it", and I think there's a lot of truth there. One of my old director of operations used to say "If you can't run the playbook at 3am after being at the bar, it still needs work", and I think that's also true of non-ops related code.
Your next step is to reorient your role: your job is no longer to ship features, your job is to make the code easier for your coworkers to execute in. You're right that you'll "stop coding" as seen by management: your new bosses are your coworkers. Treat them as your customers, have them file tickets, the whole nine yards. When you reach the point that your coworkers are faster at getting things done than you are at the moment, then you can turn your sights back to production work, but until then, your job is technical debt remediation.
I've never worked in a fantastical position like this. The only purpose of the source code that I've been a part of was to provide a real solution to a real problem, in a limited amount of time, with too few resources. Technical debt always increased slowly until features are removed or break, forcing some dedicated work.
Can I ask what industry you're involved in where code quality is held higher than profit/deadlines/solutions? I would happily make the jump.
I've actually been doing a lot of turnaround consulting with companies that took a short term mindset, got stuck, and had to step back and revamp their technical processes like you say. It's always more expensive to redo it after the fact, but I'm happy to take their money and fix their mistakes.
And that's not to say that it's not a tradeoff, but it's about being conscious of the tradeoffs involved and making reasonable choices.
(1) spaghetti code that relies on the author having a great deal of it memorized. It uses opaque types that get passed through multiple modules. There is no hard separation of modules. Consequently it’s easy for someone who knows the system to reach into any part from one part and immediately get something done. However it’s a nightmare to make changes on otherwise. Unless you have an near-eidetic memory, it will likely negate any coding skills.
(2) Strongly typed and modularized code that takes advantage of advanced language features. In this case, it requires somebody of a certain proficiency in the language, but they only need to focus on one module at a time, and the compiler will stop them from violating architectural assumptions.
And these aren’t mutually exclusive, nor are they binary.
Story time to drive home my points: I started 7 years ago, fresh out of uni with a diploma, but not enough experience, and did something overly complex, with a lot of frankly bad code. Then, 5 years ago, we expanded the team (which means I was no longer the sole developer, but we were now 2).
At first, I was not satisfied with the other developer (fresh out of uni as well). Instead of trying to fire him, I bit the bullet and answered every question, took a lot of time to explain things to him. Yes it slowed me a lot. It also forced me to up my game to make our codebase readable (not MY code, our codebase), add comments etc...
In the end, he is now a valuable team member (we are still only 2 devs, with the occasional intern) who knows most of the codebase as well, if not better, than me. It has been the case since about 3 years (it took him 6 months to have a decent development speed, and about 2 year to develop at about the same speed as me). Neither of us consider himself a "rockstar" developer and that's fine. We work as a team, and as a result our code is better, faster, more readable and as less bugs. I couldn't achieve that level alone no matter how much I tried.
To sum up: train them relentlessly, without loosing patience, and use that as an opportunity to make the codebase more readable.
You didn't mention how much time those engineers have been working with you though. Common knowledge is that it takes at least about 3 months to be proficient with a codebase you are new to. More if you are not experienced.
Second, you probably should be taking some of that time you are coding and instead extensively documenting how it works, the design methodology, and making sure the unit tests are covering the code. After all, there are many implicit decisions in the code that they have to re-discover.
If you don't have tests, it makes working on a project as a new engineer difficult because you have no guard rails to know if something broke, especially because the specification is only in your head.
If you invest in your other engineers and in the process, they will become much faster and that slow down is a temporary bump in the road.
Wikipedia says:
People with hero syndrome generally cause an
accident or disaster with the intention of
then coming in to render aid, and become the
'hero'. The reasons for this often vary.
The perpetrator may be trying to validate
their own self-worth, or be seen as brave
by others.
From that description, it sounds like the would-be "hero" in hero syndrome deliberately creates these disasters.I think things are a little less clear-cut in the sort of (common, IMO) engineering scenario I was talking about.
I feel it's often more of a systemic situation, where the company/team does not properly value the knowledge transfer, empowerment, and management skill necessary to avoid those situations.
In the specific situation I described I don't think our architect intentionally created messes, and I think probably believed at each step of the way that his actions were best for the company.
This almost sounds like bitterness coming from the other side of the team.
Not everything is a team decision and nor should it be.
Often times brilliant engineers, in order to express that brilliance, need to be left alone by over zealous managers and jealous teammates that would rather argue than get work done.
In my experience, it is not as often as you might think. The key issue comes down to brilliance coupled with selfishness.
If you look for it, you can see some common themes in these comments: "...the other team members were all forced to work around his refactor and waste time updating their PRs to match his work," or "Meanwhile we were all left to deal with his fallout," or "...this particular eng ... ended up costing almost as much to clean up his mess as the value we got from him in the first place." We have all had to work with that guy. In the early part of my career, I have been that guy.
People are not arguing because they don't understand your brilliance and are jealous of your productivity. It is because you are making their lives harder. That is what makes people bitter.
Turn the problem around: instead of asking "how can I get all of these over-zealous, jealous people to leave me alone", ask, "how can I apply my brilliance to make their lives easier instead of harder?" Unless you are doing something basically trivial, there is usually too much work for any one person to do it all by themselves, no matter how brilliant. You need those people. So help them out. You will have a much better time. And so will they.
I think you missed the point.
It's easy to operate in a vacuum. If you maneuver yourself into a position where you can only ever operate in a vacuum, you avoid the real difficult work: Coordination, communication, cooperation. That work doesn't just disappear, though. The rest of the team has to pick up the slack, fix the leftover bugs, work around the lone wolf's quirks, and so on.
If a project requires more than a single person to scale, then those people need to work together as peers. If you let one person run away with the fun work and leave everyone else to clean up the bugs and pick up the scraps, it's not a sustainable situation.
If he should have been. Then he should probably have been lead eng or something.
His authority and actions were mismatched. Management can change either side of the equation.
That sounds like a process rather than schedule issues: important architectural decisions shouldn't be performed "on the spot" but only after some sort of discussion. Preferably in writing.
> If he refactored the codebase in the middle of the night to make his job easier, the other team members were all forced to work around his refactor.
Don't you do code review? People shouldn't be able to push code without another person looking over it.
These issues would also apply to remote or off-shore workers.
"Clean up" would be things like fixing typos/docs, bumping version numbers, fixing a build script because some path/version/etc of some external dependency changed, and sure -- mostly that's fine. If you're doing proper CI, there should be little to no surprises like this in your master branch, because you shouldn't be merging branches that break the build, and the "final release" build is really no different from any other build, other than you label it "release" (or "GA" or "RTM" or whatever) after the fact.
Refactors and any thing that could be classified as an "architectural change" really must go through code review. If someone thinks their skill is so great that reviews are pointless -- I absolutely guarantee in 100% of cases that they're gravely mistaken.
If the rest of the team can't understand the changes, well, they're bad changes, full stop. This is the team working on the code base, they are the ones that have to be able to understand it. This can be fixed of course, by firing everyone and getting a better team (just kidding), helping raise the skill level of the team, or by simplifying the changes. In my experience though, if no one understands it's usually a sign of overly-complex and/or under-documented code.
Code reviews are a two-way street, and learning is not just for the reviewee -- it's a great opportunity for the reviewers to learn, too. They get to see how someone else solved a particular problem, with rationale, the opportunity to ask questions (and 80%+ of the time, a question about how/why is usually an indicator a comment in the code is missing), and "current context" (eg: it's a change that's probably been discussed in the days/weeks before).
If the changes really are good, and it's a good PR (eg, not a massive, surprise major refactor that touches thousands of lines of code) then the PR will pass easily.
And seriously, if you need to do a massive change like this in a rush right before a release, then the team probably missed something major and the release simply isn't (and was never) ready. Major refactors means brand new code, and putting brand new code into a release with no testing (not even dev testing!) is a terrible idea.
Ding ding ding. We have a winner!
A big problem with people like that is that at the end of the day, writing code or building stuff is the easy part. Communication, coordination, mentoring, onboarding, figuring shit out, etc, is the hard part.
People who hide for large parts of the day or multiple days are usually just dumping the hard part on others. Since the industry is often stuck thinking that line of codes === worth, these people seem more productive. Often, it's the polar opposite. They're freagin useless and anyone else in their situation would do the same or better. Everyone else is slower because of the increased burden (who's answering questions when Mr "I work from 5pm to midnight" isn't around?
And you can often work faster if the code is better organized and self-documenting than if you have to spend an hour meeting with another dev to understand it.
When you are in flow state you are producing a lot of output but aren't asking any questions. That turns into big, solid chunks of the system with no oversight, no consensus, no introspection, no empathy. And when someone does ask questions - because who wouldn't? - we aren't questioning a small isolated part of the architecture, we're questioning a very big piece. One that the author feels very warm feelings about because they had An Experience while writing it.
Flow state is useful, possibly great for refactoring. It's occasionally a waking nightmare for new code, and not a great experience for everyone else the rest of the time.
Also, to be frank, if his code is reverberating all over the code base like that, causing merge conflicts and re-write all over the place, he is a terrible engineer - not a brilliant engineer. He clearly had no knowledge of the basic SOLID principles, modularization, encapsulation, etc. He was a rookie blasting experiments all over the code base.
Sometimes individual people can be very focused on their particular assignment and greatly resent somebody forcing them to make even small changes. Even if those are to make a global API smaller and more consistent.
McCarthy's 1995 book "Dynamics of Software Development" has a chapter devoted to this phenomenon.
I had opportunity to see some projects that went in the wrong direction by bad architectural decisions resulting from an opposite behaviour. Every architectural decision would be made based on everyone's input where most junior people's opinions would weight the same as most experienced. In the end decisions were made primarily based on how simple the solution appears and not based on its suitability for performance, future extensibility, maintainability etc.
It's not fool-proof by any means—you can still build up processes and expectations that lead to micromanagement if your managers or culture are so inclined—but it makes the default behavior of the team distinctly less oriented towards micromanagement. You'll waste a lot less time and energy worrying about optics if people being present at a particular place and time is not an obvious signal of dedication/hard work/whatever.
Well, after a panic attack I changed my approach and asked my colleagues to write me mails instead or ask me on teams where I would only be online on certain days. Everybody just said sure, and work is finally fun again. I think I wasn't the only one either, more and more people started avoiding slack and only look into it maybe once a week.
A week later, the same manager got angry at me for not responding to client's urgent issue which was announced by Slack an hour ago.
So... yeah, closing Slack improves things, until it suddenly makes them worse.
Worked for that kind of team before. Never again.
I understand it works for some, but since it doesn't work for everyone, I can see how people would be offended by an "unfair" policy.
Sure, if there is a clear start and end, these things could work. But on creative work that could go on forever, it's easy to cut corners.
The inability to track actual output levels doesn't go away when everyone is in the office. Instead you promote the person who is best at looking busy instead of the one actually outputting the most work.
So you had a management issue rather than a worker issue.
Not meaning to devalue your comment, but this is such a bs excuse from him. Like, I definitely think about solutions to work-related problems outside of work way more times than just during my commute, and I bet that's the case for a lot of people that do any sort of intellectual work (all kinds of engineers, lawyers, researchers, accountants, etc.).
It doesn't matter if a worker is secretly pulling 80 hours or 10 hours a week instead of the 40 (apart from legal/contract issues). If he's doing less than agreed between the parties, that's a problem. If management bought his excuses, then there's a problem with management.
I don't get how anti-remote persons manage to track office workers' performance.
Either you measure output, or you don't.
There are valid arguments against remote work, usually related to communication, but performance measurement? Nah
Less likely to be employed by someone who measures your output by hours.
I love that my company has a loose work from home policy. To me that means, I can go in the zone without being interrupted, but also that I can work on those not-so rare nights of productivity boosts from like 11pm-3am.
I'm no rockstar tho. Just a regular employee with wierd productivity graphs.
In contrast to your case, the managers in our team do not do any coding at all. I imagine you are talking particularly about senior ICs.
There's a strong tendency to "watermark" your productivity, and ignore circumstances around it.
Today is a perfect example, I got to look at code only for the first hour before I got a pinged about an issue somebody thought was related to code pushed out last week. It turned out the issue had nothing to do with it, but I had to investigate that. Then I got pulled into a conversation about why a certain number was up and how we might ameliorate that; came up with a pretty simple solution someone else is implementing... but then I got asked if I still was working on some low priority ticket so I had to figure out what that was, and then my boss wanted more details in our weekly status update so I had to search up some docs and tickets and stick them in there. Right now I have 15 minutes between lunch and a meeting with HR, and no, I'm not using it productively - because how far can I really get in such a small time window?
I budget for this reality in my estimates, but often get pushback. "Is this really going to take a week?" Well, no, it's not. If all this crap was pushed out of the way it could get done in a couple days, like project X did. But the reality is I'm halfway through my workday and had at best an hour to code uninterrupted - much of which I spent checking my email and doing code reviews because I often get tagged for not doing those things often enough
There are quiet days when I can just code, and there are days like this. And even in the former category, not everything is perfect; sometimes I didn't sleep well or have other personal stuff. But the days everything went well sets the expectations, while the reality is much less predictable.
The alternative is strict hierarchies where its made clear that some people have better abilities. That comes with extra privileges (money, flexibility, etc).
The one thing you can’t get away with is pretending everyone is equal but some are more equal than others.
I say this because bipolar disorder is a protected condition under the ADA, which allows for work modification. We tend to end up in positions where deadlines are soft and there's a lot of individual work that can be done asynchronously, so there are a lot of us in software.
This may not have been the case with him, but I do think there's a lack of awareness of mental health issues in the workplace. People who struggle with mental health can still be great employees in the right circumstances. If there were better awareness that people struggle with issues like these, I think there would be fewer issues with co-workers.
However, most people cannot regularly work 48 hour shifts except under duress. (IE, their life, job, or crisis depends on it.) Many can do it once, but need a significant break afterwards.
If someone is regularly cycling like that, it very well could be a coping mechanism for bipolar.
48 hours, even once, is a serious problem.
I know it’s not healthy, but I have unresolved issues that remain unresolved after 10 years trying to get help. At least it’s not alcohol. But that’s also perhaps why people don’t see the distress.
I work to forget.
(And that was best case, if your infrastructure and deployment scripts were up-to-date. Most people's weren't; probably the ratio is only slightly better today.)
I'm still suspicious whether it was actually 48 hours straight with no rest because -- no matter how brilliant someone is -- I would be extremely leery of the code written toward the end of that session.
In my case one had genuine clinical manic episodes and was open about his mental illness; another seriously burnt out; older friends in the games industry spoke of multi-month post-launch vacations (back in the late 90s) to cool off.
Take me, for instance: as far as I know, I'm not bipolar, or anything else. The best framework for understanding myself I've found is that I'm an INFP.
Though it might look like I prefer to work in bursts and then chill out for a while, the reality is that few things stress me out more than deadlines, and getting into a flow can take a while; while I'm in it, I'm reluctant to let it go prematurely, so I end up going until I tire out, and then I need a rest, which (in a perfect world) can sometimes take two or three times as long as the preceding flow period. I'm also only really motivated internally -- doing things just because I'm supposed to is a recipe for me doing them badly, but doing things I care about is nearly always a recipe for producing very strong work.
I'm also pretty emotionally-driven (from the MBTI standpoint, I'm Fi-dominant) and am drawn towards my negative (Te-inferior), so it's no surprise that I do creative work (music) that requires lots of control and technical know-how (writing music to picture i.e. solving a problem, lots of gear to understand; this draw-towards-the-negative is why I've ended up frequenting a place like HN -- I like the control that programming gives me, even I'm still quite an amateur). This industry has terrible deadlines though, so that's still a problem that I simply endure, and do my best to work around with workflow and efficiency hacks.
Being primarily motivated by my feelings and values means that I can easily get into a slump. It's like depression, but as far as I can tell, probably not "real" depression. Just more like "Highly-Sensitive Person" living.
From the outside, I suppose that my way of being could totally be seen as bipolar or something like that. But the devil is in the details. All sorts of states can produce similar results.
Mental health disorders are very, very, very, very hard. Not giving engineers with mental health disorders the room that they need to grow is doing everyone a disservice. And yet, the stigma around mental health disorders is so high that that conversation will not happen anytime in my lifetime. At the end of the day, myself and the others like me, are pushed into the dark further and further. It really sucks, and the only place for conversation about it is in therapy and close friends. Mentioning it at work leads to risk of retaliation. So, we cope. And then people write blogs about people like us, without taking into consideration that there's likely some mental health issue going on.
And, for what it's worth, talking about things in terms of MBTI isn't helpful in a conversation about mental health disorders. You might as well be talking about horoscopes.
For example, a good friend of mine was internet-diagnosed with Schizophrenia. He believed it, and going down that rabbit hole screwed him up for a while.
Turns out that he and a long-term daily weed habit just weren't really a good mix (the paranoia led him to take it more seriously than he should have -- and the fact that "paranoia" was one of the supposed "signs" of Schizophrenia only made it more believable). He stopped smoking, and within a couple weeks saw just how ridiculous a turn things had taken.w
My point was simply that people are complex, and one single behavior isn't really enough to go around stating that a person might be X. A person can be inclined towards a certain work habit for loads of reasons.
If Greg has issues concentrating, and someone says "I know people with autism can suffer from that, and they find stimming helps", then even if Greg is not autistic, they may be well served by that advice.
That said, they won't necessarily be well served by all advice (Ask your doctor for Ritalin!), and I'd personally rather leave it to themselves and their medical practicioner to diagnose/decide whether they're actually part of any given group.
I am literally never manic. Sometimes I get pretty down -- that's it. Very well within "normal" range. And yes, I've talked with a professional about these sorts of things (when I saw a therapist for a couple of years), and the notion that I am mentally ill, beyond perhaps being a so-called "Highly-Sensitive Person" (a classification I find fuzzy and dubious, but whatever), was outright dismissed and was honestly found to be kind of laughable -- me brining it up was more a sign of my own insecurity/difficulty in accepting that I was seeing a therapist than anything else.
I don't really care to get into a discussion about Meyers-Briggs, as they don't really go anywhere on this site. If you care to read, I've explained my views on the topic elsewhere on HN in more detail: https://news.ycombinator.com/item?id=20888175
Allows for but doesn't require. Workplace accommodations for any disability have to be reasonable and it's generally up to the business to decide what's reasonable. You can sue but most businesses would not find it difficult explain why it's important for employees to be working roughly equivalent hours and in the office if that's what everyone is doing.
BTW, deciding your own hours with little direction about how you complete tasks sounds more like a contractor than an employee.
Unfortunately, he carried substance abuse and relationship issues with him as well, and eventually his health deteriorated.
When I reflect back, I realize nobody could relate to him because he was ill and needed help. Not because he was smarter or more capable than everyone else.
Consider that it's "just" a mood disorder, where mood management can be affected by random stimuli. So, their mood might be stable until some stimulus comes by. And that stimulus could just be a random memory, which can create a feedback loop. It's "fun".
In my _personal_ experience, manic phases last 2 weeks to 2 months, followed by 4-10 months of catatonia.
It is approximately the same for my aunt and grandmother. In their cases, lithium and electroconvulsive therapy were the only things that work. For me, lamotrigine and modafinil are life-changing wonder drugs.
That said, people in my group therapy reported cycles as short as days to weeks - rapid cycling, as you say.
Note that the "off time" need not be matched by a depressive episode (and in fact I find that unlikely, since depression is not very restful) -- it could simply be exhaustion hiding the symptoms of the underlying (long) manic episode.
(OTOH, there are other explanations for the weird schedule. Substance issues, unusual home life, etc. I think people generally should be tolerant of weirdness, but ready to hear about the seemingly brilliant people's awful struggles.)
The founders and executive team completely fucked it up. They kept hiring crappy/unmotivated people, prioritizing growing the team in quantity over quality, and with every added mediocre head it only amplified the morale drag when I'd be delivering huge progress after multi-day sleepless sprints while everyone else was barely getting anything done in the 9-5 office productivity theatre of standups and meetings.
I started absolutely dreading coming to the office after completing one of my kamikaze sprints. The VP of Eng had established this twisted pattern of holding a standup the moment I leisurely walked in the door at whatever hour I happened to make it in after not being seen for days, which for over a year was the weekly norm. Everyone in engineering would have little to nothing to say about their progress, and I'd drop another mother lode. It just made everyone else feel inferior, and I started to increasingly abhor their lack of progress and feel like I was the only person actually taking the opportunity seriously enough to make an effort.
It culminated in my abrupt departure three years in. And for years afterwards they failed to deliver any major new features successfully. Burned through many more millions of dollars, before eventually going bankrupt.
My mistake was not leaving earlier. That experience left such an awful taste in my mouth I've basically never made that level of sacrifice of my own life/time at another company since.
Edit:
To clarify, the hard lesson I learned at this job was that no amount of individual contribution can save a sinking ship. This particular experience was 15 years ago, and I've worked at numerous startups since, some with successful exits. I haven't seen any correlation between the amount of my contribution and the likelihood of a successful exit, absolutely none. Surely this is different for founders, but I haven't gone down that road yet. What I have seen however is some companies are far more dysfunctional than others, and the best thing you can do is learn to identify them quickly and RUN, the opportunity cost is too great.
For me, the reality was that my ego needed the boost from my perceived superiority. I had little else in my life that I Was proud of. Looking back, I understand how my behavior was an expression of a great deal of talent plus insecurity.
I've spent a lot of time working on myself, and my career and life satisfaction are significantly higher because of it.
I probably should have mentioned somewhere, I'm not that talented. I've worked enough places to know I'm just average. My apparent special ability is in the long hours department. If I commit to doing something, it's getting done, to a fault. I've been this way since my teens, staying up for days without even realizing it while figuring something out.
I'm already too introspective, you have no idea.
Me & another consultant were brought it. Early on, the client decided to put me in lead. I tried some things for 2 weeks, with them watching my screen to 'learn'.. and nothing was progressing. One day, I told them I need to work alone, spent couple nights awake, until I got a light bulb moment to process queries in parallel instead of sequentially. Found sample code on internet, modified it to work on client codebase, prepared a demo, ignored writing a 'status report' (which pissed off the Project Manager), and did a demo to the clientele of 15 managers, directors & SVP - all in the span of 2 days (wed to fri).
Guess what had happened during those 2 days behind my back? The client, PM, and my manager had decided to replace me with a more senior architect starting Monday, and were ready to take me off on Fri at 3 pm. At 1 p.m I did my demo, which literally floored them. I then came to know about the machinations, and then the PM and my manager called me at 4 p.m apologizing, and saying they definitely wanted me on the project. I told them it was a perfect storm of mis-understanding, under-communication and over-reaction, which given the project's short & intense deadline, was just part of the game, and to forget about it and move on.
During my annual review, the Client/PM/Manager called me a 'cowboy' and gave a 'poor performance' rating. I told my manager that I accept the first part as a compliment and reject the second part as incorrect judgement.
I got fired. I left with a smile on my face.
"Manager time" and a set workday are there for reasons. There is no one so brilliant that they don't need to collaborate and in order to collaborate everybody needs to be following the same book of rules.
> I often think about how I could have better allowed his brilliance while not alienating the rest of his team, but in the end I failed.
Expect your brilliant engineer to be in the office during core business hours, and if he can't brook that schedule, fire him.
I'm pretty sure I'm absorbing this massive application and all the external transactions it does pretty fast, all things considered.
If I was constantly interrupting my train of thought and research to 'sync up' or 'collaborate' or whatever other personal fear of missing out that you're strapping your team into massaging, I'd dare say I won't be a solid contributor anywhere near as fast.
Assume everyone thinks the way you do and you throw away the chance for them to excel under even a slightly different structure.
On the other hand, you had the result: failed attempts by compatriots to emulate the hero.
Maybe the problem wasn't that you had a hero, or too many non-heroes.
Maybe the problem was you.
The idea that everyone can perform the same way when given the same opportunity is local to you, the manager. Perhaps what you needed to do was recognise that some members of your team couldn't be the same kind of hero - but maybe there was another quest for them. Maybe the heroes you thought your were enabling by letting them follow the same schedule rules, really actually just needed you to let them be a different kind of hero: the kind that gets things done on a normal, 9-5, business-like schedule.
There is room for this experiment to be repeated.
If they are really brilliant and you want to keep them with special treatment, promote them with a very visible title that clearly tells other why they can not get the special treatment which he gets.
But in my opinion if you look deeply these people are more of liability than asset for a general average SWE scenario.
I've done a small number of 48 hour stints in circumstances where the need arose, and I've never in my life touched amphetamines or anything else like them.
But consistently doing this as described in the thread isn't "mania" phases of bipolar. It means one is on stimulants.
It seemed to work out well from what I observed.
10x gets flexible work hours and, more importantly, interesting and varied projects.
Team doesn't get annoyed by one odd guy, but they are still available to support them, and other teams.
And there is mentoring in there too - this system basically makes them share their knowledge and thought process with potential others like them.
EDIT: There is also a benefit of not having them be a cornerstone of any project(ie - if they leave it fails).
Much of work is theater, and the only time you should put on a show, should stretch your legs is when there is an emergency in production (its down and your not making money) every other "emergency" is bluster and poor planing.
People ask “what am I supposed to do, slow down to their pace?” That’s exactly what you’re supposed to do. Put that manic energy into things that will pay off for you later (like passive income), not make your manager’s bonus.
If the other employees want more time off, the correct solution is not to ask them to pull all nighters but just ask why. Usually extra time off can be accomodated with occasional work from home or allowing shifted start times. Or, possibly, your employees didn't even want the two days off a week -- maybe they were just feeling left behind and unappreciated that you just loved that coworker so much, and they came to perceive his odd working hours as a status symbol and reward.
It's extremely common for brilliant people to be twice exceptional. Problems like ADHD, ASD, OCD, etc. are fairly strongly associated with very high IQs.
This means if they pull an all-nighter, it's not because they pushed themselves to be productive. It's because their brain was on fire with an idea and they needed to get it all out right now and literally were incapable of sleeping until they could get it done.
That can't be replicated from the other direction. You can't say "I know! I will stay up and work all night and it will be brilliant!" That's not how that works. Not by a long shot.
"The Psychology of Computer Programming", Gerald M. Weinberg
Are you saying that would be a guaranteed liability?
If so, how good is too good? You need to be sure to let your engineers know to stop progressing before they get there.
This skill doesn't come naturally to some people, but it can be developed and it will make you more productive.
In particular, develop the ability to enforce encapsulation on your mental model of the program you are working on, so you don't need to keep the entire thing in your head all the time (this will probably make your code better too). This makes it easier to get back into the flow after being interrupted.
The most productive engineers I know work during normal business hours, get interrupted constantly because they work on important projects with a lot of stakeholders, and get a lot of work done anyway. That's what 99% of engineers should aspire to. There are very few rockstars like Carmack who are so good that the benefits of their crazy work styles outweigh the drawbacks.
I wholeheartedly disagree. You're trying to force a generation of imagination into a box. That will only destroy the very imagination you need.
----
I'm a principal engineer with a fully capable imagination, and I once got the feedback that my creativity was "transcendental"; the reality is that I don't confine myself to schedule, and my only real discipline is using English to describe my thoughts and improve as a writer.
I try very hard to get people to think out of the box, but it is really hard because 99% of the work does not require "divine inspiration". Most people gravitate towards this advice because it is most applicable, and it becomes a virtuous cycle for them.
However, it creates a vicious cycle of the Pareto distribution where 1% of engineers can actually use their max level of creativity and use the full breadth of computer science.
So, I bring up data quality, and how we need a centralized test architecture! Same. Blank. Stares... and I'm another year in on shifting the needle, while random reports spontaneously stop breaking and we wait for customers to report data outages.
Blows my mind.
So many engineers have learned this, that if you can't, you aren't competitive in the field unless you're literally in the top 0.001%, and no, you aren't.
Part of management's responsibility is to keep interruptions under control. If management does nothing so that everyone goes directly to the engineers; management isn't managing.
Specifically, this includes making sure that everyone is onboarded so newcomers don't need to go to the more experienced engineers to ask trivial questions. It also includes making sure that processes are defined and agreed on by stakeholders, making sure that people don't bypass the ticketing system, and sometimes reminding certain employees about things like manners.
Also, most people have not been described as having "no empathy for other human beings" in a psychiatric evaluation.
The mind is single-core. There's no black lotus you can huff or secret technique to master to make it more than one core. And the inertia returning to its task is significant.
[1] https://www.npr.org/sections/health-shots/2013/01/24/1701601...
I think we can say (1) engineering productivity is severely impeded by interruptions and (2) it doesn't hurt to work on skills to help yourself get less impacted by disruptions.
You're right there's no secret technique, but documenting your work and thoughts, keeping TODO lists, breaking down large work items into small chunks can all help distractions not ruin your day.
But, these are effectively "hacks" and the only way to ensure highest possible productivity is to have processes which prevent engineers from being interrupted
You can do a lot of work in parallel if you have the correct coroutine architecture. That involves encapsulating information in a way that you can put it down and pick it back up efficiently.
An upside of developing this skill is that if you become adept at storing the relevant information, you will be better at handing that information off to another person.
Further, absolute productivity at a single task is rarely the most important thing. If it is, then you've reduced yourself to a cog or a worker bee.
Taking responsibility for the direction of your work means accepting that you need to be part of the decision-making process, which will lower your absolute productivity, but (done well) will increase your overall effectiveness.
There might be a good reason why code developed under extreme focus also tends to be inscrutable to others.
Wow. I have never thought about it this way. That's quite a profound insight. Thanks.
The corollary is true as well. I, as well as many others I imagine, have had to fix and maintain dumpster fires of spaghetti code developed under the standard distraction-filled modern business day.
Distraction doesn't beget good code; instead, a good programmer learns how to be as productive as they can despite the dysfunction of a typical modern business.
Any engineer is only as productive as the system she works in, and a system that eschews communication for long periods of solitary work is not, generally, a productive system.
I vaguely remember reading about an old study from one of those telephone companies in the '60s or so about engineering productivity, and they found that the single thing that set the "best" engineers apart from their peers was in how much more they communicated. I haven't been able to find this study, but if someone knows what I'm talking about, please shoot me a link or something.
'Productivity' is subjective to the business and position. In your 2-person startup, productivity might be shipping CRUD functionality in triplicate and setting up the bones for a larger application. In an enterprise, productivity can simply be not _reducing_ productivity while doing something. A develop and a manager being productive also look very different. I don't think your point and GP's point are mutually exclusive.
Are they really OK with this? Constant interruptions is the hallmark of a broken process and usually means the company is a bad employer and the projects are in trouble. I'd guess those "most productive engineers" handle that situation usually by finding new employment.
More specifically, as an engineer your ability to collaborate is a big factor in your effectiveness. Even as an IC, you are being paid in part because your experience and skills help the whole team, not just your code.
However, it's impossible to get good work done if you don't have contiguous blocks of time to focus. Even if you take great notes and write things down, momentum is definitely a thing. I've adopted the practice of blocking out 2-3 hours at a time on my calendar the morning of, so that they are not available for meetings, which guarantees me quality time to think and work. If people ask, I'm busy. If people ask why I'm at my desk when I'm supposedly busy, it's because I have to block time for quality thinking or no high quality thinking gets done.
This one is hard, because the company will push you to make the model as complex as your brain can bear, and all of our programming tools are designed to support the most complex program the toolmaker could imagine. And on your resume you want to put the most complex set of capabilities that you could possibly put. And in your mind you want to be the most dangerous programmer you could possibly be.
It took me 20 years to realize that there are ~0 problems that necessitate more than an intro-to-programming level of tooling.
It took that long because the whole ecosystem around me pushed me away from transparent coding towards grandiose coding.
Even now, I can rarely write simple code for hire because my coworkers have installed a veritable AGI of declarative tooling, and not using it is more conspicuous than using it.
But I try. You are absolutely right plain (not fancy) code is the ultimate goal.
Literally everything I do at my job is in service of this fact, and no one else where I work understands that. :/
Since changing workflow to something dramatically less-productive is also something that can disrupt a person's healthcare and housing, people are understandably going to be skeptical.
A good practice for engineers is setting periods of time for non-critical interruptions, like an engineering office hours. Set periods of time on your calendar as “meetings” and disappear into a room to work for an hour, shut off your messengers.
The world usually won’t blow up in the hour that you’re gone, but you will be a much happier and more productive engineer. We’re usually pretty effective when we time box things, so these methods have helped me drastically improve my focus.
- Agile brought interruptions to a new level of pain
- We have too many instant interruption communication points (slack)
- Open Offices have made interrution far worse
There were books about this concept 30 years ago. It was totally recognized that you shouldn't break up an engineer's time into tiny chunks with 1000 cuts worth of meetings.
But we threw it all out the window in the last 10-15 years with the rise of Agile + Open Office + Instant Message/Always-On communication programs.
We used to be in small offices of 2-4 people. That was perfect and I miss those days. The office looks a lot nicer now that it's open, but it's a disaster from a concentration standpoint. But, I think a lot of managers like the open concept because it's easier to see people and because it does often look nicer and often has more natural light.
I worked a place with 400 people in open plan close proximity, where your workspace doubles up as a corridor, and no meeting spaces, so it also doubles up as a meeting room for any teams meetings. It was impossible to concentrate. That drove me to some Howard Leight earplugs, beefy headphones with "the ocean machine set to 9". The impomptu meetings now sounded like a squeek, but it was still distracting.
I had to leave that job because of this and other negative effects of a cattle-like approach to handling software talent.
Personally I think the fully remote fixes half the problems in this area as it makes meetings harder and emphasizes communications like slack as being real channels (with processes and conventions), vs. a side channel that people feel easier to bug you personally on.
Depending on the company culture, you can choose to just not respond for a couple hours. "Sorry, I was working through a complicated chunk of code and I needed uninterrupted focus." "Yeah I saw your message, but I was in the middle of something, and I needed to focus."
I do that on purpose. If it's not urgent, even if they say it is, it can wait. Eventually people start to get it and stop expecting real-time responses.
At one point I had to read a management book about this problem, it was probably published in the 1990s, it was Pre-Agile Manifesto for sure.
It had recommendations like: - Meetings should be first thing in the morning or right before lunch, or at the end of the day
- Engineers should only log into email once or twice a day
- Stuff like close doors when intensely concentrating to indicate your busy/concentrating
Email, Slack, etc.. we can exit out of. But there is an expectation IME these days that we respond to things quicker than in the past.
With respect to Agile.. if you're in a small enough org where there's only one standup you can have it in the morning and stick to these guidelines. But in a bigger org there are a bunch of different standups. The Managers want to go to a bunch of them, so the standups end up moved all over the day to meet the managers schedule, causing all the maker schedules to get messed up with meetings at all times of the day.
Stuff like close the door to your office sounds like another universe. I started working in 1996 (internship) and I have only held 1 position where we all had offices. That was in a facility/group that was originally a research division. That office did get razed at some point after I left in the early 2000s to get turned into cubes/open office.
> David Kushner reflected on the unconventional working style of the company's ace coder, John Carmack.
"Ace coder" isn't quite accurate job title. He was a co-founder. People act differently when they have legal ownership over their work.
My days are filled with little dabs of 30 minutes here and there that are barely enough to remember what I had been working on before another meeting started, so I normally end up getting my actual work done late at night after an early dinner, which my wife is not particularly happy about.
Any recommendations? I’ve broached the topic lightly with my manager but don’t want to come across as whining, so I’ve generally just been trying to push back on meetings in the friendliest way that I can.
Name it something important: critical feature optimization, application security audit, system integration... do not call it focusing on your work.
Your problem here is you. You were booked. When someone sends you a double booking, hit "DECLINE" and they get an email right away saying you declined it.
Then you say "Hey I already had something in my schedule for that time, can't make it. You have access to my calendar why would you make meetings when I'm busy? That isn't very respectful."
If someone asks if a block of time is "real" always say yes. your problem is that apparently you have blocks of time that aren't real. if you only have real blocks of time in your schedule, nobody will guess which aren't or are real.
If someone asks you in person, have the backbone and willpower to say "Hey I'm already booked" and suggest another time.
You're the one causing your problems, but you're describing it as other people doing it to you.
Involving your manager is potentially a great step—though you have the best gauge as to whether it's the right move. If you've discussed your approach with them, they can provide some much-needed cover if colleagues complain that you're not available enough.
1) Start from the 'respect' angle.
2) Suggest an alternate time so that it can work.
3) Leave a paper trail.
I would only involve a manager if it became a serial issue and you've made your concerns clear and in writing.
Whether you come off as disinterested, not a team player, or just busy and the other person isn't willing to respect your schedule is up to you.
But it all depends on you.
The other problem is that sometimes people will literally see you working in your cube/office during the meeting and then ask you why you declined if you clearly weren't busy, because they don't equate coding with being busy. Sitting at your desk == not busy in their mind.
So now you have a political problem because you're seen as uninterested/not a team player.
Maddeningly, these are the same people who feel like you have to be in the office 100% of the time so they feel like you are working.
Whether you come off as disinterested or busy is up to you.
I would have if the item, I cared about was on the agenda.
This is why agenda are a) important b) should be sent out 24 hours or more before the meeting c) should be rigdly followed.
Anything else is either poor communication or a waste of productivity.
This gives everyone time to review the agendas. Making a decision which is worth attending,which is worth escalating.
Beside the manager should be representing you anyway.
>if you clearly weren't busy, because they don't equate coding with being busy. Sitting at your desk == not busy in their mind.
Coding yes. A skype meeting would be busy in their mind.
Until that stops, they won't knock it off. Start telling them exactly what you're doing in those time blocks and how much the meeting will make that slip by. Do not work after hours. If they want to pay you to sit in meeting rooms rather than ship features, that's their choice, but you have to make them choose, or they'll take both.
[EDIT] mind, make them choose by communicating. Email (or whatever your management-tier uses to communicate) is your friend. Explicitly call out your expected meeting burden in estimation sessions and politely but firmly alert (send an email/message) when that burden is exceeded. Bring it up in retros. This is especially effective if you have someone up the chain who wants features shipped and who is not the one calling these meetings. Part of their job is to make other people knock off unproductive shit. Give them the info they need to do their job (that you're being scheduled for too many low-value meetings).
Your only other alternative is to start delegating, until you're accidentally a "lead" and like 50% of your time is supposed to be meetings, another 25% delegating, with the balance helping other devs getting unstuck.
Or just block out the four hours you need by filling it up with loads of fake important-sounding half-hour meetings.
The thing my dad would always criticize her about is that she always picked up the slack.
If you are putting in a valid effort, you have to let things slip. Otherwise the people above you won't know that you are being assigned too much.
The first thing you need to do is stop working at night. You are paid to work during the day. Anything beyond that is you taking on unpaid work.
When this happens, the question is, "what is worth what?"
You must pose it to them, or others will ask for and expect both. And where they lack knowledge, this must be escalated to someone who can make the call and account for said call; otherwise, you are already accountable for commitments made prior to their request.
Doing both is not realistic, because there can only be one primary task, and this is why you end up doing work off hours.
I would share more calendar details, put what the task is on the time block, and in general set up that question.
Others will attempt to schedule your time so they do not end up doing catch up work off hours too.
It is you or them, or something just is not as important as everyone thinks it is.
Which is it?
Also, make task switch time clear.
A 30 minute meeting in the middle of, say a 2 to 3 hour block of time, may actually cost all or reduce the effective time to a small fraction of what is allocated. One effective way to handle this is to ask how many more meetings can now be scheduled into this wasted block of time?
It can also mean moving that block slightly, allowing meetings at the very end of it, or before it starts. Either can be cheaper, with meetings at the end of it being cheapest generally.
Your whole pushback is centered on there can be only one primary task.
That is as real as it gets. Use it.
I would best be considered a mid-level manager with 3-5 additional projects to tackle at any given time, and I face this problem on many different scales. Best case, I'm trying to get longer tasks done, and the longest uninterrupted intervals I can get are about 20 minutes. Other days, I need to complete 3 minute tasks and the longest uninterrupted time I can get is about 40 seconds. In either case, I outline the things I need to get done so that I can track where I am and quickly be reminded after an interruption. If the list ridiculously overflows the time in my day, I go further by writing down the priority order to make sure I don't lose track of that important detail. From there, I tend to get into sticky notes: when I'm interrupted, I write myself a note sufficiently detailed to quickly resume after the expected duration of the interruption. When people come to me with non-immediate concerns, those go on sticky notes to address when I'm not in the middle of things (or it can just stay in email if you're excellent at controlling and addressing your inbox). All sticky notes get addressed or stored before I leave. The handwritten aspect is important because sticky notes take up space, and each additional transfer of them takes time vs CTRL+V.
It's far less enjoyable than having a block of time to focus with minimized task-switching overhead, but maybe it can help you return some of your work to your actual workday while you improve the situation around you.
That being said, assuming you like your job / manager:
> I’ve broached the topic lightly with my manager but don’t want to come across as whining, so I’ve generally just been trying to push back on meetings in the friendliest way that I can.
Don't broach the topic lightly. Be very direct. "I have too many meetings, and I need to reduce them. As a result, I'm doing too much work at home. This is a problem for my family."
See where that goes. Before you discuss this, though, there are some things to consider:
Some people hold meetings as a form of procrastination, or as a way to feel important. It's important to figure out which of your meetings are these kinds, and decline them.
It's also worth looking at how to hold an effective meeting. When I worked at Intel in 2005, "effective meetings" was part of onboarding for all new employees. It gave us a lot of tools to pushback on bogus meetings, including a clear culture of declining bogus meetings.
It's important that you set some clear boundaries / limits, and not give in at all. (Even if this means finding a new job or assignment with a different manager.) What that something is, really depends on your relationships with your manager and peers. It could be that you decline meetings, (as other people suggest,) or it could be that you demand better planned meetings in order to attend. What's important is that you set some clear boundaries, and leave if they aren't respected.
Finally, if you don't get much support from your manager, and you still like your job, I suggest bringing the problem up the chain of command.
But seriously, it seems to me sometimes, that having a "meeting guru" would be truly helpful sometimes... a SPOC that can filter all meeting requests by the email / 5 minutes / required vs inflated attendees / agenda / etc criteria before they even happen.
Most of those questions aren't detail specific, so someone well versed in asking them politely and choosing the appropriate action could save so much time and attention suck.
That's the project manager's job. The more meetings they allow. The more the project suffers. The more that are missed. The less poltical power. So they need to focus on fewer quality meetings for the ICs. More meetings for the PM.
So now I get that whole time to myself and take a lunch break either at the beginning or ending of that block.
The solution (if any) will depend on your company, and position within it. First is manager support. Without it, you're stuck. During 1:1s, sprint retros, its entirely valid to say something to the effect of "I couldn't get X done, because I had to spend most of my time in meetings. I need X chunk of focused time to get it done." A manager should have your back and be able to push back on others to keep your time free for non-meeting work. The answer should not be to work more hours.
Some of these tactics won't work unless other people who need your time are aligned with this. That includes things like maker hours -- if one team has them, and another doesn't, its bound to not work well.
The main questions around any meeting I ask are:
(1) Is the meeting necessary? Is there a clear agenda? Can this be answered in email or a 5 minute chat? Often people schedule a meeting, and leave the thinking for later.
(2) Do I need to be there? Without me physically present (or giving out of band input via email), will the meeting fail or have a bad end result (like a bad decision), politics, etc.
(3) How urgent is this? Frequently, meetings are scheduled for the requestors' convenience. Not the attendees. Sure if its a high level meeting where its hard to get everyone in the same room, you might be stuck. Most of the time, that's not the case and gentle pushback to reschedule is fine (give options!).
Locate other distraction sources and figure out how to manage them:
(1) Sources of toil -- Do you frequently spend time on tasks that could be automated or otherwise made to go away?
(2) Are people always coming to me vs my manager or team? Ideally you should not be the single source for all things. You want to train people to bug your manager or team (mailing list or group chat) and not you. In other words, if you're busy, do you really need to be L1 support all the time? This also promotes cross training.
(3) Other co-workers -- Sometimes headphones just don't signal "go away" enough. Especially in open offices where everyone may be wearing them. Can you WFH one day a week and 'hide'?
(4) The internet :)
Whatever else you do, don't do this.
Work is simply not that important.
If you constantly perform miracles, no one is inclined to fix the problems.
Yes. That 'maker' time is a 'virtual' meeting.
If you can schedule it with a name. E.g. TPS report meeting with Bob it is much more respected. Your in a meeting, so you must be very busy.
Harder in an open plan or Easy to see office
Works best with a couple of friendly coder from another site in the company.
Set up a notebook to skype with each other then mute it. Pop headset on.
You must be busy with all those people in that zoom meeting.
They will respect meetings with other coders in a way they won't respect make time.
Make sure it's regular on the calendar. Remember to mark how your most productive work comes out of the "pair programming meeting"
The problem can be that some developers see themselves as forever in maker mode: in other words they treat being asked to talk and discuss things as mere interruptions.
A lot of managers I think are quite traumatized by this in a way: they can feel like they literally have no power to make things happen. As a result they may well over-react over the course of a career and treat anyone in maker mode as simply another developer who won't talk to them.
http://paulgraham.com/makersschedule.html
And 7 days ago : https://news.ycombinator.com/item?id=21440456 ( The Manager’s Schedule Is Holding Back Remote Work )
1. I start my day a couple hours later than typical for my organization. This both lets me work quieter hours and shaves time off my commute.
2. From 2 p.m. on is reserved as "Real, Actual Work" on my calendar.
3. I check email a few times a day. Any other time, Outlook is closed. Those who need me immediately can call my phone or visit my desk.
4. At least once a week, usually Friday, I work either as late as I can or until I reach a suitable milestone. The clock doesn't matter.
You can do great work by pairing or mobbing too. Being isolated is good, but it's harder to learn new things working by yourself.
I strongly disagree. I rarely learn anything of consequence when working with others. Pairing and mobbing strike me as fads.
Pairing and mobbing are not fads, they've been around for a while and in my experience they've been very useful, I'd recommend you try it with someone with experience with it.
Depends on the things. Another person might be able to share a few tricks with you: you may not know that you can drag the lower corner of an excel spreadsheet cell to copy formulas, for example, or that you can use "cw" to change a word in vi. On the other hand, learning something like relational database modeling or functional programming requires dedicated focus that another person is probably going to get in the way of.
Code reviews I feel provide a good avenue for learning how others have done things.
I've hit blocks in the past while working by myself however I feel part of learning is hitting a block over and over. Only once you truly grasp why other solutions don't work does a new novel solution really fit in completely. Moreover unless you truly try to solve it yourself you don't develop the skills to solve problems.
The one that has been the bane of my existence for years now is the 9AM daily call with the customer that is on Europe or Delhi time. It just destroys the day when you start things off with that kind of thing, and get immediately tossed into placating and containment mode. Then whatever you thought you might be able to do for the day gets tossed out the window in order to react to the latest fire drill before the next call. It's entirely reactive, rather than proactive, and it is soul crushing.
It's almost lunch time now, and I haven't done anything worthwhile yet today, other than try to bring some kind of order to this chaos and triage.
Between Thanksgiving and New Years is typically one of the better periods of the year for getting real work done, so there is that to look forward to.
Yes, this. And a similar problem occurs when manager-types try to come up with metrics to measure programmer productivity. Their yardsticks for what constitutes meaningful work, as a manager, cannot simply be translated over to makers.
Plenty can. The CFO types look at profit per commit/schedule whatever.
A lot of middle managment types look at activity per commit.
The real issue here is that mangement by productivity data. Means most management is deadweight that can be replaced by a spreedsheet with the ability to send form emails to those falling behind on the metrics.
Anywhere else would be downsized, but management has enough power go protect it's own existence at the expense of the company.
However, this isn't an unbiased article: This company wants to sell you a SaaS product that they think will reduce interruptions. They have an incentive to make you think that the manager's schedule is as terrible as possible, because they want you to sign up for their SaaS tool. In my experience, each additional SaaS tool piled on to developers, no matter how well-intentioned, just introduces more distractions and overhead. Reading toward the end suggests some possibly helpful tools, but I'm not seeing anything that can't be accomplished with some common sense and existing tools.
This blog post has unhealthy amounts of exaggeration and hyperbole. Consider the "Actual Schedule" chart in this article that only shows blocks of "Ruined Morning" and "Ruined Afternoon". Or the claim that a single standup meeting can blow an entire afternoon because it interrupts the afternoon flow. The study they linked doesn't even support such excessive problems with disruption.
These exaggerated narratives are seductive for two reasons: First, it's true that interruptions come at a cost to focus on other tasks. Second, it gives us an easy out to blame everyone else for our lack of productivity or focus. Did I waste my afternoon on Twitter and HN instead of getting my work done? Well, I read an article that says it's my manager's fault for that 30 minute scheduled meeting that I've known about for a week. It's always tempting to blame someone else, especially when there's a shred of truth to it. I'll admit that I fell into this trap for a while when I was younger.
Having grown up on "Maker's schedule vs. manager's schedule" I was a die-hard believer that managers had it easy, while engineers got the short end of the stick due to all of those pesky distractions. When I switched to management, I was shocked to discover that I still needed periods of sustained focus and that I still had problems dealing with interruptions. The maker vs. manager distinction I had learned about didn't really exist, but in the manager role I had no choice but to work around it. Once I stopped blaming everyone else for my poor ability to recover focus or get into flow states, I became much better at managing my own time.
I firmly believe that articles like this are counter-productive, because they send a message that poor time management and excessive time wasting are not your fault, and therefore not your responsibility. That mindset closes the door for any possibility of improvement, which is the opposite of what you want. Yes, it would be great in an ideal world if we could work for a week straight without interruptions, but that's not reality. Instead, focus on skills to better manage your own time and plan around interruptions.
Practice responding to people with "I'm in the middle of something right now, can we talk about this after our scheduled meeting in the afternoon?" to coalesce your meetings together. Or statements like "I'm happy to help, but I'm really busy right now. Can you write this up in an e-mail, cc my manager, and we'll look at it in the morning?" If your manager is to blame, broach the subject in a professional manner and politely ask if your manager can help batch your interruptions into a single daily conversation. Put it on the calendar if you must, but the important thing is to take charge of your time management.
Finally, put deliberate effort into getting back into a flow state after interruptions. If your first reaction after returning to your desk is to open up HN or Twitter, then you're part of the problem. I've found that putting my headphones on and spending 10-20 seconds mentally retracing my steps before the interruption is very helpful.
I found it to be a very clear illustration. I don’t think “ruined” should be read as “completely wasted”. A lower sense of focus or flow is a realistic outcome of a schedule like that, in my experience.
Somehow you managed to see the worst in this, making the article about yourself, and you even accused the author of purposely misleading to sell his or her product. If you’re a manager, I would encourage you to be more open minded, for the sake of your employees if nothing else.
> an engineer who’s expected to attend all the meetings and also be able to turn around designs and code is just not going to be as effective
Then maybe they are having too much asked of them. Or perhaps the meetings are actually more important than the coding tasks and that is why they get priority.
People need to learn how to delegate and how to let go. There is only so much time in a day. Either you delegate production tasks to someone else, or you let go of control and let people make decisions in meetings without your input. Both are valid responses to time pressure, and usually you need a mix of the two.
If that is the case. Then the programmers KPI and perfomance review should be based on how many of these meetings they attended.
Hell if meetings really are more important and add to productivty. How about paying meeting attendance bonuses?
No one will put there money where there mouth is because they know it's a waste of time to have a meeting that could be an email.
They need to look busy to justify their own salary
[1] https://www.additudemag.com/understanding-adhd-hyperfocus/
Since the risk of burnout from frustration is real, if you value your career, you will need to leave such places quickly until you find one that can utilize you maximally.
To me, this sounds far from being universally true. Some Sr. roles allow for hard-split meeting days vs. productive days, and moving to six week self managed "sprints" with regular updates to a draft publication instead of shuffling vaguely defined tickets around a board.
Such as?
I think the article has it right. Dedicate some "office hours" to being interrupted, but recognize that some people are far more productive during long uninterrupted periods.
Ops Engineers have the Firefighter-Maker-Manager dilemma to contend with. The techniques to balance reactive work with planned work adapts well to SWEs in open offices with too many meetings.
1. The programming language used and its (de facto) standard libraries
2. The language of the important design- and tooling patterns that are useful in the said programming environment
3. The language of the Problem Domain.
If you can master all three, then you are a rock star your productivity will be much higher than those of your colleagues who have not achieved the mastery of these.
Now what is the language of the problem domain? Often it is just the methods and functions already present in the application. Here whoever made the original design has a clear advantage over others who started working on the same application later.
When starting from scratch it is the language of the business, say accounting terms, and their meaning if you are building an accounting system of some kind.
The code is just something written in these 3 languages, if you can speak in those languages you can write the code down, and can read it and understand it and thus modify it further.
To master all 3 of these languages can take a lot of effort over time. But so it is with true rock stars. Think Jimmy Page, he had a long career on stage and in studio before he joined Led Zeppelin.
I don't really like this definition of meaningful work. Yes, there are some tasks that require focus and inventive mental work. But those aren't the only tasks a "maker" faces. And they aren't always the most important ones.
So in short, I do things on consecutive days:
* to code, I do maker's schedule.
* to sell/talk to users, I do manager's schedule.
I'm feeling like writing on the topic as well, as it can be valuable for other solo founders too. I struggled a lot in the beginning when building Standups.
But to do sales, talking to users, I have to do it on the manager's schedule, with the typical slots within a day calendar schedule.
"The most straightforward way to address this is to build a team knowledge base. Not only does that minimize the number of repetitive questions bounced around the office, it allows new team members to basically onboard themselves."
# Insert nuclino advert #
Right....That's a culture thing, more than it is a software solution. You can only use a software solution to aid the culture, not the other way around.
In my experience, This culture needs to come from the top-down.
If management was easy then everyone would do it.
How about this for a start? You taking total control of your direct report's calendar. They have read only so can see what meetings you have scheduled they should attend. You book the meetings.
Anyone who wants a meeting has to disturb the manager (so there will be fewer requests) and pushback will have more force.
It's not whiny engineer saying they can't attend the meeting. It's the manager saying they are too busy.
You could also send just 1 report to a meeting instead of the whole team. Since you control the calendar you can choose who goes.
For me, the most important interval is a decade. Get your big goals right, and that huge swath of time will let you do something hugely transformative in your work, your sidelights or your personal relationships. But to get there, you need the stubbornness to work through the hard stuff for a long time without immediate rewards.
You also need the freedom to reinvent your approach a couple times, without feeling embarrassed or doomed.
Being a maker calls for a totally different clock.
Some people may be able to do this, especially for a few months or years. Many however, will break down sooner or later!
And this may also be a case of how many problems you have. Night shifts might not be a problem on its own, but throw in a little depression, or getting overweight, or whatever, and it's going to suck big time.