
I’m a Bad Developer, That’s the Only Reasonable Explanation - passenger
https://medium.com/@mrannedev/im-a-bad-developer-that-s-the-only-reasonable-explanation-1db7556f9cb3#.ypq85v9ej
======
MatekCopatek
I've had similar self-doubt in the past, I considered myself fast but sloppy.

I changed my opinion after a workshop on different team roles at my previous
job. A lot of it was boring workshop fluff, but I loved the core message: that
many personality traits aren't purely positive or negative. Perfectionists are
nitpickers. Fast developers are sloppy. Experienced ones overthink stuff.
Bleeding-edge evangelists ruin long-term stability etc. There are two sides to
every coin. We tend to value traits we have (or desire) and judge people based
on that, but it really depends on the team and the task.

Need a quick-and-dirty prototype ASAP? Give it to the framework hipster.
Planning architecture for a complex long-term project? Ask the boring slow guy
with 20 years experience. Build teams with enough variety and try to solve
problems through process. Don't scold the fast guy for being sloppy, give him
tasks that require speed and solve bugs with better QA and tests.

TL;DR: A damage dealer will beat a healer one on one, but that doesn't mean
he's better. You need them both (plus a tank) to run a dungeon successfully.

~~~
edem
> TL;DR: A damage dealer will beat a healer one on one, but that doesn't mean
> he's better. You need them both (plus a tank) to run a dungeon successfully.

I haven't played a single game where this was true. Simply because both the
healer and the damage dealer can do damage but only a healer can heal.

~~~
palunon
It's true in EVE. The an army of the most powerful damages dealers in the game
would be overwhelmed by an army with a decent composition...

~~~
user5994461
The initial message said in one-on-one.

------
alkonaut
Being a developer _always_ means getting stuck on some trivial crap for a full
day and going to bed angry. One simply makes up for it by those times when you
create fantastic value in thirty minutes. You find the bug right away, or a
new feature or deployment just falls into place smoothly. Software development
is like solving math problems - it's not a continuously progressing process,
no matter how much the agile priests want it to be.

This developer sounds humble. That's the most important quality a developer
can have. If one becomes too humble (impostor syndrome) then one needs an
environment of more encouragement. That's the job of peers and managers.

There are lots of bad developers. It's not unthinkable that this guy is a bad
developer - but it's still the managers problem. Is he trained, mentored and
encouraged enough?

~~~
labster
And here I have thought hubris was one of the most important qualities of a
good developer, along with impatience and laziness. Having a belief you can do
it right is important to getting it right.

~~~
alkonaut
The humble bit is what makes sure that once you think you got it right, you
actually got it right :)

------
karmajunkie
There are a lot of ways to dice up performance as a developer, and while some
are clearly bad, like LOC counts, others are merely different from each other.
Is it better to ship a feature faster? All things being equal, sure—but all
things are rarely equal. All bugs aren't created equal, nor features, nor
design requirements. Nor are the skills needed to handle any or all of those
things distributed equally amongst developers.

I was on a team once where my diagnostic skills put me near the top of the
stack for being given hard-to-find bugs. What that meant was that sometimes I
would ship one commit a week while tracking down several difficult issues.
Does that make me a bad developer? A slow developer? Or are those even
valuable distinctions in this context?

Rather than trying to be better than everyone (anyone?) else, try to be better
than you yourself were last week, or last month, or last year. That's the only
consistent variable one has across all the kinds of tasks we are called to
perform in this role.

~~~
rplst8
>I was on a team once where my diagnostic skills put me near the top of the
stack for being given hard-to-find bugs. What that meant was that sometimes I
would ship one commit a week while tracking down several difficult issues.

This.

A good management team will recognize these skills in people and assign them
appropriate work.

All people are not the same, that's why we have developers and doctors and
fireman. All developers are not the same, that's why we have backend,
frontend, Java, C++, etc. All backend developers are not the same, and so on,
and so on. People are not pluggable assets.

~~~
webmaven
_> People are not pluggable assets._

Well, there is a countervailing force in that companies don't want every
developer to be a SPOF, giving the company a "bus number" of one no matter
_who_ gets run over (the typical definition asks if _any_ single developer is
a SPOF, rather than _every_ single developer being an irreplaceable special
snowflake).

That said, if you work for a company that leans too far the other way and
values process over productivity, hammering every square peg until it can be
wedged into any of the round holes (instead of enlarging the round holes to
make them square), you may want to consider looking for a new employer.

