HNHacker News
TopNewBestAskShowJobs

sandal

723 karma · joined August 3, 2008

submissionscomments
sandal··on Alan Kay has agreed to do an AMA today
The more meaning you pack into a message, the harder the message is to unpack.

So there's this inherent tradeoff between "easy to process" and "expressive" -- and I imagine deciding which side you want to lean toward depends on the context.

Check this out for a practical example: https://www.practicingruby.com/articles/information-anatomy

(not a Ruby article, but instead about essential structure of messages, loosely inspired by ideas in Gödel, Escher, Bach)

sandal··on Beginning to climb out of the software death spiral
This is a followup essay that continues the discussion from "The Sad Graph of Software Death" .. which was discussed here a day ago!

https://news.ycombinator.com/item?id=10826916

sandal··on The sad graph of software death
Here's the followup essay, for those interested: http://tinyletter.com/programming-beyond-practices/letters/b...
sandal··on The sad graph of software death
This is an accumulation over the 4 month period, not a total issue count on the tracker. So... there were already many issues in the backlog before the measurement window started, and 500 new issues were opened during the period. :-/
sandal··on The sad graph of software death
My solution involves cutting that overhead, not adding to it.

Most of the proposed fixes are ones I agree with in spirit, but implemented a little bit differently in practice.

sandal··on The sad graph of software death
Well, you're pretty close to having written it yourself. :-)

The benefit I had in this particular project is that I was an outside consultant with full access to everyone and everything in the organization AND the trust of some of the leadership there as well as a couple of the developers.

That's a pretty big benefit and not typical. Still, I think it's important to talk about what did work (I waited years before publishing this essay, and repeated it a couple times elsewhere), because even if you don't have the leverage, knowing how to make a strong case is half the battle.

Will post the followup within the next day or two!

sandal··on The sad graph of software death
> I would give the same kind of advice that financial advisors give for getting out of credit card debt: "find the card with the highest interest rate, make minimum payments on all other cards, and pay as much as possible on the highest interest rate debt until it is paid off... then recurse"

This is great advice and is ultimately what we focused on once I got past this initial triage/prioritization problem in the org I was helping.

> To make the analogy work the backlog needs to get rated on how much each open issue costs the company. Most organizations use some stratified measure of "severity". Few actually try to put a price on a problem, but I think it's worth the effort to try.

This is hard to do when the backlog is increasing by hundreds of open issues every couple months.

But the trick is ultimately to find a way to very quickly trim the backlog and see what crops back up, and then put each resurfacing issue through an economic decision making framework (even if it's a back-of-the-napkin calculation), as you suggest.

sandal··on The sad graph of software death
Spot on. These were huge issues in the organization I'm describing in this essay.
sandal··on The sad graph of software death
You make a lot of good points, and I agree with most of them.

The goal of the essay though is not to suggest that tracking issue count is a useful metric.

Instead, what I'm suggesting is that if you see lots of stuff going wrong in a project (things that are clearly costing time and money, angering customers, etc.) and then you look at whatever issue tracker is in place and you see a pattern like this, it's a sign of a broken triage and prioritization process.

It's so common for this to be happening that I've seen this in many different projects, and I think you're spot on when you say it's because an issue tracker wants to be so many things at once, and it rarely closely tracks value.

But in crisis situations, people on the front side of the business feel like they're "doing something" to help customers and users by filing tickets and then continuing to ask for status updates for them, to fight for their inclusion in prioritization meetings, etc.

Because this does not actually help anything, it actually ends up hurting things. The tracker ends up as a mediator that obscures or limits communication about the real issues, and without a change, that can be disastrous in a troubled organization.

So... the point of the graph is more of a quick way to confirm that triage/prioritization is being done wrong, so that you can make a decision on how to fix that.

And that's what I'll cover in the followup essay. :-)

sandal··on The sad graph of software death
The point of the essay is simply this:

If you're seeing a massive amount of problems in your organization AND you have what appears to be a badly broken prioritization/triage/issue tracking process, you need to fix your triage process before you'll be able to solve the real underlying problems.

