Live data from Hacker News

Heuristics for Effective Software Development: A continuously evolving list

holub.com

41–50 of 68 posts

Re: Heuristics for Effective Software Development: A continuously evolving list

#41
post #39

Reading the comments first I suspected this was an HN over-reaction to the list. However upon reading it myself I must totally agree. There is nothing actionable about this list. A lot of it is meant to sound wise, without any specifics. Definition of heuristics: > A heuristic, or a heuristic technique, is any approach to problem-solving that uses a practical method or various shortcuts in order to produce solutions…

>> Outcomes matter more than output. A focus on output yields sub-par outcomes. But isn't this just stating the obvious, e.g. don't measure success by lines of code written, number of commits, number of bugs fixed...? And there is nothing wrong in stating the obvious, especially as when it is not obvious to some people.

Generally, we get paid by our output (agreed upon deliverables). However, on the other hand, we generally get repeat business by our outcomes (users became much more productive and now they want more).

There's enough nuance required here to fill a small series of books. If you state the obvious and then go on to actually examine the nuance, then I'm fine giving you credit. If you don't then I don't really see the benefit.

Worse, you've given people a thought terminating cliche that can be disastrous in the hands of a novice. "Hey, we're focusing on the outcomes!" Yeah, but you've missed three milestone dates so your funding is going to be pulled and everyone is now unemployed.

Re: Heuristics for Effective Software Development: A continuously evolving list

#42

Reading the comments first I suspected this was an HN over-reaction to the list. However upon reading it myself I must totally agree. There is nothing actionable about this list. A lot of it is meant to sound wise, without any specifics. Definition of heuristics: > A heuristic, or a heuristic technique, is any approach to problem-solving that uses a practical method or various shortcuts in order to produce solutions…

> A lot of it is meant to sound wise, without any specifics. This unfortunately applies to most of the popular advice in our industry. You could argue that "meant to be wise, without any specifics" is a requirement for a meme to get picked up and recognized by a large enough mass of people in order for it to become viral. Consider if you can apply anything in SOLID in an actionable way. None of it is actionable, exce…

I'm getting misty-eyed over here. Seriously, I thought I was the only one.

I have heard almost no advice that's anywhere near actionable in our industry. The way I see it is that we have no objective ways to even talk about good code versus bad code (and forget all of the support tasks like "can we estimate this"; those require some objective understanding on how terrible the code happens to be).

We've got code smells. Like, the most primitive and "from your gut" sense. This for-loop makes my tummy feel bad.

It all feels like poetry to me.

Re: Heuristics for Effective Software Development: A continuously evolving list

#43
post #21
post #20

Earlier quoted context omitted.

You are right. But I read this as someones collection of ideas anways not as universal priciples that must be applied everywhere. I tend to favourably read into other peoples statements if in doubt (especially on HN)

> I tend to favourably read into other peoples statements if in doubt (especially on HN) That's a commendable character trait, but if you have to twist a "heuristic" beyond recognizability for it to make any sense, then what's the purpose of that heuristic?

Hard agree. A heuristic can only be said to work if it means the same thing to everyone. Like, if the list means anything to everyone, then how can we say that the list is responsible for success or failure?

Otherwise what are we saying the causality is? Like, that the list is just somehow inspiring everyone to be successful? So, like, if we just believe enough in the list we'll get it done? No thanks. I'm not going to pray to some poetry.

Re: Heuristics for Effective Software Development: A continuously evolving list

#44

Why do agile-folks seem to hate product managers so much? This comes out in #13, #19, and #20 (well depending on exactly what they mean by "managing".) I find it really helps to have someone dedicated to the product side, so they can help with prioritization, generating ideas for what to try next, keeping track of the research, and tracking the launch process and metrics. We could, I suppose, distribute all of that t…

I'm not yet an expert on this, but I'm coming to the same intuition that the writer has so let me attempt to explain.