~~~
karmajunkie
Absolutely agree. That scenario (every dev is a SPOF) actually makes the
company's bus factor 1/N, where N=number of devs.

Of course, realistically few devs are so critical to a project that they
couldn't be replaced by another strong developer with a month or two to learn
the code base, or at least a part of it. Obvious exceptions for deep domain
expertise and the like, of course. But I've worked on way too many rescue
projects to believe anyone is truly irreplaceable in the normal course of
events.

------
elihu
One way to look at it is that if some company is continuing to pay you to work
for them, they must have determined that it was worth it to them. If
management is putting pressure on you to produce more, it's because they want,
say, a 3x return on their investment instead of a 2x return.

By accepting a job from them, you're obligated to work diligently at a
sustainable pace. You aren't obligated to worry about whether you're more
productive than your peers.

I posted a link to Beppo the road sweeper's monologue from Momo by Michael
Ende in a thread on a time management story a few days ago, but I'll link to
it again since it seems relevant:
[https://www.youtube.com/watch?v=8Q_JYYcBP2Q#t=15m05s](https://www.youtube.com/watch?v=8Q_JYYcBP2Q#t=15m05s)

~~~
Mathnerd314
If management has capital to spend, they might be spending it on new hires to
see which ones work out, and firing low performers such as yourself. The
majority of states are at-will states so you could easily get laid off.

~~~
elihu
That is something to consider. There is a difference though between working
harder because you're afraid that you'll be replaced by someone faster and
cheaper and working harder because you're motivated by feelings of guilt and
shame. I don't think either one is particularly healthy, but in the former
case you can at least make a rational decision whether the job is worth enough
to you to risk burning yourself out.

It's also worth considering that not all developers are easy to replace, for
various reasons. A lot of big companies aren't in a position to be choosy as
long as their employees are reasonably competent and can do the work.

------
rwallace
> This isn’t an impostor syndrome.

Sure it is. Impostor syndrome is defined as the state of affairs where your
emotional assessment of your competence is lower than your actual competence.
The definition does not depend on which aspect of the task is being discussed.
"I can't write code" (when you can) and "I'm too slow" (when the people who
appear faster, are doing it by just sweeping bugs under the carpet) are both
impostor syndrome.

I will add that by the sound of things, the reason you have impostor syndrome
is because your previous bosses have been bullies, sadists and sociopaths who
successfully accomplished their goal of damaging your morale for their own
pleasure. This is sadly not a rare state of affairs, but it's not universal
either. Never be reluctant to look for another job if your boss is an asshole.

~~~
abannin
Such bold conclusions from 900 words and a single perspective. Isn't it
possible that the author is, in fact, not good at the job?

~~~
Sir_Substance
People who are bad at their jobs usually fall into two categories:

a) people who lack the insight to realize it, and thus don't work to fix it b)
people who realize it but don't care (for various reasons, some valid some
not)

If you're agonizing over your job competence and trying to improve but feel
you aren't succeeding, then it's vastly more likely that either your job
specification is impossible, or you're setting unreasonable personal goals
around your job.

~~~
abannin
I'm really bad at basketball. I have to insight to realize this, and I tried
to get better. I really cared about getting better. But at the end of the day,
I am not athletic. Sure, I can devote time and energy to improving my
basketball skills, but I will never achieve anything beyond 'mediocre'.

There's also a chicken and the egg issue here; perhaps the author really does
not enjoy coding and thus is not willing to put in the effort to improve?

~~~
Sir_Substance
>I'm really bad at basketball. I have to insight to realize this, and I tried
to get better. I really cared about getting better. But at the end of the day,
I am not athletic. Sure, I can devote time and energy to improving my
basketball skills, but I will never achieve anything beyond 'mediocre'.

None of that is in question, but let me ask you this: are you a professional
basketballer?

I'm not a professional chef, read into that as you will.

~~~
abannin
No, I am not a professional basketball player. I can't even compete in a
neighborhood pickup game. That is the point; I lack the raw material to be a
professional athlete. It's very possible to be bad at something AND know that
you're bad at AND not be able to reach the proficiency to perform the task at
a professional level.

~~~
Sir_Substance
But, at the risk of pointing out the bleeding obvious to those who seem to be
struggling with reading as well as basketball, it would then not be your job.

~~~
abannin
Okay, let's use another example. I waited tables in high school. I was very
bad. I knew I was bad, but I worked hard to improve. Still, even after a few
years of experience a random person who had never had a job before could walk
in and get better tips than me. My boss wouldn't fire me because I showed up
for shifts, but I was generally a very poor waiter. Eventually I got smart and
stopped waiting tables, and the world became a better place.