There's no situation in which opening 500 issues in four months and only closing a tiny fraction of that amount is healthy, regardless of severity or whether they're feature requests or bug reports, or whatever.

The graph makes that point, and I'll hold the fact that this is on the front page of HN, /r/programming, and lobste.rs as evidence of that point being sufficiently informative and well understood by the vast majority of readers.

I would have updated the image on the first report of the issue if I was able to edit the post, but this is an archive from an email newsletter entry. It is worth fixing, and I will fix it in time for the followup essay.

I am just generally bothered by how incredibly, unbelievably pedantic it is to fixate on this one point and act as if the whole essay isn't valuable because it took an extra few seconds to read the graph.

But hey, this is the internet. We can ignore the larger points and focus on fine-grained details, and that's normal, right?

sandal··on The sad graph of software death
I agree that's a problem worth fixing. No issue there.
sandal··on The sad graph of software death
When I created this graph I was looking at historical data that existed before I got involved with the company, so I don't know the complete story on all of its details...

But it's important to note that this is an accumulation graph... so it starts at zero but that doesn't mean a backlog of zero (my guess is it was massive, because it was massive at the time I arrived)... this instead counts issues opened and closed during the time period across the entire system. Some issues closed during this period would be ones that were opened long before the start of the period.

This means that the graph will always increase, and that the space between the two lines represents the growing net increase of unresolved issues in the tracker.

I wish I still had the raw data on this, because it's a little hard to tell from the scale that the differences from week-to-week can be pretty big (like 10 issues opened one week, 50+ another)

When I arrived, there were a few specific issues in play, along with all the usual code quality / project management issues that plague any troubled project:

(1) A high number of support requests that required manual setup work from developers, which increased greatly due to overall growth in the customer base.

(2) Some high defect density areas in the codebase that generated emergencies, and fixes that would end up breaking other things in the process of dealing with the acute issue, along w. infrastructure/architectural scaling problems.

(3) As you guessed, reduction and restructuring of team capacity, without a corresponding change in the workload.

So these things... they happen more often when we wish in the software industry, and it produces graphs like this.

