I've had similar self-doubt in the past, I considered myself fast but sloppy.<p>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.<p>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.<p>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.
Being a developer <i>always</i> 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.<p>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.<p>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?
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.<p>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?<p>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.
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.<p>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.<p>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: <a href="https://www.youtube.com/watch?v=8Q_JYYcBP2Q#t=15m05s" rel="nofollow">https://www.youtube.com/watch?v=8Q_JYYcBP2Q#t=15m05s</a>
> This isn’t an impostor syndrome.<p>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.<p>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.
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.<p>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.<p>The reality is most people are probably lucky to get 20 hours of productive work done a week.
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?"<p>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.
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.<p>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.<p>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.<p>The value you give yourself will be the value people will give you.
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.<p>I've been forced by managers to merge or even ship features that are half-way done.<p>I have to agree with other people advising you to switch to another place.<p>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.<p>Don't be afraid to pursue a better workplace environment if that's what matters to you.<p>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.<p>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 <i>me</i> 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.
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.<p>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.<p>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.
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.)<p>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:<p>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.<p>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.<p>It turns out most tasks are the same on the surface. Spend time getting those patterns at heart.<p>3. Fast developers have a deeper knowledge of the libraries around them. We underestimate the overhead of research, even with google.<p>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.<p>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.<p>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.<p>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.
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?<p>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.<p>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.
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.<p>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.<p>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.<p>An alternative view on the same problem space:<p><a href="https://www.exratione.com/2016/01/paid-a-great-deal-to-be-terrible-at-development-most-of-the-time/" rel="nofollow">https://www.exratione.com/2016/01/paid-a-great-deal-to-be-te...</a>
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...<p>- So it says in your CV that you are quick at math.<p>- Yes. Yes I am.<p>- How much is 23 times 14.<p>- 7!<p>- That's not even close!<p>- No. But it was quick!
You could change jobs. An employer tracking your activities to the minute sounds like a cancerous work place to begin with.<p>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.<p>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.<p>Its best to find an employer who can help you grow instead of fitting you in a box.
I've told this story before, so here is the short version.<p>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."<p>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.<p>"That's too long... $girl could do it 15..., wait, what?"
I am also 'a little slow'.<p>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.<p>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.
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.
<p><pre><code> 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.
</code></pre>
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 <i>your</i> part of the job in that case if you DON'T have any questions.<p>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.
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.
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.<p>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.<p>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.
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.<p>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.<p>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.
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.
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.<p>I ended up leaving. Sometimes, the job is too good for you, and sometimes you are too good for the job.
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.
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.
>> 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.<p>That is simply bullshit. Don't take anything they say seriously except the broadest interpretation of what the project is.<p>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.<p>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.
I like to think of solutions and not problems, and costs:<p>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."<p>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.
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.<p>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.<p>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.<p>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.<p>Anybody can be fast against sprint points. You need to understand what the business goal is and play to your strengths against that goal.
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.<p>Why don't you try charging them 10 cents for each trip through your code? Lawyers do that, and feel like it's okay.
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.<p>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.
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.<p>I have since realised it had nothing to do with my actual performance. It was a people thing.
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.<p>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.
As the OP of the article, can someone tell me what I did wrong?<p><a href="https://news.ycombinator.com/item?id=13281186" rel="nofollow">https://news.ycombinator.com/item?id=13281186</a>
"I mean, how could someone spend several hours trying to debug a table that looked one way on Firefox and one way on Chrome?"<p>Because HTML and it's various implementations/versions are a Byzantine mess.<p>'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..<p>The 'development' part of web-dev is usually quite straight forward - you're not doing complex AI etc..<p>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.