It's very possible to be bad at something AND know that you're bad at it AND
not be able to reach the proficiency to perform the task at a professional
level.

Also, it's pretty clear that I can read. If you are going to insult me, it's
better to insult my comprehension or argumentation. However, I would argue
that it's generally better to just not insult other people.

~~~
webmaven
_> It's very possible to be bad at something AND know that you're bad at it
AND not be able to reach the proficiency to perform the task at a professional
level._

You forgot to add _" AND still be employed in that capacity."_

------
nope_42
Having read some of the comments in here I'm surprised to see that no one has
mentioned how the co-workers reporting their time are lying and this developer
isn't. If you worked on a feature for an hour and stared off into space for
another hour you report that the feature took two hours. If you took 30
minutes to write an email you certainly don't report that; you move time
around to make it look better.

This behavior is totally normal in this industry and if you get put in a
situation like that you have to do the same. No one can concentrate for 40
hours every week on development without getting burned out.

The reality is most people are probably lucky to get 20 hours of productive
work done a week.

~~~
Sammi
I do some of my best programming while I'm staring out the window or getting
coffee or sitting on the toilet.

~~~
tdy721
Me too, but it still feels cheating when I bill for that time.

------
dunkelheit
One general piece of advice that stuck with me after reading "Feeling Good:
The New Mood Therapy" (a cognitive therapy book) is to refrain from thinking
in inherent categories about myself. Thinking "I'm a slow developer" is just
depressing and sad - there is nothing much you can do about your inherent
flaw. By contrast, thinking "I've done this task slowly" puts you in a
problem-solving mood. Something like "Wow, I've actually shipped, that's
great! Now, it took me a bit more time than I've anticipated. Does it really
matter? If it does, what can I do about it?"

Also, a lot of this is just management trying to put pressure on the devs
using methods more appropriate for a kindergarten. I vividly remember my
former boss telling me "you are going to put down the team and have a bad
conscience if you don't finish this feature on time" (an arbitrary deadline
caused by a looming performance review). He was a good boss, but I would have
more appreciated an honest "look, I'm trying to get you a raise so finishing
this feature by this date is in our mutual interest" without any kind of
moralizing shit.

------
ThomaszKrueger
Perception is everything. You don't need to be good, you need to look good. On
a tight schedule, deliver what was asked, and only that, even though you know
other things are going to be necessary. When asked to estimate, try your best
to give the longest you can get away with. Make it look or sound difficult. At
the same time, do the hard work by yourself, figure things out on your own.

When asked to account for your time, use the opportunity to be good at
creative writing. Give the most flattering and awesome impression about the
time you spent.

Being competent is a pride for yourself only, for all others is whatever they
want to see. Always act as if you are making less than you should. Act as, not
be. Never stay working late, never work on weekends unless you are the one
benefiting.

The value you give yourself will be the value people will give you.

~~~
cookiecaper
Yes. The fact is that for white-collar jobs, very few people _can even tell_
whether or not you're competent. Some of your peers may, but I wouldn't count
on it, and they're biased in favor of themselves anyway, so they're not
objective resources. If you're lucky, your immediate manager _may_ know how to
tell if you're competent or not.

Everyone else only has a very high-level concept of whether they think you've
been doing what you're supposed to do. The optics on this must be controlled.
You do not want to be one guy in the hierarchy away from getting shitcanned
because everyone except your immediate boss thinks you don't finish enough
tickets or whatever.

Look better than everyone else. Employment is a popularity contest. To succeed
in a career, do your job well enough that you don't get into trouble, and
spend the rest of your energy on social and optical development.

I must say, however, that "working overtime" (that is, sitting in your chair
and looking fancy until 8pm at least 3 nights per week) is a near-necessity
for someone looking to climb the ladder in most organizations. Since people
don't know if you're doing a good job or not, the amount of time they see you
in the office is a big component of their evaluation. They assume you are
working if you are butt-in-chair. You need them to think you're a hard worker.
You should never be the first one to leave unless you make sure everyone knows
it's a special event for which you cleared PTO approval process, and you
should be one of the last to leave at least 3/5 of the nights.

~~~
ThomaszKrueger
Oh I wholeheartedly agree with the last sentence. The best way I found of
dealing with that is finding a way of getting in earlier than anyone you care
to impress. With some luck they may leave earlier than you so you follow suit.
Always give the impression (at least) of being present.