Let's say we have 4 domains, and 4 domain experts. P is product, B is backend, F is frontend, and D is database(this is heavily simplifying, I know there are many sub-domains within each depending on the scope of the project). Each new feature starts with the P expert working with the team translating the user requirements into what he thinks is needed. B and F communicate with each other. B and D communicate with each other. But since none of them have a shared understanding, the communication is of poor quality. You get mistakes. You'll find that if you had an PF expert the implementation would be 10x simpler. You get things where if you had an PBFD expert would be 1 million times simpler. Without the cross-domain knowledge you will never know when those simplifying measure are possible.

The problem with starting with a P is that the expert is basically starving the rest of the team of the knowledge that they have accumulated. They handle that work, it's up the the product expert to come up with the new features. And by putting that title on their head, and never letting the developers in, it tends to lock in place.

You are only as creative as your feedback loops, and your feedback loops depend on the bandwidth of communication. Within waterfall that might be months. Within agile that is a sprint. But with a PBFD expert your feedback loops can be measured in seconds.

You don't need PBFD experts, but it is very helpful to at least have translators. So there might be a PD expert, there might be a BF expert. That way you can get a reasonable translation of the requirement out. By taking on the team a Product Manager who is explicitly non-technical person, you lock that P in place. I think that's why we're seeing push-back to PM's where it's a general domain issue. P is a fine role, if you also have a PD, if you also have a PB, if you also have a PF. The Fullstack developer is already a BFD, why not also train them in the product?

The example I like to give is that Linus Torvalds created git in 10 days because he was a master user of Source Control and knew exactly what he needed while also able to create everything, while Microsoft's Source Control team had worked with hundreds of developers over years and couldn't compete. When you have hundreds working on a project the ability to communicate in a depth-first-search style drops to 0, and you are left to only breadth-first-search solutions. Metcalfe's Law destroys productivity.

Re: Heuristics for Effective Software Development: A continuously evolving list

#45
post #26

I wish there were a list for "effective actually completing your Kickstarter", wherein Holub took money for an "Agile video class" [1], which was supposed to be delivered in an Agile way. That was 4 years ago. First the timeline got pushed out, then I rather gather he's just got bored and drifted on. How ironic is the non-delivery of an agile training course, supposedly delivered in an agile way, that utterly fails t…

From his blog[1] > External pressure (accountability) and internal pressure (responsibility) are simply not needed in a healthy culture. As in a relationship, the word “accountable” is rarely, if ever, heard in high functioning organizations. I can't quite determine if he is ahead of his time or a snake oil salesman. [1] https://holub.com/noaccountability/

Yikes, I've liked some of Alan's talks but I think he's gone a little of the deep end with this one.

For me responsibility is a key component of getting shit done. You do need an environment where fear is driven or so that if someone feels they can not fulfil they're responsibility they can come forward for support. But in my experience if everyone is responsible for something it often ends up no one is.

Accountability should not nearly be as negative and adversarial as Alan portrays though it is admittedly often treading a fine line. As a leader i try to be accountable for my area of responsibility and aim to filter external blame from the team. I encourage my team to be introspective about our processes and to continually improve, I definitely don't find finger pointing helpful.

Re: Heuristics for Effective Software Development: A continuously evolving list

#46
post #41
post #39

Earlier quoted context omitted.

>> Outcomes matter more than output. A focus on output yields sub-par outcomes. But isn't this just stating the obvious, e.g. don't measure success by lines of code written, number of commits, number of bugs fixed...? And there is nothing wrong in stating the obvious, especially as when it is not obvious to some people.

Generally, we get paid by our output (agreed upon deliverables). However, on the other hand, we generally get repeat business by our outcomes (users became much more productive and now they want more). There's enough nuance required here to fill a small series of books. If you state the obvious and then go on to actually examine the nuance, then I'm fine giving you credit. If you don't then I don't really see the ben…

"agreed upon deliverables" is one definition of output. I think he is talking more generally, e.g. lines of code, over-long email, unnecessarily verbose documentation, ..., I could go on indefinitely.