(that said, keep in mind this was pretty much a napkin sketch. any issue tracker is going to have a TON of noise, unless it's very well pruned -- the sole purpose was to point out the wide gulf and relate it to the problems already obviously observable onsite, and then use that to motivate real work to change things.)

sandal··on The sad graph of software death
Well, sure... IF you don't read the essay title, the graph title, the surrounding context, the paragraph directly after the graph, etc.

I plan to fix this when I use this graph elsewhere, but I really don't understand this comment. Is it an automatic knee-jerk reaction because you looked at the graph axes and didn't read the article?

Or did you read it, and have a genuinely hard time making sense of what was going on?

If the latter... sorry about that. However, I'm surprised at just how many people seem to have understood this idea, even without the labels, if it is such a severe problem.

sandal··on The sad graph of software death
Keep in mind this is a 500 newly opened issues over a period of four months, and that the backlog did not start at zero. So this is thousands of issues accumulating over a year.
sandal··on The sad graph of software death
> The missing piece of information here is that while the quantity of items may be increasing, it is likely that the severity of those items is decreasing. The truly urgent major issues get identified and fixed early in an app's life.

You can't assume this unless you freeze development. I wrote the essay... the opposite was true: rushed work was creating a runaway defect density while the product was externally experiencing growth, which in turn brought old tech debt to light as for example... things with a few percent defect rate that were easily to manually deal with before suddenly saw 10x-100x increase in frequency.

So... if you allow for a cooling phase, yes... you end up with a "more issues, but less severe" pattern. If you're in a high-growth situation with a development team that's at near 100% capacity utilization... you get infinite death graph doom. :-/

sandal··on The sad graph of software death
Good insight. I didn't split the categories for the report (nor did I distinguish in the essay) for pretty much exactly this reason.
sandal··on The sad graph of software death
That's absolutely right... on its own, the graph tells you nothing at all.

However, if you know for sure that there are tough problems going on (related to growth, limited dev capacity, code quality issues, etc), then having well-functioning planning tools can be useful. A tracker that looks like this, and the process that leads to this trend is a problem that is worth fixing in that situation.

So that's what my follow up essay will cover. How to put a very simple process in place that gets you back to the point of reliable project prioritization and measurements, without putting in a large time investment.

Because I think even smart, capable teams can end up in this situation due to various forms of external pressures, knowing how to dig out is pretty important, and ideally long before it hits the tipping point I had been at when I started helping with this particular project.

sandal··on The sad graph of software death
This is pretty close to what I ended up doing.

I've repeated this process elsewhere too, both for other companies and on my own projects... though the example shown was among the most severe.

In the essay, I'll try to be a bit more precise though, because in practice you might have a hard time with getting buy in on "Delete the issues" and an easier time with what I actually did on this project:

"create a priority queue that only the product owner and CEO can touch, treat that as the new official backlog until the crisis is resolved, put a bunch of rules on what gets in there and how much it can hold, then track progress actively"

More details will be shared in a couple days, can't wait to hear responses. :-)

If you want the followup essay in your inbox, sign up here: https://tinyletter.com/programming-beyond-practices

sandal··on The sad graph of software death
I wrote this essay.

I linked the Reddit thread because there are some good thoughts there, but I'd also love to hear what HN has to say!

https://www.reddit.com/r/programming/comments/3z1pfp/the_sad...

sandal··on Building a feedback loop (Writing a programming book, episode 5)
Hi, I'm the author of this post, and have shared it on HN in hopes of getting your feedback!

This advice isn't (or at least shouldn't be) anything new to those of your building your own businesses. However, the idea of "getting out of the building" and talking to others may be less obvious when it comes to producing technical writing works like books (or even blog posts).

There have been times where I've worked on a long complicated article for a hundred hours or more and released it to the sound of crickets.

In my more recent works, I've been actively getting involved with people in my target audience, and might have dozens of conversations for a single ten page article before it even lands on the public internet.

Needless to say, the difference between those two extremes is huge! Happy to discuss more if anyone has thoughts or ideas to share.

sandal··on Kickstarter: Practicing Ruby Contributors Fund
Hi,

I run practicingruby.com and am the one who set up this Kickstarter. All the money is going to contributors, and the materials will all be released under CC BY-SA as soon as they're published. In addition to a $500 honorarium, I will set aside five days for each collaboration to help w. anything that's needed... whether it be editing drafts, turning raw notes into an article format, researching, seeking technical reviewers, etc.

Happy to answer any questions anyone has, or respond to feedback.

We are funded already w. 8 days to go, and because Practicing Ruby does have some recurring revenue from monthly subscribers who support the project, we've already broken ground on commissioning contributed works. That means we should publish something new within the next few weeks.

sandal··on The perils of programmer education in the bazaar
If that's the case, I'm curious to hear your thoughts on two things:

1) If you don't think that gender diversity is strongly related to education, why are you participating in a group that's designed specifically to address that problem?

2) Are there not qualified female candidates for running RailsGirls in your area? If not, why do you think that's the case?

sandal··on The perils of programmer education in the bazaar
> People who are good at writing educational materials need to be paid to do this, because it's hard and takes a long time. I don't see any possible objection to this.

I have been paid to do this for five years with practicingruby.com, without ever relying on commercial support. It's 100% reader funded and reader focused, and it's the largest open-access library of Ruby-related articles you'll find in the world.

> Since money and social "buzz" follow the interest of many people, it seems obvious to me that the educational resources should be focused on those areas instead of periphery areas that few people are interested in.

Everything that is popular and commonplace now was a sparsely populated frontier before. Some folks need to venture into that territory now so that we all benefit from their explorations in the future. It would be nice to keep them well supported, if we want to maximize the benefits we'll reap in the future.