------
datf
I have worked at many places, many dev jobs. I've worked with people shipping
features faster and slower than me. But that's very subjective. Using it as a
metric or even pointing it out doesn't make sense to me.

I've been forced by managers to merge or even ship features that are half-way
done.

I have to agree with other people advising you to switch to another place.

If you are working in a toxic environment, or you don't agree with or like how
they handle the projects, then there are better places for you to be.

Don't be afraid to pursue a better workplace environment if that's what
matters to you.

Also, talk to your colleagues. See if they feel or see things the same way.
Once you realize you're not the only one in that position you'll feel better
about moving on.

Come to thing about it, a long time ago I worked at a place as a development
team lead, and I saw management doing similar things to my team members as
what you're describing. I confronted the owner about that, but things didn't
change. I then advised my colleagues to look for something better and so did I
(even though they always treated _me_ great). And I'm happy to say ten years
later we are all happy we left, and we all know we don't want to work
somewhere like that again.

~~~
sethammons
Plus one to talking to your colleagues. At my work, we started peer reviews
that are anonymous. You request feedback from a pool of people. Those who give
feedback talk on areas of strength and areas that need development. My
imposter syndrome declined immensely after seeing some of the strengths listed
from my peers with whome I work every day. I could agree with the areas of
growth needed and it gave me focus for professional goals.

------
belvoran
For the last 15 years I was always slow, bad, and pessimistic. In fact I was
fast, good, and realistic. However in the companies I was working at, the
promoted guys were always writing buggy code, and really didn't understand
what was going on. They even didn't want to understand that. They were
promoted, and not me. Why? Because the speed was what there managers were
promoted for. So they wanted to surround themselves with similar stupid-but-
fast programmers. This way they all were promoted, got bonuses, and they were
one brainless corporation family. I wanted to make some good work, and
understand why something works this, or other way.

And one day I gave up. It was hard to hear all the time something like "you
are too pessimistic, why you always say that we cannot build the Tardis in a
month?", or "You are too slow, you see that guy in the corner? He is ten times
faster then the whole team (and he is happy working in an open space). And now
the whole team will be fixing the thousands of failing tests (caused by this
guy) for the next six months. Because if they will be red, I won't get the
yearly bonus.". The latter is real.

So I don't care anymore. My side projects are opposite. So I build them
slowly. Very slowly. And I learn all the things around them.

------
ebiester
There are two ways to look at this: it could be the environment, or he may
have a rational reason to come to this conclusion. (Many developers are indeed
slower than they could be.)

Now, my major background task for 2016 and 2017 is trying to analyze how to
become a better developer with myself as a guinea pig. I'm still putting
things together, but "faster in the development environment of choice" is one
stumbling block. These are the major issues I've found:

1\. Being fast or slow only has a minor correlation with good code, but there
are confounding issues. Good code takes different habits to write than bad
code.

2\. People who are fast at coding have an ingrained series of patterns on
which they rely. They slow down when they are pulled out of their element, as
can be expected. As such, there are meta-skills that contribute to speed, but
a large portion of it is having a series of reliable patterns to solve the
problem.

It turns out most tasks are the same on the surface. Spend time getting those
patterns at heart.

3\. Fast developers have a deeper knowledge of the libraries around them. We
underestimate the overhead of research, even with google.

Spend some time exploring the corners of your libraries and frameworks and
languages. If you work on the front end, you need to have the ins and outs of
the client memorized.

4\. In general, fast developers may not realize it, but they're methodical in
how they approach problems. They have an internal checklist. Develop your own
internal checklist.

5\. Because they are fast, they have more confidence in developing tools that
speed up the general issues that slow every developer down. (setting up
environments, test data, and the like.) Laziness, it turns out,b is as much an
byproduct as a cause. If you are slow, the ROI on developing tools might
indeed be outside the timeframe of efficiency. Work on getting faster, and you
will see more opportunities to consolidate your work.

I'm still working out the solutions of how to teach this in a generalizable
fashion and how to back this up with research, so don't take these as gospel
and I'd be particularly interested in fast programmers who have alternative
perspectives.

------
cocktailpeanuts
Aside from the judgment on whether the employer was terrible or not for making
OP track the time, etc., if everyone tells you're slow, doesn't it occur to
you that you may actually be bad?

