News for hackers. Stuff that matters.
Re:The Case for Slow Programming by wellpast on Monday December 01, 2014 @05:15PM (#8684287)
I largely agree w/ the argument here, but "slow" is going to be self-defeating nomenclature, and is also inaccurate. Business doesn't want slow. So if we're pitching slow, we're setting ourselves up to lose and the speed-hackers are going to win.

Our goal is architectural soundness. I believe the biggest fallacy of our industry is we think the only way to get these is to go "slow". Not true.

What we're really saying is our industry is short on skill sets. With specific skill sets, you can build architecturally sound systems at no extra cost.

If I were to build a house today it would take me much longer than someone else because I don't have the necessary skills. I might hurry in which case the house would be shoddy. Is the shoddiness of the house necessarily because I hurried? No. It's because I didn't acquire the required skill sets first.

The software industry has no such (practical) concept of the skill sets required to build architecturally sound systems. We have a bunch of well-meaning hackers, and as a result shoddy systems that decay into technical liabilities.

Our industry needs to solve this skill set problem. The challenge is that academia has a hard time teaching these skill sets, because they are so removed from the practitioner. And businesses can't teach it b/c it takes years and special experience to actually teach it. So it's not advantageous to a business to teach those skill sets.

So how do we do it? And how do we organize an industry around professionals who know how to build architecturally sound systems and code? This is a very difficult problem for a world that has such high demand for code and such little understanding of what the professional skill set would afford them.

Re:The Case for Slow Programming by Argorak on Monday December 01, 2014 @05:38PM (#8684441)
> I largely agree w/ the argument here, but "slow" is going to be self-defeating nomenclature, and is also inaccurate. Business doesn't want slow. So if we're pitching slow, we're setting ourselves up to lose and the speed-hackers are going to win.

German has a very nice word for that: "zügig". It means "speedy" as well, but goes a bit towards "stable", "steady" and "friction-free". It's the good kind of fast, which sometimes needs a step back and a look at things.

So, if I came to work "zügig", I didn't speed, but there was no traffic jam, I didn't stop for a coffee somewhere, etc.

Re:The Case for Slow Programming by robert_tweed on Tuesday December 02, 2014 @02:38AM (#8686117)
I like this word, we should adopt it. It says a lot about the German mindset that they have a word for this.

I don't think English has any equivalent (but it's a big language so I wouldn't be surprised to find out I'm wrong). We do have a very similar and pretty common idiom though: "slowly-but-surely", often used in the phrase "slowly but surely wins the race". This of course comes from The Hare and the Tortoise in Aesop's Fables.

Another analogy that works in programming terms is comparing the speed of a container ship to the speed of a Ferrari. One of them zips about a lot and goes round corners really fast. The other one takes a while to load up and takes an hour to turn, but it will shift a hell of a lot more cargo, a much greater distance, in the same time.

There's a place for both and the most important thing is knowing the difference; not sticking to one or the other dogmatically.

Re:The Case for Slow Programming by dennisgorelik on Friday December 05, 2014 @03:17AM (#8703421)
Re:The Case for Slow Programming by aerojoe23 on Tuesday December 02, 2014 @08:50AM (#8687012)
expeditious

Best I could fined.

Re:The Case for Slow Programming by mr_luc on Tuesday December 02, 2014 @09:30AM (#8687224)
Expeditious is used rarely enough, and 'expedited' services are spoken of frequently enough, that I don't think that expeditious would at all capture the notion.

Things that are expedited are put on a 'fast track,' obstacles removed -- and, frequently, corners are cut.

Re:The Case for Slow Programming by agumonkey on Tuesday December 02, 2014 @01:43AM (#8686014)
I like to tell that "vitesse" (noun), French for speed, comes from "viste" (adj.) and latin "vistus", rooted in vista, to see. The only way to go fast is to see, to know; and for that, one often needs to go slow.

As said below Latin has it in festina lente -- "Make haste slowly."

Re:The Case for Slow Programming by barking on Monday December 01, 2014 @07:11PM (#8684949)
Zügig is just so..Germanic! It's exactly how I imagine the stereotype of German efficiency. In the anglo-saxon world we pride ourselves on how many hours we work. In Germany they work fewer hours and produce more and of better quality. At least that's my impression.
Re:The Case for Slow Programming by lavamantis on Monday December 01, 2014 @09:04PM (#8685289)
Germany has a few other words going for it to promote worker productivity, such as Mitbestimmung ("Industrial Democracy": https://en.wikipedia.org/wiki/Industrial_democracy)
Re:The Case for Slow Programming by lectrick on Monday December 01, 2014 @08:10PM (#8685131)
Re:The Case for Slow Programming by pluma on Tuesday December 02, 2014 @09:30AM (#8687223)
Before anybody else gets funny ideas: the claims in that article aren't entirely correct.

First of all, I find the claim about 35 hours being the average a bit dubious. It may have been the average some years ago, but today it's probably closer to 38-40 hours, with service jobs (from retail to agencies) often adding unpaid overtime to that. On the other hand our work laws are pretty employee-friendly (e.g. a mandatory uninterrupted resting period of 24 hours per week in case you have to work on sundays) and larger companies are more likely to follow the letter of the law.

The rules regarding Facebook and private e-mail have more to do with German privacy law: if the private use of work computers is explicitly forbidden, there are less legal landmines involved with intercepting or monitoring Internet use. In practice many places have an informal policy that allows these things, just not officially.

The bit about employees not hanging around after work is also inaccurate. For many people a lot of friendships (and relationships) involve co-workers. In fact, this is one of the reasons there was such an outrage when Walmart tried to implement its US work policies in Germany (which forbade romantic relationships between co-workers -- not that that rule would have held up in German courts to begin with).

There are indeed more days of paid vacation and families do receive preferential treatment when it comes to scheduling vacations during the major holidays or summer break.

The difference when it comes to "Handwerk" is also very striking. Mediocre pay (and rampant moonlighting) aside, craftsmen are generally held in high regard and like most professions take a lot of pride in correctness and precision. This probably again goes hand in hand with Germany having a lot of laws, rules and standards for various fields of work (e.g. you can't just set up a shop as a car varnisher, you need a formal qualification for that).

Also, bureaucracy. Although the sibling is right in that you do usually get the expected result if you follow all the rules, the paperwork can be daunting. Most people joke about the tax law in particular, but we have laws, rules and standards for everything. German law generally tends to define even edge cases clearly rather than leave them up to interpretation by the courts, consequently the legal system tends to be less shady than in the US, but trickier cases can still take years (but on the plus side, they are much cheaper than in the US).

Also, universal healthcare.

Re:The Case for Slow Programming by bkeroack on Tuesday December 02, 2014 @11:06AM (#8687757)
That article reads like the inverse of the Japanese "salaryman" (company as family, patriarch, protector, provider of all material comforts), which is also sometimes fetishized in Western circles (in terms of results) as "more efficient" or somehow better than American working culture.
Re:The Case for Slow Programming by rapind on Monday December 01, 2014 @11:07PM (#8685663)
I now love german culture. It's like finding my soulmate.
Re:The Case for Slow Programming by jsilence on Tuesday December 02, 2014 @12:48AM (#8685901)
Please note that another german culture is to be overly pedantic in following rules, no matter if their initial intention applies or whether we just set them five minutes ago. Rules are followed because.

This culture makes administrative processes bulky and tedious and tiring.

It often fuels my Ungeduld, because I want to get st done zügig.

Re:The Case for Slow Programming by moconnor on Tuesday December 02, 2014 @08:10AM (#8686852)
This is true; it's also true that Things Work here. Processes, equipment, social organizations.

To get your fishing permit you will need to provide all the right bits of paper and stamps, no exceptions.

The flip side of this is that if you follow a set of precise, unambiguous instructions you will get your fishing permit.

Source: moved from UK to Germany 8 years ago.

Re:The Case for Slow Programming by Argorak on Tuesday December 02, 2014 @08:49AM (#8687007)
My favorite expat quote is: Germans have rules for everything, but with some though put into them, most of them are quite sane. ;)
Re:The Case for Slow Programming by Moru on Tuesday December 02, 2014 @03:46PM (#8689775)
Indeed. I needed some paperwork when I got married with a german. I'm from Sweden. I called the tax office in sweden that was taking care of the papers I needed to file for marriage certificate in Germany and the woman on the phone was laughing heartily saying "Then you know how byrocrazy feels!" :-) They happily sent all papers I needed in the mail to me in Germany, translated to English. The clerk in Germany was eying it suspiciously and asking some colleagues and took quite some time before finally putting down his stamp.
Re:The Case for Slow Programming by lectrick on Tuesday December 02, 2014 @10:09AM (#8687439)
Sounds like an opportunity to convert all the paperwork to some kind of IT-powered workflow.
Re:The Case for Slow Programming by jsilence on Wednesday December 03, 2014 @08:53AM (#8693695)
First you'd have to file all the neccessary application forms for a project like that. Good luck! ;-)

And even if you succeed, in the end there'd be a rule that requires the Pdf to be printed, signed, copied, filed, scanned and filed again, digitally.

Re:The Case for Slow Programming by fit2rule on Tuesday December 02, 2014 @06:26AM (#8686609)
Yeah, just try living there.
Re:The Case for Slow Programming by sdrothrock on Monday December 01, 2014 @09:43PM (#8685388)
Latin has it in festina lente -- "Make haste slowly."
Re:The Case for Slow Programming by ikurei on Tuesday December 02, 2014 @04:23AM (#8686341)
I've always loved the spanish saying "vísteme despacio que tengo prisa", "dress me slowly, I am in a hurry".
Re:The Case for Slow Programming by mattlutze on Tuesday December 02, 2014 @03:30AM (#8686237)
Fewer trips to the coffee pot, water cooler or smoker's lounge and a lot of the folks we know would be more productive, too.

A lot of the studies on it I've seen come down to "work time is for work, free time is for not working" and respecting that.

Re:The Case for Slow Programming by vladd on Tuesday December 02, 2014 @03:19AM (#8686217)
"swift" might be a close translation.
Re:The Case for Slow Programming by hibbelig on Tuesday December 02, 2014 @06:23AM (#8686605)
Yes, my English is less than perfect, but it sounds about right.
Re:The Case for Slow Programming by aragot on Tuesday December 02, 2014 @03:41AM (#8686257)
"Zug" means "train", "-ig" makes it an adverb like "train-ly". Can a German speaker confirm please?

In English, I'd say a train has a fast & steady speed, therefore I propose the translation "steady".

Re:The Case for Slow Programming by janekm on Tuesday December 02, 2014 @05:22AM (#8686458)
I think zügig probably comes from the other, older meaning of Zug, "pull", "drag".
Re:The Case for Slow Programming by felxh on Tuesday December 02, 2014 @07:47AM (#8686795)
Zug does mean train but it comes from ziehen (to pull) as others mentioned. So I am not sure whether zügig comes from the original meaning or from 'train'. The english cognate for Zug/ziehen is tug btw (follows the common t -> z shift in german)
Re:The Case for Slow Programming by tempodox on Tuesday December 02, 2014 @03:53AM (#8686274)
Confirmed. I think, “steady” is a good rendering.
Re:The Case for Slow Programming by pluma on Tuesday December 02, 2014 @08:49AM (#8687002)
Not quite. "Steady" usually implies a certain slowness. "Zügig" generally implies the opposite.

For example, if I asked you to leave a hotel in a "zügig" manner, I would be asking you to quickly pack up your things and then leave. In other words, it's about doing something "faster than normal", but not so fast you can't take proper care.

If I told you to leave "zügig" and you'd first finish watching a TV show, I would probably be slightly irritated.

In this case "zügig" is better translated as "in a timely manner" (rather than with haste, which would imply dropping what you are doing and running away).

Re:The Case for Slow Programming by err4nt on Tuesday December 02, 2014 @11:27AM (#8687880)
In every explanation of the word 'zügig' here on HN, the word that pops into my head is 'directly'. Not sure how to make that work beside the word 'programming' but it matches the same concept.

It implies that you are following that one named goal and considering nothing else.

Re:The Case for Slow Programming by bitwize on Tuesday December 02, 2014 @10:56AM (#8687694)
German has a very nice word for that: "zügig". It means "speedy" as well, but goes a bit towards "stable", "steady" and "friction-free". It's the good kind of fast, which sometimes needs a step back and a look at things.

We have a term for that as well -- cruising speed.

Re:The Case for Slow Programming by ep103 on Tuesday December 02, 2014 @10:16AM (#8687484)
This is pronounced like zoo Gig?
Re:The Case for Slow Programming by jdmichal on Tuesday December 02, 2014 @12:14PM (#8688215)
The IPA would be /tsygɪç/. Pseudo-English would be more like "tsoo-gish", though obviously not completely accurate.

You can enter it in Bing Translate[0] to get a text-to-speech rendition. I can't figure out how to make a direct link with text already entered. (You can type "zuegig" if you don't have easy access to the ü key.) Interestingly enough, the translation there is "swift".

[0] http://www.bing.com/translator/

Re:The Case for Slow Programming by einhverfr on Monday December 01, 2014 @09:44PM (#8685392)
I am not so sure. The point of "slow programming" is the same as "slow food" and "slow democracy." I think you have to see the three together. The point is to slow down, deliberate, and then do. That doesn't mean long iterations, nor does it mean deferring progress. It means ensuring solidity of the progress as you make it.

I once interviewed for a job at one of the most recognized and big Perl shops in the world and didn't get invited to face to face because I "took my time" with their puzzles. My response was that my first drafts were faulty, and that I preferred to program slowly because I could deliver more code, faster, and better by taking my time with it. In the end, their loss.

Deliberation is important. That often means slower apparent progress but faster progress overall.

Re:The Case for Slow Programming by duncanawoods on Tuesday December 02, 2014 @06:53AM (#8686675)
Yep - there are benefits to a slogan being counter-intuitive because the whole point is to challenge the intuitive way of approaching a problem and making you see it anew.

In the reverse case, facebook's "move fast and break things" works because it suggests you move fast enough to dare breaking things to try an overcome the caution that holds people back from doing great things.

In this case the equivalent slogan might be "Do it right and ship it late" i.e. its so important to get it right its worth risking missing a shipping date. Practical principles, like the agile manifesto, describe a preferred trade-off rather than just naming a good attribute like swiftness, because who doesn't want the good attribute? It would be irrational.

I think this also highlights why moving faster is nearly always better even if uncomfortable for some: its a more effective way of handling uncertainty and learning faster that in most commercial environments is more important than quality. Quality in the wrong places is waste.

Re:The Case for Slow Programming by einhverfr on Tuesday December 02, 2014 @08:36AM (#8686950)
This is also why I don't think moving faster is almost always better. There's a certain point at which moving faster slows you down.

A better way of saying it might be "optimize your progress over the next 10 years, not over the next week."

I think there is a false choice usually presented between agile, move fast and break things, vs old waterfall approach. I don't think waterfall is the right alternative. The waterfall approach is really difficult to get right because to some extent it insulates design from coding. The integration of these two is something that agile gets right.

But what agile gets wrong is in de-emphasizing design too much. Design is important, and it is important regarding long-term progress. And if you don't design, you will pay for it a hundred times over. But the best design is where technology is designed bottom-up and UX is designed top-down. Done right, this integrates design into coding but it also emphasizes design and code contracts.

Re:The Case for Slow Programming by einhverfr on Tuesday December 02, 2014 @07:18AM (#8686731)
I am not sure that ship it late necessarily becomes a part of slow coding. The point is to code deliberately and with quality. Once you have a production codebase, if you do things right, there's no reason you can't ship on a fixed schedule. You might ship less initially than you expected, but in the long run, you will ship more than you expect, because the delay of design pays back later.
Re:The Case for Slow Programming by pekk on Monday December 01, 2014 @05:53PM (#8684540)
It takes a certain amount of time to build a house (that will be durable and to code) no matter how much people want "skill sets".

If it takes a longer time than management wanted for something to be built, that isn't necessarily because "skill sets" are lacking.

If the product is shoddy, that is probably not because the team lacked the magical ability to make sound products instantly, but because the team was rushed (on the theory that they are not professionals and have to be micromanaged)

The odds are that the feature spec was bloated and management was bad at estimation (perhaps because they demanded estimates out of programmers who are also not good at estimation, in a bid to squeeze as much output from them as possible).

Hackers aren't the problem. A pogrom on "hackers" is unlikely to solve anything. "Professional" in the sense of wearing this or that, or following whatever you personally consider to be best practices isn't going to fix scope creep, wrong estimation, fundamental facts about project coordination, or the laws of physics.

Building serious stuff takes time.

It's management's job to handle that without flipping its shit.

Re:The Case for Slow Programming by wellpast on Monday December 01, 2014 @06:28PM (#8684750)
I'm not saying that it doesn't take time to build software and I'm not making a case for how to do management.

In my decade of experience on different teams and products, the main impedance to productivity has by far been to do with bad code and architectural choices. The justification is always "speed" but my point is that is wrong. It's not speed that is at fault, it's that most software engineers don't know how to properly engineer software -- they haven't been taught nor had the time to learn it. It's absolutely an issue of skill sets.

Yes, management and project estimation are other issues to work out. I'd say we're actually much further along on these fronts than we are on the technical skill sets front. That is, the skill set of building architecturally sound systems.*

* Note: I do believe there is a time trade off between features and feature flexibility -- but there is no time trade off necessary for achieving architectural soundness, again so long as the right (presently rare) skill sets are present.

Re:The Case for Slow Programming by MrDom on Monday December 01, 2014 @11:03PM (#8685651)
> The justification is always "speed" but my point is that is wrong.

Not necessarily. Proper architecture takes time and planning and reasoning. If it didn't, we could make a program do it for us. There is absolutely a time tradeoff between coming up with the proper architecture for the application vs just using something that looked cool from a google project. The latter will always be faster at first, but not in the long term.

Re:The Case for Slow Programming by curiousHacker on Monday December 01, 2014 @08:52PM (#8685252)
Describe good architectural choices?
Re:The Case for Slow Programming by thisGuysAccount on Monday December 01, 2014 @10:12PM (#8685492)
There are three types of "good architectural choices"

The first: The ones that can be made after the original, bad ones. The second draft, which is an improvement in the first draft, in every field.

The second: His (or her) own. We all know there are developers out there who think they're the greatest thing to ever write code, and that everyone else's decisions are bad.

The third: The ones that really should have been made, in place of the ones that really shouldn't have been made. As in, "You wrote your own SQL parser using hardcoded strings and no grammar parsers?"

Re:The Case for Slow Programming by tragic on Tuesday December 02, 2014 @07:51AM (#8686807)
> As in, "You wrote your own SQL parser using hardcoded strings and no grammar parsers?"

(Shuffles away sheepishly)

Re:The Case for Slow Programming by einhverfr on Monday December 01, 2014 @10:06PM (#8685469)
That's a product of context is it not? And of course part of the context is the rest of the current architecture.

I think in the end the best architecture is that which is thought through from a contract-oriented approach, rather than a buzzword checklist.

Re:The Case for Slow Programming by wellpast on Tuesday December 02, 2014 @03:34PM (#8689677)
You've probably heard it as ones that lead to low-coupling and high-cohesion, which is correct. But in my experience this needs to be made more concrete -- many people can say these words, but couldn't tell you accurately to what degree a system was cohesive and uncoupled.
Re:The Case for Slow Programming by maigret on Tuesday December 02, 2014 @05:05AM (#8686424)
Re:The Case for Slow Programming by victorhn on Tuesday December 02, 2014 @08:22AM (#8686885)
I am clueless about this, How do you learn to make good architectural choices?
Re:The Case for Slow Programming by notduncansmith on Tuesday December 02, 2014 @09:10AM (#8687133)
By making a lot of shitty ones, realizing it afterwards, and gradually making less shitty ones until you rarely make shitty architectural choices.
Re:The Case for Slow Programming by wellpast on Tuesday December 02, 2014 @01:28PM (#8688836)
100% agree. Though a lot of the churn here could be reduced with the right education and mentorship. There is a mathematics to good architectures -- a mathematics that can be taught. But currently the initiative of us are left to find the way ourselves. We need to find a way to formulate and teach this mathematics to the next generation/s so they can get there faster.
Re:The Case for Slow Programming by collyw on Wednesday December 03, 2014 @03:56AM (#8692582)
Practice. As well as trying to notice when things work or don't (I have colleagues that see "firefighting" as a normal part of a running system. If something keeps needing attention, it is probably badly written or architected).

Linus said something along the lines of bad programmers worrying about the code, and good ones worrying about the data structures. I think there is truth in this, even though I develop Django database applications most of the time. If I find myself doing too much work at the application level, taking a step back I can usually see a better approach when I rearrange the database.

Re:The Case for Slow Programming by peterfirefly on Tuesday December 02, 2014 @11:05AM (#8687743)
By not being insulated from the consequences of bad ones + iteration.
Re:The Case for Slow Programming by wellpast on Tuesday December 02, 2014 @03:31PM (#8689662)
Good point. How many "rockstar" developers show up at Company X, build the initial versions of a product or architecture, then move on to the next company never to understand the longer term consequences of their choices?
Re:The Case for Slow Programming by zenogais on Monday December 01, 2014 @06:30PM (#8684756)
This is exactly my experience. The vast majority of software failures are the results of dysfunction outside of the software team - this is why more best practices or process rarely fix the issue, it was an organization one to begin with. In my career there's been a strong correlation between healthy functional organizations and healthy functional software
Re:The Case for Slow Programming by Ma8ee on Tuesday December 02, 2014 @06:13AM (#8686575)
The problem is that anyone who know how to attach two boards with a few nails think they know how to build a house.
Re:The Case for Slow Programming by tomphoolery on Monday December 01, 2014 @07:31PM (#8685028)
> I largely agree w/ the argument here, but "slow" is going to be self-defeating nomenclature, and is also inaccurate. Business doesn't want slow. So if we're pitching slow, we're setting ourselves up to lose and the speed-hackers are going to win.

Agreed. The ideas in this article are sound, but I'm not sold on this "slow programming" term. It's more like "careful" programming, or how about "care-full" programming, in which you put your full amount of care into every character you write.

The reason we've been able to speed things up is because of these tools, like CI systems and test frameworks. Faster iteration means getting results back faster and that means you can spend more time thinking about the problem and less time implementing it. That is the major benefit of what the author calls "fast programming" and it's something he glossed over completely. Just because you move fast doesn't mean you can't be careful along the way. You just need tools that extend your own visibility in order to catch problems faster and more accurately solve them.

Re:The Case for Slow Programming by sethammons on Monday December 01, 2014 @11:15PM (#8685684)
I like "deliberate" programming -- though, the syllable count may be too high.
Re:The Case for Slow Programming by Retra on Monday December 01, 2014 @10:34PM (#8685560)
Careful is a good way of putting it.

It's possible to change the entire world in half a page of code. That should be the goal...

Re:The Case for Slow Programming by popee on Monday December 01, 2014 @07:30PM (#8685027)
Yeah, absolutely wrong nomenclature and it would be better to call it:

http://en.wikipedia.org/wiki/Wu_wei

> Wu wei is an important concept in Taoism that literally means non-action or non-doing ie. "effortless doing"

Set goal, think and explore a little, rest a lot and wait until you get clear picture. Then and only then start coding.

Pros: No burnouts, less stress, etc, and constantly moving forward (in contrast to 2 steps forward 1 step back cycle) what results in overall faster progress.

Cons: Personally it's sometimes pain in the ass to wait, but it's important to understand -> not to be obsessed with job. Get a hobby, do something else and let unconscious part of your brain deal with what needs to be done -> mind blowing discovery for me that actually works, but still have to get used to this concept :-)

Re:The Case for Slow Programming by Floegipoky on Tuesday December 02, 2014 @02:53AM (#8686150)
Unfortunately, the process of building houses can't be compared to building software. Houses don't get bolted sideways onto scyscrapers 5 years after they're built, or suddenly need to accommodate multiple order of magnitude more people than they were originally built to hold. These are regular occurrences in the software world.

You are right that most people that come out of university are woefully unprepared to design software systems. However, that doesn't change the fact that what ends up being the "best" design in the end is rarely apparent (or appropriate) in the initial planning stages of a software project. Requirements change, and the architecture needs to adapt with them. These architectural changes do have a very real cost. The tough sell is trying to show management that the alternative creates technical debt that will strangle the project if it isn't addressed, and that the longer the refactoring is deferred, the more expensive it will be.

Re:The Case for Slow Programming by runeks on Tuesday December 02, 2014 @08:09AM (#8686851)
> Unfortunately, the process of building houses can't be compared to building software. Houses don't get bolted sideways onto scyscrapers 5 years after they're built, or suddenly need to accommodate multiple order of magnitude more people than they were originally built to hold. These are regular occurrences in the software world.

Most likely, not a lot of things compare to building houses in all aspects.

The point is, if developers are having problems wrt. scaling, then we need to build tools that abstract away scale. Define a language that allows the runtime to auto-scale, depending on load. As far as I can see, it's "just" another engineering challenge, not essentially different from figuring out how to make a skyscraper withstand heavy winds.

Re:The Case for Slow Programming by dlitz on Tuesday December 02, 2014 @03:37AM (#8686249)
> The tough sell is trying to show management that the alternative creates technical debt that will strangle the project if it isn't addressed

If you're worried about that, then the problem is that you have someone managing a software project who doesn't know how to manage software projects. That's not a failure of the methodology; it's a failure organizational design.

Re:The Case for Slow Programming by john_b on Tuesday December 02, 2014 @11:07AM (#8687760)
You are probably right about the marketability of "slow" as a movement, but in hacker circles these ideas need to be discussed honestly and directly.

The analogy with house building is flawed. Home construction generally follows a preplanned architecture, schedule, and process that has been refined and tested over a long time in an environment which doesn't change much over time. The process of building houses is well understood and if a delay occurs it can be attributed to a lack of skills as you say (or funding problems, etc).

Software has a different nature. If you have thoroughly solved a problem, the solution can often be automated. There is no button you can press to build the same house you built once before. It still takes time, money, and materials. With software, if you are not spending a large portion of your time working on a problem that has a novel component or two, you or someone else has probably failed to automate enough.

As a result, you never quite possess the necessary skill set to solve your current task. You are always pushing some boundary, even if small. Gross skill set mismatch is a separate problem, of course, but a transient skill mismatch is an inherent aspect of good software development and I don't think it's justified to place any blame on moderate and transient skill mismatches as a result.

Whenever you are dealing with something novel, you will need to go slower than usual. It's the same for new types of buildings that use newer construction tools or technology.

Re:The Case for Slow Programming by dvanduzer on Monday December 01, 2014 @06:32PM (#8684770)
The terminology likely derives from the "slow food" movement, which is simply the opposite of fast food.

The fast food industry did not "win" the restaurant industry; it did succesfully quantify the (minimal) skillsets around manufacturing food.

Re:The Case for Slow Programming by kenrikm on Monday December 01, 2014 @05:24PM (#8684348)
I see it like a Craftsman woodworker vs a high school shop class. At the end of the day they can both build a birdhouse though the quality of final result will be very different.
Re:The Case for Slow Programming by wellpast on Monday December 01, 2014 @06:32PM (#8684772)
Yep -- and I argue that the craftsman can finish at least as fast as the shop student. When someone says "I don't have time to make it sound", they're really saying "I don't have the skills."

By the way, I think these skills can be acquired and even taught. They just aren't yet being taught afaik.

Re:The Case for Slow Programming by einhverfr on Tuesday December 02, 2014 @08:39AM (#8686960)
I would also bet that the craftsman will show less overt progress as he works. He will appear to be moving slower, but will in fact complete the three to requirements faster. And in the initial phase, in particular, the craftsman may take a lot more time. The speed will be shown not over the initial design, but over the whole production cycle.
Re:The Case for Slow Programming by elwell on Monday December 01, 2014 @05:18PM (#8684312)
But I think the main reason for choosing the word "slow" is to bring to mind its connection with the Slow Movement [0]; as the author mentioned.

[0] - https://en.wikipedia.org/wiki/Slow_Movement

Re:The Case for Slow Programming by spacecowboy_lon on Tuesday December 02, 2014 @07:25AM (#8686747)
from what I understand the slow movement came out of the hard left in italy - and from what hhe told me the internet is still regarded as a yankee/capitalist plot based on his experiance trying to sell the idea of .coop to italian coop's
Re:The Case for Slow Programming by dceddia on Tuesday December 02, 2014 @12:21PM (#8688287)
How do developers currently learn to build scalable, maintainable, well-architected systems? Certainly there are some books on the subject, and that might be a good start, but I'd be willing to bet that these skills are largely learned "on the job" through a bunch of trial and error.

Are there any good ways to dive in and get experience with a lot of smaller examples, similar to the "code school" approach but for more advanced topics and systems?

Maybe we need something like that. Code School: Advanced. There's a lot of thought going into training the next generation of software engineers from the ground up, but there doesn't seem to be much work toward improving the skills of the ones who already have a bit of experience.

Re:The Case for Slow Programming by marktangotango on Tuesday December 02, 2014 @01:26PM (#8688810)
It is all trial and error from my perspective. I like this line of inquery. The problem I see is the technology is constantly changing, and the meaning of 'scalable' is always expanding. Ie the 'Enterprise' archticture of the past didn't scale to 'internet scale', will 'internet scale' scale to 'internet of things' scale?
Re:The Case for Slow Programming by dceddia on Tuesday December 02, 2014 @03:51PM (#8689805)
That's a good point -- things are constantly evolving and current tech becomes outdated so quickly.

At the same time though, I think it supports my point that the training for these kinds of things should be faster than reading a big thick book followed by a bunch of trial and error.

Re:The Case for Slow Programming by tomelders on Tuesday December 02, 2014 @09:01AM (#8687078)
There's an old turn of phrase from the building industry which can to mind while reading this article, and I think it sums it up perfectly.

"Measure twice, cut once"

I'd argue that a lot of projects these days suffer a death of a thousand cuts.

Re:The Case for Slow Programming by rumcajz on Tuesday December 02, 2014 @12:11AM (#8685819)
Programmers are craftsmen. They need vocational schools. Academia is not up to the job.
Re:The Case for Slow Programming by wmt on Tuesday December 02, 2014 @12:38AM (#8685870)
That's actually the problem! Many current engineering disciples were before handled by craftsmen until scientific principles were applied to it, making it engineering.

There have been very few scientific studies about the basics of building software, like how much unit tests really affects the bug density, and those few studies go often unnoticed when teaching future software engineers.

It would require a major effort to first study the existing emergent software craftsmanship practices to find common patterns and to scientifically evaluate their effectiveness, and the results would have to be taught in the hypothetical future curriculum where future software engineers would be made. Then we might have software engineering instead of just software craftsmanship.

It's almost a bit amazing that software "engineers" who can be very obsessive about getting the data or A/B-testing will craft software based on methods they have no data about.

Re:The Case for Slow Programming by jwmerrill on Tuesday December 02, 2014 @02:07AM (#8686063)
> There have been very few scientific studies about the basics of building software...

There hasn't been a lot of great quantitative scientific study on how to productively do science either. Academic science is a craft, and is more or less learned through apprenticeships.

I'm trained as a physicist, and I'm certainly a fan of quantitative scientific methods, but I think it's important to realize that there are some areas where quantitative science is effective and rewards the required work well, and other areas where it is largely an ineffective waste of time.

I suspect trying to quantitatively study things like "how much unit tests really affects the bug density" is one of these cases with a poor reward to effort ratio.

There's a danger in trying to apply quantitative science to complex phenomena, when many or most relevant factors are actually uncontrolled and unmeasured. Once you have a number--any number--the tendency is to fetishize it at the expense of broader thinking. Make no mistake: quantitative measurements of the behavior of people performing complicated tasks do not carry the same epistemological force as quantitative measurements of the magnetic dipole moment of the electron.

Scientists themselves more typically try to understand their own craft through case studies and "professional wisdom" passed down from practicing experts to apprentices. Software developers would probably do well to (continue to) do the same.

Re:The Case for Slow Programming by Joeri on Tuesday December 02, 2014 @02:49AM (#8686141)
It's not just that not a lot of science is applied to the craft of programming. It is that many programmers are actively hostile to the concept. For example, the rules of programmers.se forbid asking for statistics. So if you want to know objective facts about the craft of programming, you're forbidden from asking for it on the most popular forum about that craft. When I asked why this rule was in place, it became apparent that the only real reason was an irrational dislike of statistics. With that kind of attitude our craft will never become an engineering discipline..
Re:The Case for Slow Programming by NotOscarWilde on Tuesday December 02, 2014 @06:03AM (#8686552)
> When I asked why this rule was in place, it became apparent that the only real reason was an irrational dislike of statistics.

Can you reference those claims? If I ever repeat this claim, I would prefer to be able to link to the administrators' statements directly.

Re:The Case for Slow Programming by ratboy666 on Tuesday December 02, 2014 @05:16AM (#8686440)
You should ask: do I want it to be an art, or merely a discipline?
Re:The Case for Slow Programming by sssssss on Tuesday December 02, 2014 @03:09AM (#8686184)
Maybe that future isn't too far away! Have you checked out Code Complete? My university used it as a textbook for a Software Engineering course. To borrow your example, it cites multiple studies about the effectiveness of unit testing on errors, as well as many other software engineering topics.
Re:The Case for Slow Programming by spacemanmatt on Tuesday December 02, 2014 @08:23AM (#8686889)
Career vocational software craftsman here. Academic background in math and science have served me well as I self-taught all the CS and application development skills I have collected over the years. Vocational training probably would not have hurt, but I don't see how it could fit a traditional curriculum; I have only accelerated my pace of learning as the internet and quality of free tools and instructional material have grown, and I attribute that entirely to the buffet nature of online training.
Re:The Case for Slow Programming by rumcajz on Tuesday December 02, 2014 @09:53AM (#8687357)
Well, what I wanted to say was that the "craft", i.e. skills learned when working on a real project with experienced developers, is something I use all the time. Academic knowledge less so. Take, for example, complexity theory. I use that once a day or even less. And in 95% of those cases I could just consult a simple cheat sheet (stuff like "sorting is O(n log n)").
Re:The Case for Slow Programming by GFK_of_xmaspast on Tuesday December 02, 2014 @08:27AM (#8686909)
Maybe if all you ever want out of your programmers are fart apps and web forms.
Re:The Case for Slow Programming by sophacles on Monday December 01, 2014 @05:52PM (#8684537)
> I largely agree w/ the argument here, but "slow" is going to be self-defeating nomenclature, and is also inaccurate. Business doesn't want slow. So if we're pitching slow, we're setting ourselves up to lose and the speed-hackers are going to win.

I like to use the word "deliberate" when I mean "slow", but think that "slow" will be misinterpreted.

Re:The Case for Slow Programming by mVChr on Monday December 01, 2014 @05:33PM (#8684410)
I think of it more like "deep" and "shallow".
Re:The Case for Slow Programming by kaichanvong on Monday December 01, 2014 @05:40PM (#8684453)
Mindful and considerate to your future self and others.
Re:The Case for Slow Programming by AgentIcarus on Monday December 01, 2014 @06:47PM (#8684862)
This seems similar to michaelochurch's thinking about 'guilds' - which I guess is a precursor to formalised 'engineers' or master craftsmen, which is something Software 'Engineering' seems to be in dire need of.
Re:The Case for Slow Programming by badubu on Monday December 01, 2014 @07:09PM (#8684946)
When was the last time you engaged a journeyman carpenter? This problem runs much deeper than just software. Any skilled craft is always at odds with a manager/employer/clients view that you are a fungible asset.
Re:The Case for Slow Programming by justincormack on Monday December 01, 2014 @07:24PM (#8685002)
I recommend Richard Sennett's book The Craftsman, which talks about both the history of craft and software.
Re:The Case for Slow Programming by calinet6 on Monday December 01, 2014 @11:28PM (#8685710)
The best and most concise way I've found to explain this is a systems focus.

We aim to focus on systems, because it is the most efficient way to work. By using good methods, designing complex systems well, and spending adequate time designing, we achieve a net speed increase, productivity increase, cost decrease, and additional positive benefits such as programmer morale and overall quality.

In my mind, quality is the genesis of everything, but you do have to word that really well so that the overlords comprehend the consequences correctly.

Re:The Case for Slow Programming by briantakita on Monday December 01, 2014 @09:01PM (#8685282)
Instead of slow, continuously evolving the domain abstractions is key. Faster & more effective is better. If slow creates effective judgement instead of prejudice, then go slow.

There are two systems in the brain at play. "Fast thinking" involves gut reactions & intuition. "Slow thinking" involves logical analysis & formations of models. Both contribute to effective solutions.

Recognizing iteration as the cycle of evolution & growth creates working systems in congruence with natural law.

Re:The Case for Slow Programming by adwelly on Tuesday December 02, 2014 @07:56AM (#8686816)
Deliberate Programming might be a better term; it encompasses the idea of steady progress, and solid intent. - update - I see this has already been suggested. Still like it...
Re:The Case for Slow Programming by diltonm on Tuesday December 02, 2014 @01:24AM (#8685978)
>> "slow" is going to be self-defeating nomenclature

It's pointed, poignant and accurate as well as precise; self-defeating it is not.

Re:The Case for Slow Programming by forgottenpass on Monday December 01, 2014 @08:19PM (#8685162)
With specific skill sets, you can build architecturally sound systems at no extra cost.

Except the extra labor costs of someone with that skillset.

Re:The Case for Slow Programming by wellpast on Tuesday December 02, 2014 @10:53AM (#8687684)
Today, yes. But that's a problem our industry needs to solve. A lot of our labor force has already paid in money and time for education. Our education system has simply failed to deliver the full skill sets. Not necessarily the education system's fault -- our industry needs to know what skill sets to ask for and what is their value.
Re:The Case for Slow Programming by fsloth on Tuesday December 02, 2014 @12:04AM (#8685808)
I would like to respond that the maintenance costs and thus TCO will be lower for the better designed system - however I have no idea how to formulate this into a tenable economic argument since I have absolutely no data to back this up.
Re:The Case for Slow Programming by jchrisa on Monday December 01, 2014 @08:00PM (#8685104)
There's also the question of what you work on, not just the quality of your work. You can do a barely-works version of something that it turns out people really want and it's better than if no-one had built it...

Maybe slow programming means finding important things to work on.

Re:The Case for Slow Programming by eric_h on Monday December 01, 2014 @06:35PM (#8684788)
I think "well considered" is a better adjective than slow.
Re:The Case for Slow Programming by wellpast on Monday December 01, 2014 @06:44PM (#8684842)
"Well considered" is too subjective, I think. There are specific, concrete skill sets that lead to systems with specific, well-defined properties (i.e., architectural soundness).

Your system may be well-considered but if it's not architecturally sound it's going to increasingly tumble over time.

Re:The Case for Slow Programming by jessedhillon on Tuesday December 02, 2014 @12:41PM (#8688442)
"Deliberate Programming"?
Re:The Case for Slow Programming by hasenj on Monday December 01, 2014 @05:30PM (#8684392)
I think we can learn from some other (not-so-obviously-related) disciplines.

The game of go[0] has a ranking system where players progress from 30kyu (complete beginner) to 1kyu, then 1dan to 9dan (very strong).

[0]: http://en.wikipedia.org/wiki/Go_ranks_and_ratings

It's mostly statistical and based around comparing your skill level to other players. While a 7kyu level is not necessarily that well defined, and might differ between different ranking systems, there's still a meaning to the difference between the levels. When a 5kyu (stronger) is playing a 7kyu, the 7kyu player is given 2 stones in advance (handicap) to make the game even. The number of stones given as a handicap is determined by (or defines) the difference in levels.

It's not immediately obvious how such a system could be adapted for programming skills. But the idea of having levels, and having ways to measure one's level, is very interesting, and might be quite useful.

Japanese (and probably other languages) have standardized tests[1] to determine one's language abilities.

[1]: http://en.wikipedia.org/wiki/Japanese-Language_Proficiency_T...

You don't take a test to determine your level. Rather, you take a test designed for a particular level. You either pass or fail.

N5 is the lowest level (beginner) N1 is the strongest level (near-native or even better maybe)

When you feel you are at say, level N3, you take the N3 test, and if you pass, then you can say that you have passed the N3 test. If you fail, you just fail. It doesn't mean you are N4 or N5. (As far as I know - I might actually be wrong here).

I wonder if some standardized tests can be, in principle, constructed to measure programming abilities.

The tests must be crafted such that, even if all the questions are known to the public, then studying for the test is the same thing as studying to build up your skill level.

Re:The Case for Slow Programming by saidajigumi on Monday December 01, 2014 @06:55PM (#8684895)
> I wonder if some standardized tests can be, in principle, constructed to measure programming abilities.

This absolutely misses the point of the article. It is definitively not about programming abilities, or speed of these abilities.

Many authors have hit TFA's points from different angles. For example, Tom Demarco's excellent Slack[1] introduces uses of "efficiency" (what speed is the organization moving at?) versus "effectiveness" (is the organization moving in the right direction?). DeMarco uses these to illustrate that many organizations optimize for the wrong parameters: they want to move at breakneck speed ("efficiency", "butts in seats", etc.), but in doing so trade off their vital strategic ability to think, design, to steer the ship!

In an organization without slack (briefly, the ability of knowledge workers in an organization to engage in vital reflective tasks, a key part of TFA's design process), everyone's so focused on Getting There that no one remains to decide if There is the right place to be going. This can and does result in everything from classic technical debt to strategic business failure. DeMarco describes a pile of organizational anti-patterns that stem from this philosophical damage.

I like that TFA's author connects these concepts explicitly to more recent thinking on the importance of design process.

[1] http://www.amazon.com/Slack-Getting-Burnout-Busywork-Efficie...

Re:The Case for Slow Programming by lectrick on Monday December 01, 2014 @08:13PM (#8685145)
It is the MOST trivial thing to measure performance in a Go game.

It is the LEAST trivial thing to measure the "code quality"/"unit of time" metric in a programmer. For example, you might bang out an implementation that looks fine, but 1 guy will say "that will become unmaintainable in 1 year" or "that will be a problem if we ever switch databases" or whatever and sure enough, a year later, the team has to do that... and that 1 guy was fucking RIGHT.

Who's to say how you measure such a thing?

The longer you spend in a career that has ANY creative component, the more you will come to loathe the importance placed on "performance evaluations." In fact, I'd argue that the more advanced you are in those creative jobs, the SLOWER and BETTER you work... the problem is that the newbies won't be able to recognize the "better" portion.

Re:The Case for Slow Programming by jodrellblank on Tuesday December 02, 2014 @01:12AM (#8685953)
"that will become unmaintainable in 1 year" or "that will be a problem if we ever switch databases" or whatever and sure enough, a year later, the team has to do that... and that 1 guy was fucking RIGHT.

And sometimes YAGNI, we'll cross that bridge when we come to it, nice problem to have, good enough is good enough, do the simplest thing that could possibly work, premature optimization, perfect is the enemy of good, grass is always greener somewhere else, better a bird in the hand than two in the bush, he's right but it's still not worth the cost right now, etc.

Re:The Case for Slow Programming by hvidgaard on Tuesday December 02, 2014 @03:04AM (#8686174)
That is a perfect mindset to have to the problem of the type "that will be a problem if we ever switch databases". However, "that will become unmaintainable in 1 year" is a "bridge" you want to cross sooner rather than later. If you have a deadline to meet, fine, but come back and fix it asap if the software is something that needs to be maintained. I really cannot explain it well, it's just something most developers realize after a while when they've had to maintain an old codebase.

They key point however is, that one guys insight shouldn't be ignored. You can take the words of wisdom and proceed to not do anything about it, but at least you know the cost down the road. All experienced managers I know personally, know the cost of umaintainable software and are more than willing to do something about it if ressources allow it. They need to, otherwise it's their ass that is in the line of fire when it cost a factor 10 to implement a new feature and bugs creep up at the customer time after time, even though they spend a factor 10 more on QA.

Re:The Case for Slow Programming by placeybordeaux on Tuesday December 02, 2014 @06:34PM (#8690848)
>It is the MOST trivial thing to measure performance in a Go game.

Actually in terms of very old games Go is one of the harder ones to measure performance of during the game. In terms of measuring performance in any 1v1 game however it is easy.

Small difference.

Re:The Case for Slow Programming by pjmorris on Monday December 01, 2014 @05:34PM (#8684418)
Should you measure the worker, or measure the work?

Anyone who can build reliable systems using unreliable parts (like humans) will have an edge.

EDIT: If you're going to measure the worker's programming concept knowledge, Alison Tew's work seems to be at the leading edge.

[1] 'Developing a Validated Assessment of Fundamental CS1 Concepts', Tew, Guzdial, http://dl.acm.org/citation.cfm?id=1734297

Re:The Case for Slow Programming by hasenj on Monday December 01, 2014 @05:47PM (#8684500)
I'm more interested in measuring abilities relevant directly to software as a profession (or craftsmanship), such as: how well can you architecture a system to solve a complex problem?
Re:The Case for Slow Programming by wellpast on Monday December 01, 2014 @06:40PM (#8684813)
This is important: you can separate handling complexity from the profession of building architecturally sound systems.

We can teach people how to do math correctly. That doesn't guarantee that they will be able to solve arbitrarily complex problems. But to solve math problems, you MUST at least have the skill sets.

So there is a test to measure do you have the skill sets. How much one is willing and/or able to handle complexity is a separate thing to consider.

Re:The Case for Slow Programming by eru on Monday December 01, 2014 @05:53PM (#8684547)
If you can shine a new light on the problem to make it simple instead, than you can get away with a simpler architecture.
Re:The Case for Slow Programming by lsiebert on Monday December 01, 2014 @06:25PM (#8684732)
Thanks, that was a very interesting paper (though I had to google to find a copy).
Re:The Case for Slow Programming by michaelochurch on Monday December 01, 2014 @09:55PM (#8685427)
I largely agree w/ the argument here, but "slow" is going to be self-defeating nomenclature, and is also inaccurate. Business doesn't want slow. So if we're pitching slow, we're setting ourselves up to lose and the speed-hackers are going to win.

I think a better adjective would be robust. But I'd hate "Robust Programming" become as much of an abortion as "Agile", now an excuse for micromanagement and business-side mediocrity, has proved itself to be.

Re:The Case for Slow Programming by danenania on Monday December 01, 2014 @11:06PM (#8685659)
I agree about what the term 'agile' has become, but in many situations (especially in startups), spending too much time and energy to make something robust in version 1 is worse than hacking it together with spaghetti code. The key is to know which mode is appropriate for what you're doing.

If we want to create more tolerance for good engineering practice, we can't act like primadonna artists obsessed with building our perfect masterpieces on someone else's dime. We're hired by businesses, so our arguments need to be grounded in business value.

"It's a shitty architecture" isn't going to get you anywhere.

"It's going to fall apart and cost you millions if you do it that way, but if you take out these less important features and spent more time on what matters, we can do it right for the same cost..." People might just listen to that one.