> Other people have said this, but favouring people with good communication skills in the job market is part of a functioning meritocracy.

Helping people with good ideas and a good work ethic is a job we can and should do if we possess the means to do so. The exception may not prove the rule, but I suppose you can say that my communication skills are adequate given that this is my essay we're discussing on the HN front page.

The only way I got to where I am was through support of mentors and colleagues who had helped me in the early 2000s, when free and open source software was predominantly a hobbyist activity and not a commercial activity. There was at that time a real sense of doing things for the common good, rather than just to serve your own interests.

And as I've said before: we rank on the first page at Practicing Ruby for the google search term "infrastructure automation", we're on the first page for "actor model", first page for "Law of Demeter", etc. Several of the contributed articles we've managed to drive so much traffic to are by people who consider themselves intermediate developers, and amateur writers. I've used the money from my paying supporters to: pay contributors for their work, help them edit, revise, and polish their work, and reach a larger audience than they would have on their own. This model does work! It's just hard to sustain because it's so foreign to most people.

I won't even entertain your comments about the lack of diversity, because it reveals your ignorance on the topic, and lack of concern.

sandal··on The perils of programmer education in the bazaar
I feel like I addressed this very directly in the article, but I'll repost the main points of "what's wrong" here for further discussion...

This economic model is so ingrained in our DNA, that we hardly ever question it, and many would go as far as to hold it up as a triumph. But the truth is, even if this system works at the grand scale, it’s hurting both learners and teachers in countless subtle and not-so-subtle ways. Here are just a few:

1) The system we’ve created is assumed to be a meritocracy, but is actually driven far more by popularity and market trends than it is by the quality, relevance, depth, and effectiveness of our learning materials. Although it is far from a zero-sum game, the current model is much more competitive than it is cooperative, and so suffers the consequences that come along with any competitive environment.

2) Because being highly skilled at both writing and software development is rare, those who can do it well are often get the most attention and influence from the software world, turning these folks into “thought leaders” that drive the overall direction of the community.

3) Producing high-quality educational resources is obscenely, ridiculously difficult and time consuming. So the people who can invest the effort are typically either from a position of economic advantage, or are backed by monied interests.

4) As a result, the materials that get produced, and the topics that get covered widely are based on where the money and social buzz is at right now. Those who are doing original research, particularly things that are experimental or exploratory in nature, are not well supported at all.

5) Because we’ve tied blogging and teaching and tweeting to hireability, plenty of people enter into the bazaar not because they particularly want to, but because they must do so in order to “prove their worth” to potential employers or clients. Again, this clearly benefits those who have lots of time and resources to burn, and burdens everyone else with massive amounts of shadow work. We cannot be surprised at the lack of socioeconomic and cultural diversity in light of this point.

6) The success of the few enables the selling of dreams to the many, creating a cottage industry of infomarketers. In effect, these are the folks who sell pickaxes and maps to gold prospectors, and it’s no surprise that their business is booming. Some of these folks are brilliant and insightful, but many are hucksters.

In light of all this, we cannot say “this is just how the internet works”, as true as that statement is now. We have to ask, how do we make things better for our future selves and those who will come after us down this road?

sandal··on The perils of programmer education in the bazaar
My own interpretation of this is that since the commercial sponsorship and advertising supported model is a race to the bottom, we need to be looking at alternative models that are focused on social benefit first.

We do have Wikipedia. It would be nice if there were hundreds of such examples out there.

sandal··on The perils of programmer education in the bazaar
I actually may plan to do some feedback with cancellations in the future, but "you not publishing for half a year and giving everything away for free" seems like a pretty compelling reason to quit a service.