I finished reading the post but cannot figure out what OP is trying to say.
The title doesn't match the content. At first it sounded like it was one of
those rant posts exposing the employer for mistreating, but then at one point
it sounds like OP understands that he is a bad developer (because everyone
tells him he's slow), but then goes on to talk about whether it may be the
manager and not him. And then ends with some random conclusion about nothing.
It's almost like watching an episode of Seinfeld--it's a post about nothing.

Then again, if a company hired someone who's so obviously bad that everyone
thinks he's slow, it's their own fault and must be a bad company. Explains why
they make him track time and all that stuff.

~~~
prodmerc
Well, I'm kind of in the same position: I'm slow.

I do everything by the book, but in the end, everyone else does more.

I did notice that they're cutting corners, but then I tried to do it too, and
I was still slower.

So, I'm still asking myself, am I slow or am I a perfectionist? I'd like to
think it's the latter, but it may very well be that I'm slow.

My defense in my mind is that even cutting corners I try to do the important
things right. It may be a lie I tell to myself.

That's pretty much what I got from this post, self-doubt.

~~~
extrapickles
How long did you try cutting corners? They could have years of experience
cuttings corners, and you only have a few days, so of course they should be
faster as they are more experienced at cutting corners than you are.

Try a few simple projects (eg: making flappy bird clone, or a simple HTTP
server) as fast as possible and screen record all the time you work on the
project. Then review the project and recording for things that slowed you down
(eg: going down rabbit holes, or your tool-chain is too complex for the task
at hand).

After that, do the project over (or a similar project) and try to beat your
previous time. The only thing that should matter is the amount of wall-clock
time until the project is minimally useful, eg: time to a browser accepting a
static webpage, or the game minimally playable.

If you have trouble parting from the book way, an HTTP server might be the
better option as there is the "book way" on how its supposed to be done, and
what browsers will not vomit all over. Go for the browser rendering a page or
two with no visible errors with dev tools closed rather than passing a
comprehensive test suite as in the end the only thing that matters is "did the
user notice the missing corners".

------
exratione
Everyone has been put in the position of coming to a dead halt on some aspect
of the work that just won't yield. Or at least not for the combination of you,
your knowledge, and your resources at that given time. This never goes away.
Signs of maturity as a developer involve how you deal with the existence of
this phenomenon. E.g. box your time, know when to seek alternatives, and know
how to find solutions that exist already, and especially know when to pull in
help - and how to find useful help in your network.

The driving overall concern is avoiding points of grinding minimal efficiency
for individuals, and in near all cases that can be avoided via some
combination of simple strategies, even when you are the only person on your
own personal project. Development is such a huge space that no two people will
overlap completely in skills and experience on a team, and pulling in other
people to alleviate your dead ends is a part of how you learn specifics needed
to avoid that dead end in the future. But it is knowing to pull people in or
seek another path that is the important part, not the specifics.

Working to an absolute dead end is only useful in the sense that you then
understand better the incentive to avoid doing it again if you can.

An alternative view on the same problem space:

[https://www.exratione.com/2016/01/paid-a-great-deal-to-be-
te...](https://www.exratione.com/2016/01/paid-a-great-deal-to-be-terrible-at-
development-most-of-the-time/)

~~~
a3n
> box your time

What exactly does that mean. I'm not saying this isn't a real thing (I really
have no idea), but the only time I've heard the phrase used in person was by
people who get ahead by posturing.

When someone uses it sincerely, what do they mean? What does it look like, as
opposed to not boxing your time? What specifically does it solve?

~~~
RandomOpinion
> _When someone uses it sincerely, what do they mean? What does it look like,
> as opposed to not boxing your time? What specifically does it solve?_

A technical analogy would be depth-first search of a solution space, e.g. in a
simple chess AI.

If the search has a cut-off depth = deterministically bounded length of search
time = time-boxed

If the search does not a cut-off depth = unbounded (potentially infinite)
length of search time = not time-boxed

------
GoToRO
Most people cut corners. They deliver crap, fast. But when you add the time
needed to debug that crap, to refactor it, was it really fast? Of course
managers don't track time over the whole life of a feature...

\- So it says in your CV that you are quick at math.

\- Yes. Yes I am.

\- How much is 23 times 14.

\- 7!

\- That's not even close!

\- No. But it was quick!

------
jeremiep
You could change jobs. An employer tracking your activities to the minute
sounds like a cancerous work place to begin with.

Bad employers are also a thing, and is much more frequent than most people
realize. They usually drown you in tools and processes along the way and
without much development experience its hard to tell whether they're bad or
you are.

You're going to hear about Agile, TDD, code metrics and whatnot. Its all
superficial at best and those promoting them don't usually have quality
products on their hands to begin with, or have codebases much larger than
actually needed. At least from my experience its that way.

Its best to find an employer who can help you grow instead of fitting you in a
box.

~~~
rplst8
I think you are lumping things together where they don't belong. Processes and
tools have places. As I've posted previously on the topic, some industries
have strict quality standards, and the tools and processes are there to find
and prevent bugs from making into fielded systems. These process can an do
work, but don't always apply to a basic website or CRUD webapp.

~~~
jeremiep
Oh definitely, I was referring to things like Jira, Scrumm and the likes
rather than industry standards.

~~~
ConnorLeet
Tools to help with a process, not to define the process.

------
orbitingpluto
I've told this story before, so here is the short version.

I replaced $girl in a sysadmin/programming role that would get used by other
employees. According to my supervisor, she was always far more productive than
me. He'd ask for an estimate of how long something would take and he'd always
say, "That's too long. $girl could do it half the time."

Well, because it was my first tech job company, I sort of had impostor
syndrome because of him but also thought of a way to test it out. One job we
often had would get programmed from scratch several times a year and take
about 2 or 3 hours to do. I cludged it into a simple framework where I could
just edit the XML after the other employees started to use it. So when he
asked me how long it was going to take before people could start using it I
said thirty seconds.

"That's too long... $girl could do it 15..., wait, what?"

~~~
effie
Wow, that had to crack you up laughing:)

