[HN Gopher] A dev's thoughts on developer productivity
       ___________________________________________________________________
        
       A dev's thoughts on developer productivity
        
       Author : raviparikh
       Score  : 80 points
       Date   : 2022-05-17 18:33 UTC (4 hours ago)
        
 (HTM) web link (about.sourcegraph.com)
 (TXT) w3m dump (about.sourcegraph.com)
        
       | Kranar wrote:
       | >Most self-styled experts on developer productivity seem more
       | interested in selling something rather than painting an accurate
       | picture of how devs really work.
       | 
       | Says a blog post from a CTO who sells a product to track software
       | productivity.
        
         | slimsag wrote:
         | (I'm an engineer at Sourcegraph, but otherwise share your
         | healthy skepticism of companies in general)
         | 
         | For what it's worth, I don't think that's accurate. I've worked
         | closely with the team that builds Code Insights, and at pretty
         | much every point they've been vehemently opposed to exposing
         | any metrics that could ever be used to track/monitor devs.
         | 
         | On the contrary I've actually heard most use cases of it in
         | companies are actually devs themselves showing
         | leadership/management clear graphs of "look, code quality here
         | is getting worse, we need more time in sprints to improve this"
         | 
         | Anyway, just my take, not commenting in any official capacity.
        
           | johnnymorgan wrote:
           | Blend that in with some product intelligence to manage
           | stackholders and booya, a solid nice product/dev integration.
           | 
           | Quality of user stories and product cycle would be
           | interesting to see as it has a direct impact on dev quality
           | (ie how much do they have to guess versus cleanly mapped
           | out).
           | 
           | It's pretty cool and I see where you are going with it.
        
         | beliu wrote:
         | Sourcegraph CTO (and author of the post) here. There's no part
         | of our product that seeks to track software productivity?
         | 
         | We do have a feature (https://about.sourcegraph.com/code-
         | insights) built around code search that lets devs define their
         | own metrics around things like progress of big migrations and
         | anti-patterns + code smells. This tweet is a good summary of my
         | philosophy around code-related metrics:
         | https://twitter.com/beyang/status/1524259425451577344.
         | 
         | Insights from treating code as data are best discovered by the
         | people who know the dataset through and through--i.e.,
         | developers. Another project we've released in this vein is
         | https://codestat.dev, built on top of Comby (incidentally also
         | on the HN front page right now), which was created by a member
         | of our team, Rijnard, as part of his PhD thesis on automatic
         | program transformation.
         | 
         | We're developers by trade and by heart, and are motivated by
         | making tools and mental models that devs actually find useful
         | and that boost the creative spark of coding. If there's
         | something we can improve about our product or message to
         | further this mission, I'd love to hear your feedback!
        
           | kodah wrote:
           | I think you're getting some snark because corporations are
           | firing up a renewed interest in these kinds of metrics and as
           | part of that they're starting with all the old ones (and
           | motivations) that didn't work. Your messaging was fine, and
           | your product has a clear audience (developers), this is just
           | the fallout of industry bad behavior.
        
             | beliu wrote:
             | This is really important to call out. There have been a lot
             | of really bad practices in the past that try to reduce
             | "developer productivity" to something that approximates a
             | widget factory, and the results have been awful for both
             | developers and companies. This feeds right into the last
             | section of the post, "If we don't talk about developer
             | productivity, someone else will"--we need more developer
             | voices advocating for the creative spark of building
             | software.
        
           | dnndev wrote:
           | What is your product for me as a developer?
        
             | beliu wrote:
             | World's best code search: https://sourcegraph.com/search
             | Analyze code as data: https://sourcegraph.com/insights
             | Interactive docs you'll actually use:
             | https://sourcegraph.com/notebooks Take the pain out of
             | large-scale refactors: https://sourcegraph.com/batch-
             | changes IDE superpowers in code reviews:
             | https://docs.sourcegraph.com/integration/browser_extension
        
               | dnndev wrote:
               | Thanks for the links. Looks like a nice utility belt for
               | devs who want to be productive.
               | 
               | Most orgs kill productivity and creativity with lack of
               | compensation, treating them like a code farm, or mediocre
               | peers.
               | 
               | Devs choose to be productive in different environments,
               | most of the time it's simple, step aside and let the dev
               | do more than code. Talk to a client (yes! It's not as
               | crazy as it sounds). Show appreciation with bonuses not a
               | seasonal holiday themed ham.
               | 
               | I think your headed in the right direction!
        
       | TameAntelope wrote:
       | This isn't super related, but the unexpected complication I've
       | run into as I've tried to scale my team is that nobody has the
       | knowledge I have, so I've got to spend most of my time showing
       | folks how to do the work.
       | 
       | The problem here is that if I'm not being productive (I'm
       | teaching), and the other devs are not being productive (they
       | don't know the domain), then nobody is productive.
       | 
       | You'd think that'd level out eventually as the other devs grow,
       | but on short runways, there really isn't time for that.
       | 
       | However, we can't hire devs who know the domain because a)
       | they're not looking for jobs and b) the ones who are we can't
       | afford.
       | 
       | So it's just me, teaching other devs, when I could/should be
       | pounding out code so we can get a few more sales, which will
       | justify the next round.
       | 
       | Unintuitively, it probably didn't make sense to hire anyone else,
       | but that feels weird because then it's just me in a dark room
       | churning out code nobody's reviewed, and there really is plenty
       | of work to do, it's just all work only I seem to be able to do.
       | 
       | I assume this is standard for early stage startups who haven't
       | yet found their P/M fit, but it is odd.
        
       | goncaloo wrote:
       | Great article!
       | 
       | > What good is "change failure rate" if you can't even jump-to-
       | def across your code?
       | 
       | Exactly. Organizations often focus on the externally visible
       | factors without considering the day-to-day of a developer
       | productivity. If only we spent more time to refactor/maintain and
       | general tooling instead of more status updates and unnecessary
       | processes, imagine the productivity we could achieve..
       | 
       | At Google we had this simple problem yet it halted our entire
       | team's productivity: IntelliJ started being insanely slow
       | indexing files and auto completing stuff. It was a mixture of
       | generated code and the monorepo that made it take tens of seconds
       | for any kind of autocompletion. It's been there for years but
       | there wasn't much priority to fix it, so things kept going (and
       | probably still keep going) like this...
        
         | zarkov99 wrote:
         | Man, I have seen this everywhere, there is so much low hanging
         | fruit for organizations that take developer productivity
         | seriously. It is insane the amount of friction (leading to
         | burnout, disengagement, and ultimately turnover) that
         | developers deal with, _every day_ , just because no one in the
         | organization can see past their quarterly OKRs and fix basic
         | things.
        
           | jrvarela56 wrote:
           | It baffles me how everyone complains that they can't find
           | talent and that devs make so much money, but at the same time
           | don't invest in at least trying making devs 2-5x more
           | productive.
        
             | BlargMcLarg wrote:
             | The state of the industry could be way, way better. We just
             | decided not to do so for.. some reason. We could answer it,
             | but every time someone does, they get dogpiled by
             | naysayers.
             | 
             | On the other hand, if the industry truly evolved, it would
             | probably up the barrier to entry to a level a lot of
             | developers would be out of a job.
        
               | marcosdumay wrote:
               | Unless we are very close to "peak software" where the
               | most valuable problems are already solved (very
               | unlikely), raising the productivity of some developers
               | will not negatively affect other ones.
        
               | BlargMcLarg wrote:
               | I'm fairly certain we'll hit the point where we can no
               | longer reasonably throw bootcampers at jobs and expect
               | professional output by 3 months way, way before "peak
               | software". We already don't expect that from loads of
               | other fields, both arts and sciences.
        
           | alasdair_ wrote:
           | Stripe has the concept of "paper cuts" that any developer can
           | file via a simple web form. These are small annoyances that
           | no one will have an OKR for but are bothersome nonetheless.
           | 
           | There is a team that focuses on fixing these smaller issues,
           | in addition to a larger dev productivity team that works on
           | the more gnarly problems like "building takes too long".
           | Importantly, the team DOES have an OKR for fixing paper cuts,
           | and gets kudos for doing so.
        
       | tonioab wrote:
       | It's great to see deeper pieces about developer productivity - in
       | this case starting from first principles and the actual
       | experience of developers. The notion of feedback loops has also
       | been explored in e.g.
       | https://martinfowler.com/articles/developer-effectiveness.ht...
       | 
       | The bad reputation of developer productivity metrics comes from
       | the misguided assumption that developers should be measured. The
       | better approach is to treat developers as customers of the
       | management team / engineering enablement team /etc. In that
       | sense, developer productivity is actually a measurement of
       | management effectiveness / organizational health.
       | 
       | Once you build your developer productivity approach on this
       | basis, what needs to be measured becomes much clearer - for
       | example: interruptions caused by meetings, performance of local
       | tooling like local builds, latency of CI, number of on-call pages
       | triggering outside business hours, etc.
       | 
       | The right set of metrics depends on your team and can be sourced
       | from surveys and just talking to people about what's painful on a
       | daily basis. As a quick and dirty solution, I'd even recommend
       | piping Github webhooks and other events to a product analytics
       | tool like Amplitude or Mixpanel. You'd be surprised how fast you
       | can understand things like build or CI latency by using a classic
       | funnel visualization.
       | 
       | A lot of great engineering teams are migrating to this approach,
       | especially when they have a dedicated platform / enablement /
       | productivity engineering team.
        
       | ilrwbwrkhv wrote:
       | I think a lot of the problems today are with the project
       | management tools. Every single tool focuses on the day to day and
       | not the big picture. The day to day should be left to individual
       | teams. But on a company scale, a nice broad project management
       | tool would be something that would be really useful.
        
       | phaedrus wrote:
       | After a series of previous employers I ended up burned out (but
       | sort of wasn't sure if I was or not). I couldn't quite pin down
       | WHAT it was that was burned out of me until I saw this quote from
       | the linked article:
       | 
       | "Flow state is that state of focus and productivity that you
       | attain when you're feeling inspired and motivated."
       | 
       | ...which makes perfect sense as two of the worst-offenders were
       | places where I was expected to put out lots of code requiring
       | flow-state, while simultaneously being immediately and constantly
       | available to instant messages and email-used-like-instant
       | messaging.
       | 
       | The scary part is, the ability to focus and produce like I could
       | the first years I was programming never came back. Now, I'm
       | working at a place and in a role where my employers seem happy
       | with what I'm doing, but _I 'm_ not happy with the rate I (can't)
       | produce at.
        
       | cletus wrote:
       | IMHO the #1 thing you can do for developer productivity is to
       | reduce the development feedback loop to under 30 seconds and
       | preferably under 10. Why? Longer than that and you have two
       | choices:
       | 
       | 1. Work on simultaneous tasks at once. This incurs a context-
       | switching penalty; or
       | 
       | 2. Get distracted by HN, social media, reddit or whatever. This
       | has the same context-switching penalty and you can end up
       | spending way more time on that distraction than the development
       | loop actually needed.
       | 
       | I've worked on a code base where it took 3 minutes minimum to run
       | a unit test. Some adjust to this mindset by doing more in a
       | single test but even in the most optimal fashion it's not as good
       | as quick turnaround.
        
         | pharmakom wrote:
         | This is why I love static checking tools such as type systems.
         | I often get the feedback as I type.
        
           | cletus wrote:
           | I agree 100%.
           | 
           | Compiler errors are strictly superior to runtime errors. It's
           | as simple as that.
        
         | dan-robertson wrote:
         | Google is famous for having amazing dev tools. If any (large)
         | project is going to have this most-important thing, it is
         | likely to be best able to get it at Google. And yet Google also
         | has a reputation for low developer productivity. So, what
         | gives? Are some of my premises wrong, is the most important
         | thing not close to sufficient, is Google actually productive?
        
           | jklm wrote:
           | Google had amazingly below-average dev tools when I was
           | there. It was standard in my org to have multi-minute builds,
           | with input/output streamed to/from a remote server. Yes,
           | every keystroke had a small but perceptible delay. I was
           | working on an outlier project that took over 30 minutes to
           | build for a single-character change. I never learned as
           | slowly as I did during my time there. Startups generally have
           | faster tech, bigcos generally have more customized tech with
           | more options and that can operate 'at scale.'
        
       | chrisweekly wrote:
       | Awesome post. The pictures -- and the ideas they represent --
       | resonate.
        
       | lewisl9029 wrote:
       | Really enjoyed the article! Wholeheartedly agree with the use of
       | iteration speed as the measure for productivity.
       | 
       | I think one key under-explored opportunity for improving
       | productivity involves bringing the outer loop closer to the inner
       | loop. The main reason we have a distinction between these loops
       | is everything we need to do in the inner loop generally happens
       | fast enough to keep us in flow state, while everything in the
       | outer loop is usually slow enough to break flow state.
       | 
       | In the graphic illustrating the inner loop vs outer loop in the
       | article, only the Plan, Review, Measure, React, steps have
       | intrinsic latency floors based on
       | product/market/human/organizational constraints. My hypothesis is
       | that the other three, Author, Test, Deploy, are constrained in
       | latency only by technology, and can be made fast enough keep us
       | in flow state given the right technology, bringing them into the
       | inner loop.
       | 
       | Disclaimer: My ulterior motive in writing about this is I've been
       | building a product to do exactly what I described above, for
       | client-side rendered React apps: https://reflame.app/. But I
       | would honestly love to see more folks explore opportunities here,
       | since I want to be able to build all kinds of software this way,
       | not just the kinds I have the bandwidth/skills to work on.
        
       | paulbjensen wrote:
       | This was a a really good post.
       | 
       | I work in a large organisation where some of the issues mentioned
       | are very relevant, especially the 'flow state" issue.
       | 
       | We have a mix of on-site and remote workers (myself being a
       | remote worker), and because Slack/Teams is our primary method of
       | communication with colleagues, and I operate in a tech lead role,
       | it becomes difficult to achieve flow state on some tasks.
       | 
       | I ended up creating an Apple shortcut that automatically setup
       | the computer for operating in a flow state (called Superbam -
       | https://www.icloud.com/shortcuts/5c0c729476584e11b3b12744893...).
       | It helped to some extent.
       | 
       | I think a lot of organisations are clueless about flow state and
       | why they should give developers the chance to reach it.
        
       | gorgoiler wrote:
       | The author is very clever. This was a fascinating read.
       | 
       | On the inner loop, and progress being a vector sum: one thing I
       | find crucial is knowing where I have to go. That translates to
       | two mantra: rush to the finish line, then rebuild it if needed.
       | 
       | When embarking on a project I know roughly what stages are
       | needed. Maybe three dependencies, one more to bring them
       | together, one more to deliver a subsequent result, and one outer
       | one to present the whole code. Example: a web scraper to get
       | weather data, a thermometer polling daemon, a database to store
       | the two, a scheduler to run the first two and store it in the
       | database, and a module to perform high level queries on past data
       | and forecast trends for the future.
       | 
       | It's really easy to deep dive on any one of those components.
       | It's not until I get to the final one that I realize how little I
       | really know about problem. I'll explore it a little, then work on
       | something else for a week, then come back and know exactly how to
       | retackle the problem from start to finish. It's the revisiting
       | that gives me insight into what to do, and it was the rush to
       | build the prototype that gave me the raw materials needed to have
       | that insight.
       | 
       | All of this requires at least one whole day of concentration,
       | then three half days of tinkering, then a final week of rewriting
       | and polishing and responding to code review.
       | 
       | So much of this process is subject to external forces that impact
       | my productivity. I am grateful to this article for solidifying
       | them in writing.
        
         | beliu wrote:
         | Author of the post here. This _really_ resonates with me. One
         | of the best pieces of advice I 've received in my life as a
         | programmer, from my first manager actually, was "focus on
         | getting an end-to-end system up and running first, no matter
         | how janky, and then refine from there".
        
         | marcosdumay wrote:
         | Oh, that's for sure. If you don't know what direction to go,
         | you'll get into a random walk, for what the most common outcome
         | is to spend all your days moving without getting anywhere.
         | 
         | If instead you rush, you get a longer average free-path and may
         | gather enough information from the results to decide a
         | direction.
         | 
         | The situation is different if you already know where you are
         | going before you start.
        
       | ChrisMarshallNY wrote:
       | I've been writing about the way I work for years. I haven't
       | bothered to boil things down into a pattern, but the explanations
       | are fairly clear:
       | 
       | https://littlegreenviper.com/various/concrete-galoshes/
       | 
       | https://littlegreenviper.com/miscellany/forensic-design-docu...
       | 
       | https://littlegreenviper.com/various/evolutionary-design-spe...
       | 
       | https://littlegreenviper.com/miscellany/thats-not-what-ships...
       | 
       | https://littlegreenviper.com/various/testing-harness-vs-unit...
       | 
       | https://littlegreenviper.com/miscellany/leaving-a-legacy/
       | 
       | https://littlegreenviper.com/miscellany/risky-business/
       | 
       | https://littlegreenviper.com/various/the-road-most-traveled-...
        
       ___________________________________________________________________
       (page generated 2022-05-17 23:00 UTC)