But you are really arguing in general against such lists like this, that don't "examine the nuance". But perhaps they are useful discussion point or memory joggers. And shouldn't the senior members of a team or managers explain to novices the importance of meeting such milestones that you mentioned?

Re: Heuristics for Effective Software Development: A continuously evolving list

#47

I wish there were a list for "effective actually completing your Kickstarter", wherein Holub took money for an "Agile video class" [1], which was supposed to be delivered in an Agile way. That was 4 years ago. First the timeline got pushed out, then I rather gather he's just got bored and drifted on. How ironic is the non-delivery of an agile training course, supposedly delivered in an agile way, that utterly fails t…

Could replace a lot of the items on that list with:

"Real artists ship."

Re: Heuristics for Effective Software Development: A continuously evolving list

#48
post #46
post #41

Earlier quoted context omitted.

Generally, we get paid by our output (agreed upon deliverables). However, on the other hand, we generally get repeat business by our outcomes (users became much more productive and now they want more). There's enough nuance required here to fill a small series of books. If you state the obvious and then go on to actually examine the nuance, then I'm fine giving you credit. If you don't then I don't really see the ben…

"agreed upon deliverables" is one definition of output. I think he is talking more generally, e.g. lines of code, over-long email, unnecessarily verbose documentation, ..., I could go on indefinitely. But you are really arguing in general against such lists like this, that don't "examine the nuance". But perhaps they are useful discussion point or memory joggers. And shouldn't the senior members of a team or managers…

> And shouldn't the senior members of a team or managers explain to novices the importance of meeting such milestones that you mentioned?

I basically read the whole list as: "How do be successful? Step 1: Be successful. Step 2: Be successful at purple. etc"

Some of it sort of makes sense. Some of it might as well be gibberish. None of it is useful without a bunch of senior members of a team who have been successful before. And if that's the case, then we can just delete the list and stick with the senior members of the team.

Re: Heuristics for Effective Software Development: A continuously evolving list

#49
post #42

Earlier quoted context omitted.

> A lot of it is meant to sound wise, without any specifics. This unfortunately applies to most of the popular advice in our industry. You could argue that "meant to be wise, without any specifics" is a requirement for a meme to get picked up and recognized by a large enough mass of people in order for it to become viral. Consider if you can apply anything in SOLID in an actionable way. None of it is actionable, exce…

I'm getting misty-eyed over here. Seriously, I thought I was the only one. I have heard almost no advice that's anywhere near actionable in our industry. The way I see it is that we have no objective ways to even talk about good code versus bad code (and forget all of the support tasks like "can we estimate this"; those require some objective understanding on how terrible the code happens to be). We've got code smell…

There are a number of agreed bad practises: long functions, deep nesting, obtuse identifiers, unrestricted use of gotos, global variables, no coding standard, premature optimisation, C macros, raw pointers...

Re: Heuristics for Effective Software Development: A continuously evolving list

#50
post #49
post #42

Earlier quoted context omitted.

I'm getting misty-eyed over here. Seriously, I thought I was the only one. I have heard almost no advice that's anywhere near actionable in our industry. The way I see it is that we have no objective ways to even talk about good code versus bad code (and forget all of the support tasks like "can we estimate this"; those require some objective understanding on how terrible the code happens to be). We've got code smell…

There are a number of agreed bad practises: long functions, deep nesting, obtuse identifiers, unrestricted use of gotos, global variables, no coding standard, premature optimisation, C macros, raw pointers...

False.

Bryan Cantrill (OS developer who used to work at sun microsystems) talks about how the C macros are great [1].

John Carmack talks about how long functions can be better than short ones [2].

Every piece of advice that I've heard has had a contradiction coming from a preeminent developer.

To be fair, yes, people do agree on bad practices. They are just often wrong. People agreeing that something is true doesn't make it that way.

[1] - I believe that he mentions that here however, I'm not sure. I have heard him mention it in more than one video. https://www.youtube.com/watch?v=LjFM8vw3pbU

[2] - http://number-none.com/blow/john_carmack_on_inlined_code.htm...

Post reply on HN