------
nisse72
I am also 'a little slow'.

But the other side of that coin is that my code generally works correctly, and
rarely (I wish I could say never) needs fixing later. My managers and
customers know that my code will work 'as advertised'. My colleagues tell me
they enjoy working in code I've written, because it isn't a mess and it feels
logical and well organised.

But hey, I'm a little slow. And in ~ 25 years of writing software for pay,
only one manager I've worked for has ever had an issue with that.

------
rwallace
One more thing: always remember that it is not your job to protect your
employer from the consequences of their bad decisions. It is their job to give
you incentives that align with their own interests. If your employer is
putting pressure on you to ship faster at the cost of sweeping a lot of bugs
under the carpet, do that. If you think they're making a mistake, say once,
calmly, that you think it would be worth spending more time upfront debugging.
Once. After that, follow the priorities you are told to follow.

~~~
st3v3r
It's not necessarily my job, but in many cases, there's still a good chance
that I'm going to be the one yelled at, or have to deal with the consequences
(having to work late nights to put out the fires caused by those decisions).

~~~
rwallace
Okay, but then it's important to understand your problem is not actually a
technical one of bugs in the software, it's a political problem of your boss
being a sadistic bully willing and able to ruin your life, plus a financial
problem that you can't walk away from the job. Framing the problems correctly
doesn't make them go away, but it does help focus your mind on things that
have a chance of solving them.

------
al2o3cr

        Management often assumes that they did their job when they handed in specs.
        And I often assume that there is nothing else for them to do.
    

I can't say for certain that you're a bad developer, but if your management
thinks throwing specs over the wall is "doing their job" they ARE bad at
theirs. I'd argue that you fail _your_ part of the job in that case if you
DON'T have any questions.

As for the slipping estimates, are you part of the process that generates
them? If not, it's back into "your managers are bad at their jobs" territory.

------
ilaksh
Seems like people are misinterpreting what he is saying. He is NOT saying he
really thinks he is slow. I think this is a polite and less direct way of
saying that constant pressure to increase 'productivity' is counter-productive
in terms of outcomes and harmful to employees psychologically.

------
snarf21
You may or may not be a bad developer. But lines of code has nothing to with
being a good developer or providing value or solving problems. If your
employer thinks all developers are equal and that they are just cogs in a
machine, then that is not going to be a good place to work regardless of how
fast you are.

And you shouldn't beat yourself up about bad estimates. Everyone sucks at
estimating. (Read "Thinking Fast and Slow") Which makes sense since we are
estimating how long it will take us to make something we've never made before.
Everything breaks down into day or week or weeks or month or.... You could
also take 4 weeks to fully define every requirement and create tests for
validation for a task that would have taken you two weeks.

You are a bad developer if you keep making the same mistakes or if you don't
spend anytime learning new concepts/languages/processes/etc. You are a bad
developer if you approach your job as doing exactly what you're told and not
caring or thinking about how your contribution is part of the bigger project.

------
probinso
Pay has little to do with throughput. Pay is an arbitrary number that you and
your handler select from the ether. This decision is often made well before
there is any chance of measuring your productivity. If you think the number
was poorly selected, just know it is.

