Live data from Hacker News

Some reasons to work on productivity and velocity

danluu.com

101–110 of 183 posts

Re: Some reasons to work on productivity and velocity

#101

I suspect the dissenters and Dan are not as far apart as one would expect. What I see in the dissent is a rejection of the specific brand of Silicon Valley rah rah productivity cult. There's a lot of mysticism in SV style productivity, whether it's the new hottest app or the latest lifestyle craze. It's also almost always directed at squeezing more work out of someone who's already working far too much. What Dan's pr…

Very well put. This was sort of my attitude to programming years ago - to try to get really good at the craft. But the question is, is that going to be rewarded or recognized at all? Who makes more, the programmer dedicated to their craft and domain getting better every day, or the leetcode expert who jumps from one FAANG to another getting 30% raises each time? What is the track for promotion at most companies - bei…

You should not expect a better payment from your company because you are a better programmer. Payment is according to demand and offer. Your company will mostly demand what you say: OK engineering, management skills, good communication skills, getting well along with your colleagues.

But from being a better programmer you can still derive better monetary gains. Instead of striving to become a lead or manager or product owner, you can either become an entrepreneur or search for a company where being a better programmer is a highly desired skill.

Re: Some reasons to work on productivity and velocity

#102
I think that being fast at coding is akin of being fast working on an assembly line. This might matter a bit, however I don't strive to do that. If it comes naturally with experience good, if not, I don't make a goal from it.

Churning out code is something that bores me. I'm interested more in problem solving, computer science part of programming, optimizations, research, discovery, architecture.

I am not interested so much in how I do this common thing fast, but rather in how I solve this hard or interesting problem. If a problem is already solved, can I find a better solution? How fast the code will run? How robust it will be?

Re: Some reasons to work on productivity and velocity

#103
This is great example of virtue-signalling and rationalizations.

No, typing speed is irrelevant related to content quality. Think of poetry - it is all about finding the right word rather than committing them into writing.

He just plainly typing too much - a thick book fallacy. Truth does not require lots of verbiage, on the contrary, it requires a short, clean, precise, adequate "just right" formulation.

That piece of text in in the link could be reduced 10x without losing anything meaningful (which is very sparse indeed).

Re: Some reasons to work on productivity and velocity

#104
Does anybody know if there’s a Mac app that randomly pops up a “what are you currently working on?” dialog? No automatic stuff like trying to find out using the foreground application and no explicit starting and stopping of activities, just simple sampling?

Re: Some reasons to work on productivity and velocity

#105
post #38

Earlier quoted context omitted.

The thinking pattern "I don't want to get faster, I prefer writing quality code" is a false dichotomy. The fastest programmers writes quality code, since quality code is much easier to get right and working with which are the most important factors for being a fast coder.