However, the main feedback I got from people (and it happened often enough where I'm convinced it was a common line of thinking) was that folks just weren't involved in Ruby anymore, or weren't doing a ton of online reading because got busy with other things. When the average age of our remaining supporter accounts is something like 3-5 years), that's understandable.

I've had two children since Practicing Ruby was started. Things were hard for a while. I wanted to quit the business many times, but left it in a zombie state in the hopes to do right by my subscribers sooner or later.

Now things are getting a little better for me, so that's what I'm going to try and do.

As for eBooks, I've thought about that 100 times. I would love to get some of the existing content into a nicely tied together collection and release it as an eBook. But it's a big enough undertaking where I feel it'd take me away from other more valuable work I could do.

If we get our cashflow situation to be even a little better where I could fund a couple days a month to work on that, I'll go ahead and do it. But for now, I only really can afford to fund about 1.5 days a week of my own work, so that isn't much to spread around.

sandal··on The perils of programmer education in the bazaar
Maybe! Although (for better or for worse), it's a word you rarely hear in the software industry.
sandal··on The perils of programmer education in the bazaar
I've been focusing only on timeless content (for as realistic of a definition of "timeless" as technology allows) for Practicing Ruby, because I think it's more compelling and sustainable as a work for the benefits of the commons.

In other words, if I can look at my archives as being a body of materials that mostly holds their value over time, then supporters can be comfortable knowing that their money is stretching far and wide.

Also, although we don't do it as often as I wish we could, I like the idea of periodically going back and revising or replacing old works with updated content, to extend their life even longing and take advantage of new thoughts that come along. Having paid supporters really helps there, because it feels less like a chore and more like a service.

As for perishable / time sensitive content... I don't really know. I guess in that case you're funding people for their time and expertise rather than the lasting value of the work they do. I think this would come with a very different set of challenges, but I'm not seeing where the economic problem would be.

In the first couple years of Practicing Ruby's development, we did release the content only after it had been available to paying subscribers for a while. (There would be 10-20 articles available to subscribers only at any point, with a sharing mechanism that allowed folks to post links for others to jump the paywall)

When we stopped that and moved to directly releasing content when it was ready to be published, there was no major change in subscribers immediately, or even within a six month window after that decision was made. Actually, the cancellation rate went way down, so that might be a sign that the supporters were supportive of the idea.

The problem (and I'm sure some folks here may have guessed it), is that once everything was made available for free right away, the number of new subscriptions went way down. Whereas before we might see 30 new subscriptions a month and lose 20 people, we started seeing 1 new subscription a month and lose 2 people.

A sequence of events that happened since then has slowly bled the business of its revenue, although our traffic improves every week, even without new content being published for several months at a time. The most notable one is that I decided that the business ought to run on its own revenue, something that is ultimately a good thing but was a harsh change because previously I'd work 120+ hours a month on the project and only just barely squeak by on a subsistence level.

So basically, the project went dormant for the better part of a year, and although I did some small things from time to time, I mostly saved up the revenue so that I could pour more dedicated time into things down the line. In that process, we understandably lost supporters over time, but the main issue was bringing in new subscribers.

At this point, I'm burning the modest reserves I stored up, and that's given me a few months of runway before the project needs to go dormant again. If the collaborator model works and the kickstarter I set up gets funded, I think I'll be able to stretch things a lot farther. I do a very intensive process with anyone who contributes their work, but at this point it's still much easier for me to collaborate with someone who's contributing ONE article to Practicing Ruby than it is for me to research and write ten more pages when I've already produced something like 1000 pages of work.

So in a way, the death knell rang, and that's what motivated me to try to fix the business problems. In the process of doing that, I remembered the motivation for doing the project in the first place (which was to provide a functional example of a top-notch free documentation project), and that's what got me excited about things again.

Who knows what will happen from here? Maybe the project will still die. But either way, I'm sure I'll learn a lot from it.

sandal··on The perils of programmer education in the bazaar
Very thoughtful feedback, thanks!

Related to your last point:

> How about finding ways to compensate those who already produce valuable content in the commons, so they can have more time to do what they already do well?

This is actually what I've been trying to do with my own reader-funded project (http://practicingruby.com). I've been modestly funded for five years now to produce free documentation for Ruby programmers (and really anyone who is interested in software development that can read Ruby).

Occasionally, we've paid contributors to help us publish articles. Right now I'm trying to do a Kickstarter to give us some seed funding to really expand the number of contributors we can work with, and my existing subscription revenue will fund me so that I can assist these folks with editing, research, code cleanup, etc. That helps expand the pool of potential contributors, because folks don't need to be expert programmers or writers, they just need to be working on something interesting and willing to try to share their knowledge and experience with others.

Those who want to support the contributors fund are welcome to do so here: https://www.kickstarter.com/projects/828998531/practicing-ru... -- 100% of this money will go to the authors of the articles, I'm not keeping any for myself.

sandal··on The perils of programmer education in the bazaar
Thanks for the feedback!

> 1. Community is absolutely a weasel word when you're using it to lump together people from many different backgrounds and speak on behalf of them, or to act as if your particular sense of identity is representative of a whole group.

Help me find a better word for what I'm trying to say here: When I say "as a community" I mean, "as people who ought to be concerned about the social impact of our decisions as much as the economics and personal motivations"

> 2. Nothing is bad about a flea market. I just would like to be able to also have public non-commercial spaces for learning, and have them be well funded and supported too. I meant it literally when I say the current model works too well economically, and so there is less incentive to make long-term investments in educational resources that are explicitly for the common good.

> 3. It comes down to economics and social capital. Those who have gained notoriety through luck, connections, or money, tend to have their signal amplified indefinitely.

Yes, if someone really starts being malicious in what they do they will eventually lose their reputation, but it's a slow process and so those who get into that position tend to stay there. This is the nature of a competitive environment, whereas a cooperative environment intentionally makes adjustments to mitigate that effect. It's a little hard to explain because we have so many examples of the former and so few of the latter.

> 4. We agree, and I said that a few times in the article. It wasn't just for rhetorical purposes. I'm saying, if the current model is an improvement and evolution of a worse model that existed in the past, maybe we can still think about a new paradigm shift that is much better than what we have now.

But honestly, I'd be perfectly satisfied with comfortable co-existence between the commercialized education model. Even if 80% of our work was indirectly or directly tied to commercial promotion, it'd be nice if 20% of our resources could exist in the commons.

> 5. Not referring to developer tools here, I'm talking about developer education. There are plenty of "learn to code" things that are not effective, but because they're marketed well, they make plenty of money. In addition of these, there are plenty of "how to make money as a coder" things, etc.

There are also plenty of examples of open source tools that are poorly documented or designed, yet due to their popularity or entrenchment, spawn a business of consultants and educators to teach people commercially to use these things, without contributing the materials back to the commons under free documentation licenses. This is valuable work and shows that our marketplace is semi-efficient, but it's not socially optimal. The socially optimal result is for the information to be released as free documentation.

> In summary:

I guess my thesis missed you, because that's not what I meant to say at all. What I said is, "the world is unequal, and so it will tend to favor a tiny minority of privileged folks unless we actively seek to balance things".

For my own part, I've spent the last five years creating what may be the largest collection of open source learning materials for Ruby programmers in the world (find it at practicingruby.com). If you google "infrastructure automation", one of our articles is the top hit. If you google "actor model", one of our articles is on the front page. Neither of these articles were written by people with sizable followings or influence on the internet.

I paid these folks for their work, helped them shape and edit their content, and gave them access to a much larger audience than what they would have reached on their own. My own name does not appear on their work, nor does anything promoting some third party product or service.

People do pay for Practicing Ruby. Not commercial sponsors, but readers and community supporters. It'd be nice to see a few dozen similar publications on various topics, and for the model and motivation to be well understood and supported.

The problem I have is that this kind of thinking about publishing is something people never even give a passing thought... so as someone trying to do something different, I am constantly fighting an uphill battle.

I don't want to overstate my own role in making a difference here... I view my own project as a baby step, one of many necessary to make the kind of changes I'd like to see in the world. But at least I'm trying to stand up for my principles by putting the ideas into practice.

Page 1 of 7Next →