I found time tracking tools to be hugely beneficial. It changed my focus, and
forced me more aware of what I was working on. I am, however, a slow developer
sometimes. It is just who I am.

I found that often employers look for 'smart' candidates, instead of SMEs.
This is their fault. If they were interested in / could afford a subject
matter expert (SME) then you wouldn't likely be working there. If you are an
SME, then you will likely produce results/prototypes far faster than others.
Smart people take time to learn, thats how they got there.

~~~
tbirrell
SME = Subject Matter Expert (if google is to be believed).

~~~
nishs
Yes. Also defined in author's last paragraph.

~~~
Noumenon72
I saw it, but only because I had started skipping through his post knowing it
wouldn't make sense unless he explained SME. Poor communication habit.

~~~
probinso
thanks for noticing! :)

------
transfire
Good software requires teams, and teams will always vary in the member's skill
levels. Some programmers are better than others -- that's just a fact of life.
But even if you are not one of the best coders, that doesn't mean you
shouldn't be a coder or that you shouldn't be considered a valuable member of
a team, so long as you provide a meaningful contribution. You may get paid
less, but that's okay. You shouldn't beat yourself up over it. Do you enjoy
the work? Do you at least get stuff done, even if it is not as much as your
coworker in the same period of time? Then your okay. And that's okay. You just
need to find the right niche. Not every coding job is with a startup or
contract firm that needs to pump out the code a mile per minute.

~~~
urathai
I agree! You should always remember that (about) half of the people perform
under the average and there is no real way around that. Not everyone can reach
the top and that is something I think you need to accept at times.

------
pmarreck
I was challenged by my bosses at my last job because they were concerned about
overall team productivity (including mine... mainly because I spent some
additional time refactoring and creating better testing tools, because those
were necessary and coworkers reported them as cool and labor-saving) and they
put us in a "bataan death march" mode without a definite ending (...) and I
pushed back and said this is bullshit because what these metrics I took say is
that we need to be paying down some tech debt, stat.

I ended up leaving. Sometimes, the job is too good for you, and sometimes you
are too good for the job.

------
bArray
Some people write solid code slowly and some people write sloppy code fast. Of
course every variant of those exists too. A good programmer would probably pay
as much technical debt as early as possible.

------
auggierose
I am not sure what this post is about. Just realise, when you are working for
somebody else, of course they would like repeatable good performance from you.
Some people are able to deliver this better than others. In my experience,
thinking through a problem thoroughly and not giving a shit what others think
is the most comfortable and most efficient way to work. Not even sure why you
would consider working for somebody who stops you from going to the bathroom.

~~~
zzzcpan
Also not sure what the author is trying to say. But sounds like a really bad
management is trying to pressure him. He won't be able to work like that for
long. Probably better to start looking for another job and without a time
tracking.

------
phkahler
>> Bathroom breaks were consider unproductive, talking to co-workers was
considered unproductive, and doing any kind of research was pointless unless
we could bill a customer.

That is simply bullshit. Don't take anything they say seriously except the
broadest interpretation of what the project is.

It sounds like the writer has something north of basic competence. In that
case, just do your job mostly your way and don't give a fuck what the others
think. If THEY don't think you're worth your price they won't keep paying you.
It's really as simple as that. And if you do find yourself out on the street
then you can sit back and try to decide how to partition the failure between
yourself and the company. If there's any blame you can clearly put on yourself
then work on that. Otherwise just assume it's them and move on. The longer you
work in the field, the more you can assume you don't suck regardless of what
people appear to think.

In other words, actions speak louder than words or even company policy. If
they're keeping you it's because you're valuable regardless of what they say.

------
Justsignedup
I like to think of solutions and not problems, and costs:

There are too many bugs in the code. Okay. Why? Well we don't have good
testing set up. Why? Because time was not allotted for writing test code. Why?
Because it was rushed. Conclusion: You either pay the cost up-front or after-
the-fact. Either way. However if this is a constant thing then the real
problem is: "You have too many features being built for the size of your team,
either increase the size of the team, reduce features, or prepare for big
problems."

From personal experience I can say me working at "optimal" power, that is
optimal sleep, no external life problems, not sick, generally very happy is
maybe 30%-40% more productive. That seems like a lot, but if you need 500% the
productivity, you ain't gonna get it by making a person feel like junk, not
get needed rest (vacation / day off), not letting then handle family issues,
etc. I can get a developer working at 100% more productivity, but only for a
short amount of time, then they burn out which requires EVEN MORE rest time.