This is sometimes true. On a project long-term, will you keep velocity up by writing quality code? Yes. In certain, narrow areas (very "mathy" code, perhaps, that doesn't interact much with he world) might you go faster by writing quality code from the beginning? Maybe. However, can one also go much faster by: not writing tests one ought to have written; ignoring security issues; ignoring input edge-cases; ignoring o…

OK, what you're saying definitely applies when we incentivize speed and forget everything else, or when we compare ourselves to others without knowing the whole story. But this current discussion is in the context of someone's personal goals to improve their own productivity from their existing baseline. Valuing that doesn't necessarily mean they have to stop valuing quality or maintainability.

Re: Some reasons to work on productivity and velocity

#106
post #97

Earlier quoted context omitted.

I wish I could identify a finite set of tasks at which to practice and get much faster. The tradeoff between getting faster at one thing and learning a new thing that could potentially improve my productivity even more is never really clear to me. Someone can have perfected their craft in X and then something better comes along and replaces the whole paradigm.

Master the basic building blocks of programming. Frameworks comes and go but the basics are the same. Master as in "I do X correct the first time even without thinking" not "I know how X works". The "do without thinking" is when your subconscious is doing it for you so your conscious doesn't have to. You want to put as much as your work there as possible, it is like putting work on a GPU instead of your CPU, so every…

> To do that you write 10 changes, each about 50 lines and trivial to review since everything is super clean, otherwise you can't get through code reviews fast enough

No matter how small or clean the PRs were, I'm pretty sure I couldn't get reviews for 10 in one day.

Re: Some reasons to work on productivity and velocity

#107
This is doing wonders for my procrastination!

But I agree that if you find out that you have been working on the only problem worth solving for 10 years you should be able to take a break because the likelyhood that anyone else is able to run past you is very small. (they would have needed to start before you without you finding out for 10 years because hard problems are not solved faster in a group)

Re: Some reasons to work on productivity and velocity

#108
post #75

Earlier quoted context omitted.

There is only a limited amount of time in life. It matters on what you spend it. Given that the way programming in industry is done is generally fucked up, working super hard at becoming super fast at doing that brand of programming can be a waste of time. Of course that depends on what your goals are.

Interesting POV. Can you elaborate on an alternative to the way of industry programming? Or more simply, list some of the ways in which industry brand programming is flawed?

For starters, even super big companies like Apple don't have any formal semantics for their APIs.

Of course there is a reason for that, it is just too hard with current tools for formal mathematics to achieve anything of the scale Apple needs.

So what will you spend your time on? Learn how to super fast crank out SwiftUI apps? Or solve the problem of doing formal mathematics properly so that companies can actually use it?

SwiftUI is pretty buggy still, by the way. Given that Apple controls its entire stack, why is that? Exactly, because they are following industry best practices, which are just not very good. Becoming super productive under these circumstances just means digging yourself deep into a local optimum that is not very good globally.

Re: Some reasons to work on productivity and velocity

#109
At least one way to increase velocity is to design software such that you can radically accelerate the aging process to get the software to 10+ years maturity but within a matter of weeks.

For example, say you're implementing a distributed consensus protocol like Viewstamped Replication, Paxos, ZAB or RAFT. This could be several thousand lines of code, just to get something up and running, excluding testing. Then months of writing unit tests and integration tests by hand and thereafter you would still expect several years of widespread industry use and sometimes weeks of debugging per reported issue just to shake out all the non-obvious edge cases.

How would you increase your velocity here?

The key insight is that the implementation phase represents only several months of work, whereas the actual maturation process or debugging phase represents perhaps years of work. And, until recently, both phases were typically treated the same way—people manually writing code, and then people manually writing tests, manually running the code on real systems in real time, manually filing issues, manually classifying these issues and manually debugging issues.

So, if you can accelerate the second debugging phase, automating all the manual steps, then—even if your team don't enjoy much velocity in the implementation phase—you could end up several years ahead in velocity where it really counts.

If we go back to our consensus example, then you could solve the velocity problem in the testing/debugging phase by spending a little extra time upfront in the design and implementation phase to make sure that all non-deterministic resources in your consensus software (such as message passing or networking, time, timeouts and storage I/O operations) are pluggable and can be swapped out with deterministic shims.

Then, when it comes to testing, you could write self-generating unit and integration tests, like Worms, Scorched Earth or SimCity.

Your test would spin up a randomly generated but fully deterministic simulated cluster in a single local process on your local developer machine, and then simulate random client requests and random network/storage fault injection, with random network/storage latency/reliability properties, while hooking into where the critical things like state transitions take place and checking linearizability immediately as these state transitions happen, also checking all other invariants along the way required for your software to be correct, so that your test simulator could even tell you if an issue is a liveness bug or a correctness bug, without you having to spend time to figure that out.

Then, because you're also shimming your time source, you can just speed up time, so that you can simulate hours of real-world runtime (that would otherwise have literally taken hours if you were using something non-deterministic like Jepsen) in just a few seconds.

And now, if a test finds an invariant violation, you can just replay the randomly generated test, again and again, but with debugging logs turned on, to also accelarate the time it takes to reproduce and fix the issue and then verify the fix.

Re: Some reasons to work on productivity and velocity

#110

I think that being fast at coding is akin of being fast working on an assembly line. This might matter a bit, however I don't strive to do that. If it comes naturally with experience good, if not, I don't make a goal from it. Churning out code is something that bores me. I'm interested more in problem solving, computer science part of programming, optimizations, research, discovery, architecture. I am not interested…

I’d also add that it’s something many of us no longer need to prove to ourselves. When you are new, you have to at least prove to yourself once that you can be this ‘machine’. Once you’ve proven it, how is that a goal anymore? I’m not interested in that anymore either.

There are more optimal ways to being this machine than just slamming one’s head against a keyboard, the proverbial work smarter, not harder.

Post reply on HN