------
trjordan
Estimations are a game we play. To understand how good you are, you need to
figure out what's happening with the business and understand the impact you're
having there.

For a small company, this is probably the rate at which you ship features.
Good developers ship enough that there's pressure to constantly explain the
improvement to sales / marketing.

For a larger company, this is probably a user metric. Are this things you're
doing moving the needle on logins, time on site, repeat visits? You should
understand what areas of the product are high value, and which are
experimental. You should spend your time converting experimental features to
high value features. Polish and edge cases.

For a bigco, this is probably scaling metrics, like page load time and uptime.
You should have clear targets you're working against and be able to prioritize
against that target. Numbers are easy to show results against.

Anybody can be fast against sprint points. You need to understand what the
business goal is and play to your strengths against that goal.

------
0xdeadbeefbabe
I suppose if you help someone do something they could not do themselves then
you are actually a good developer, something like writing minecraft. It seems
like your criteria for being a good developer is more complex, maybe even
hopelessly more complex.

Why don't you try charging them 10 cents for each trip through your code?
Lawyers do that, and feel like it's okay.

------
kevin_thibedeau
Polish the resume and bail out. You're working for Bill Lumbergh. You can't
win against that sort of managerial talent.

------
_Marak_
I'd suggest trying to focus more on using tools related to building reports on
code coverage and code complexity during your day to day development.

If you lean more towards a test driven approach backed with trackable metrics
for code quality, I think you might have more confidence in your day to day
development and ultimately be more productive.

~~~
amriksohata
You do realise even the founder of TDD doesn't back it anymore and code
coverage is a very poor metric, your words sound like a senior developer from
2010. If he's a bad developer the best he can do is read up on SOLID
principles and read a book like Clean Code with good examples of how to write
code.

~~~
jghn
"You do realise even the founder of TDD doesn't back it anymore"

I ask this out of genuine curiosity but do you have a cite for this? Being
fairly anti-TDD myself it'd be good to keep this factoid in my pocket.

------
loup-vaillant
I got the "you're a bit slow" once. Which was funny, because I was very
focused and felt very productive at that time —more than ever before. Plus,
some of my code allowed a business expert to contribute directly, which made
us even faster.

I have since realised it had nothing to do with my actual performance. It was
a people thing.

~~~
Noumenon72
Please elaborate on the people thing.

~~~
loup-vaillant
During my job interview, I was told we were going to be equals. Like,
explicitly. He was older, and came to the project earlier, so I still deferred
to him. Nevertheless, I treated him like a peer.

Turned out he wanted to be the _boss_ —that was made official 2 months after
my arrival. On my very first week, he started to make disparaging comments
under the guise of joke (or were those real jokes?). Those soon occurred
daily. Sometimes in front of the client, who (surprise!) eventually lost trust
in me.

If this was my only experience, I would have thought it was me. But I have
since received enough external validation about my skills (people looking up
to me, actual results…) to know better. For some reason, the guy could not
stand me, so he got rid of me. Another small detail: he never smiled at me in
the morning when we shook hands to say hello. He did smile at everyone else.

------
Bahamut
The labels of good/bad developer are not useful - just as we try to optimize
the perf of our code, we should be focused on optimizing the things we can.
For example, figuring out some answers to questions like "How can I get to
this conclusion faster on figuring out bugs like this", or "How can I figure
out the optimal architecture for this feature faster?" Putting things in front
of us that are in our control and actionable is the best we can do.

One has to break the block of being afraid of failure - we all fail at various
tasks. The important part is how we respond to this failures.

------
AnneDev
As the OP of the article, can someone tell me what I did wrong?

[https://news.ycombinator.com/item?id=13281186](https://news.ycombinator.com/item?id=13281186)

------
j45
In a way, most people should be doing bad work today.. looking 5 years back.

------
edblarney
"I mean, how could someone spend several hours trying to debug a table that
looked one way on Firefox and one way on Chrome?"

Because HTML and it's various implementations/versions are a Byzantine mess.

'Web development' is not so much development ... it's about knowing a myriad
of little, innocuous details regarding various platform, api quirks, toolchain
bits etc..

The 'development' part of web-dev is usually quite straight forward - you're
not doing complex AI etc..

And fyi - development is 90% struggling through things you don't understand,
bugs, hiccups etc.. A good chunk of the code you write like English. It's all
about working through the pain points, making 'aha' realizations about how you
structured something, or about some crazy API quirk. That's the job.

