choice architecture

17 results back to index

pages: 168 words: 46,194

Why Nudge?: The Politics of Libertarian Paternalism by Cass R. Sunstein


Affordable Care Act / Obamacare, Andrei Shleifer, availability heuristic, Cass Sunstein, choice architecture, clean water, Daniel Kahneman / Amos Tversky, Edward Glaeser, endowment effect, energy security, framing effect, invisible hand, late fees, libertarian paternalism, loss aversion, nudge unit, randomized controlled trial, Richard Thaler

But the term has the virtue of spotlighting efforts, all over the world, to develop sensible, low-cost policies with close reference to how human beings actually think and behave. Choice Architecture Findings about human error raise a natural question, which is whether an improved understanding of thought and behavior opens greater space for paternalism. Perhaps that understanding supplements the standard economic accounts of “market failure” by providing justifications for government action even without harm to others or some kind of collective action problem.33 We do know that people are much affected by choice architecture, meaning the background against which choices are made.34 Such architecture is both pervasive and inevitable, and it greatly influences outcomes, whether or not we are even aware of it. In fact choice architecture can be decisive. It effectively makes countless decisions for us, and it influences numerous others, by pressing us in one direction or another.35 For example, do printers have single-sided or double-sided default settings?

As we shall see, this point raises serious problems for the Harm Principle, because influences on our choices are omnipresent, and we may not even see them. Choice architecture exists whenever we enter a cafeteria, a restaurant, a hospital, or a grocery store; when we select a mortgage, a car, a health care plan, or a credit card; when we turn on a tablet or a computer and visit our favorite websites (including government websites), which highlight some topics and downplay others; and when we apply for drivers’ licenses or building permits or social security benefits. The Daily Grill certainly offers a choice architecture, and its Simply 600 menu is a form of such architecture. No restaurant lacks choice architecture, and any menu contains one. (Menus matter, for food as well as for candidates for public office, among other things because people are more likely to choose what is first.)

As a result, students applied to many more places, and low-income students ended up attending more selective colleges, thus obtaining higher expected earnings over their lifetimes.38 For all of us, a key question is whether the choice architecture is helpful and simple, or harmful, complex, and exploitative. Any architecture will exercise power over the people who are subject to it. Since we cannot eliminate choice architecture, might violations of the Harm Principle turn out to be inevitable? Might Mill and his followers have missed the inevitable effects of that architecture? This question raises others. Should choice architects, including those in the public sphere, be authorized to move people’s decisions in their preferred directions? Would any such effort be unacceptably paternalistic? Who will monitor the choice architects, or create a choice architecture for them?39 Economists have an elaborate account of the “market failures” that can justify government intervention, including monopoly, an absence of information on the part of consumers, and the harmful effects on third parties, such as pollution, that can come from voluntary agreements (“externalities”).


pages: 304 words: 22,886

Nudge: Improving Decisions About Health, Wealth, and Happiness by Richard H. Thaler, Cass R. Sunstein


Al Roth, Albert Einstein, asset allocation, availability heuristic, call centre, Cass Sunstein, choice architecture, continuous integration, Daniel Kahneman / Amos Tversky, desegregation, diversification, diversified portfolio, endowment effect, equity premium, feminist movement, framing effect, full employment, George Akerlof, index fund, invisible hand, late fees, libertarian paternalism, loss aversion, Mahatma Gandhi, Mason jar, medical malpractice, medical residency, mental accounting, meta analysis, meta-analysis, Milgram experiment, pension reform, presumed consent, profit maximization, rent-seeking, Richard Thaler, risk tolerance, Robert Shiller, Robert Shiller, Saturday Night Live, school choice, school vouchers, transaction costs, Vanguard fund, Zipcar

In domains as varied as savings, organ donations, marriage, and health care, we will offer specific suggestions in keeping with our general approach. And by insisting that choices remain unrestricted, we think that the risks of inept or even corrupt designs are reduced. Freedom to choose is the best safeguard against bad choice architecture. Choice Architecture in Action Choice architects can make major improvements to the lives of others by designing user-friendly environments. Many of the most successful companies have helped people, or succeeded in the marketplace, for exactly that reason. Sometimes the choice architecture is highly visible, and consumers and employers are much pleased by it. (The iPod and the iPhone are good examples because not only are they elegantly styled, but it is also easy for the user to get the devices to do what they want.) Sometimes the architecture is taken for granted and could benefit from some careful attention.

They do less well in contexts in which they are inexperienced and poorly informed, and in which feedback is slow or infrequent—say, in choosing between fruit and ice cream (where the long-term effects are 9 10 INTRODUCTION slow and feedback is poor) or in choosing among medical treatments or investment options. If you are given fifty prescription drug plans, with multiple and varying features, you might benefit from a little help. So long as people are not choosing perfectly, some changes in the choice architecture could make their lives go better (as judged by their own preferences, not those of some bureaucrat). As we will try to show, it is not only possible to design choice architecture to make people better off; in many cases it is easy to do so. The first misconception is that it is possible to avoid influencing people’s choices. In many situations, some organization or agent must make a choice that will affect the behavior of some other people. There is, in those situations, no way of avoiding nudging in some direction, and whether intended or not, these nudges will affect what people choose.

But if some of the consumers are Humans who sometimes make bad choices (as judged by themselves, of course), then all of us may have an interest in which set of firms wins the battle. Government can, of course, outlaw some kinds of activities, but as libertarian paternalists we prefer to nudge—and we are keenly aware that governments are populated by Humans. What can be done to help? In the next chapter we describe our primary tool: choice architecture. 5 CHOICE ARCHITECTURE Early in Thaler’s career, he was teaching a class on managerial decision making to business school students. Students would sometimes leave class early to go for job interviews (or a golf game) and would try to sneak out of the room as surreptitiously as possible. Unfortunately for them, the only way out of the room was through a large double door in the front, in full view of the entire class (though not directly in Thaler’s line of sight).


pages: 351 words: 100,791

The World Beyond Your Head: On Becoming an Individual in an Age of Distraction by Matthew B. Crawford


airport security, Cass Sunstein, choice architecture, collateralized debt obligation, David Brooks, delayed gratification, dematerialisation, deskilling, digital Maoism, Google Glasses, hive mind, index card, informal economy, Jaron Lanier, large denomination, new economy, new new economy, online collectivism, Plutocrats, plutocrats, Richard Thaler, Rodney Brooks, self-driving car, Silicon Valley, Silicon Valley ideology, the built environment, the scientific method, The Wisdom of Crowds, theory of mind, Walter Mischel, winner-take-all economy

When the choosing will is hermetically sealed off from the fuzzy, hard-to-master contingencies of the empirical world, it becomes more “free” in a sense: free for the kind of neurotic dissociation from reality that opens the door wide for others to leap in on our behalf, and present options that are available to us without the world-disclosing effort of skillful engagement. For the Mouseke-doer, choosing (from a menu of ready-made solutions) replaces doing, and it follows that such a person should be more pliable to the choice architectures presented to us in mass culture. The absence of the real from Mickey Mouse Clubhouse—indeed, the dissociative or abstract quality of children’s television in general these days—makes it an ideal vehicle for psychological adjustment; for constructing and managing the kind of selves that society requires, without meddling interference from the nature of things. The particular adjustments to be carried out will have to be determined by a Disney script supervisor, or some other functionary of the modern self.

This gesture, emblematic of contemporary life, might be seen as a fulfillment of the thinned-out notion of human agency we have signed on to when we conceive action as the autonomous movements of an isolated person who is essentially disengaged from the world. Our current attentional environment is novel, but as we have already begun to investigate with our discussion of Kant, it was prepared by a long intellectual history. To repeat a formulation I used in the previous chapter, if choosing replaces doing for the mouse-clicking Mouseke-doer, it figures that such a disengaged self should be especially pliable to the “choice architectures” that get installed in public spaces. As we shall see, in the darker precincts of capitalism things are being designed to foster disengagement, to the point of inducing a kind of autism. 5 AUTISM AS A DESIGN PRINCIPLE: GAMBLING When my oldest daughter was a toddler, we had a Leap Frog Learning Table in the house. Each side of the square table presents some sort of electromechanical enticement.

I argued that all of this tends to sculpt a certain kind of contemporary self, a fragile one whose freedom and dignity depend on its being insulated from contingency, and who tends to view technology as magic for accomplishing this. For such a self, choosing from a menu of options replaces the kind of adult agency that grapples with things in an unfiltered way. Finally, I argued that such a choosy self is especially pliable to the “choice architectures” that get installed on our behalf by various functionaries of psychological adjustment. These features of our world are hard to criticize because, though they may be appalling once described in the way that I have, they are intimately connected to our defining virtues as modern Western people. I have already suggested that much of what I have described can be understood as a cultural working out of Kant’s ideal of autonomy.


pages: 281 words: 95,852

The Googlization of Everything: by Siva Vaidhyanathan


1960s counterculture, AltaVista, barriers to entry, Berlin Wall, borderless world, Burning Man, Cass Sunstein, choice architecture, cloud computing, computer age, corporate social responsibility, correlation does not imply causation, data acquisition, death of newspapers, don't be evil, Firefox, Francis Fukuyama: the end of history, full text search, global village, Google Earth, Howard Rheingold, informal economy, information retrieval, Joseph Schumpeter, Kevin Kelly, knowledge worker, libertarian paternalism, market fundamentalism, Marshall McLuhan, means of production, Mikhail Gorbachev, Naomi Klein, Network effects, new economy, Nicholas Carr, PageRank, pirate software, Ray Kurzweil, Richard Thaler, Ronald Reagan, side project, Silicon Valley, Silicon Valley ideology, single-payer health, Skype, social web, Steven Levy, Stewart Brand, technoutopianism, The Nature of the Firm, The Structural Transformation of the Public Sphere, Thorstein Veblen, urban decay, web application

The default setting of automatic enrollment, Thaler and Sunstein explain, helped employees overcome the “inertia” caused by business, distraction, and forgetfulness.9 That choice architecture could have such an important effect on so many human behaviors without overt coercion or even elaborate incentives convinced Thaler and Sunstein that taking advantage of it can accomplish many important public-policy goals without significant cost to either the state or private firms. They call this approach “libertarian paternalism.” If a system is designed to privilege a particular choice, they observe, people will tend to choose that option more than the alternatives, even though they have an entirely free choice. “There is no such thing as a ‘neutral’ design.”10 It’s clear that Google understands the power of choice architecture. It’s in the company’s interest to set all user-preference defaults to collect the THE GOOGL I ZAT I ON OF US 89 greatest quantity of usable data in the most contexts.

There is no formula for assessing it: I can’t give Google three of my privacy points in exchange 88 TH E G OOGL IZATION OF US for 10 percent better service. More seriously, Mayer and Google fail to acknowledge the power of default settings in a regime ostensibly based on choice. T H E IRR EL EVANC E O F C H O I C E In their 2007 book Nudge: Improving Decisions about Health, Wealth, and Happiness, the economist Richard Thaler and law professor Cass Sunstein describe a concept they call “choice architecture.” Plainly put, the structure and order of the choices offered to us profoundly influence the decisions we make. So, for instance, the arrangement of foods in a school cafeteria can influence children to eat better. The positions of restrooms and break rooms can influence the creativity and communality of office staff. And, in the best-known example of how defaults can influence an ostensibly free choice, studies have demonstrated that when employer-based retirement plans in the United States required employees to opt in to them, more than 40 percent of employees either failed to enroll or contributed too little to get matching contributions from their employers.

But meaningful freedom implies real control over the conditions of one’s life. Merely setting up a menu with switches does not serve the interests of any but the most adept, engaged, and well-informed. Setting the defaults to maximize the benefits for the firm and hiding the switches beneath a series of pages are irresponsible, but we should not expect any firm to behave differently. If we want a different choice architecture in complex ecosystems such as the Web, we are going to have to rely on firms’ acceding collectively to pressure from consumer groups or ask the state to regulate such defaults. Google officials also don’t acknowledge that completely opting out of Google’s data-collection practices significantly degrades the user’s experience. For those few Google users who click through the three pages it takes to find and adjust their privacy options, the cost of opting out becomes plain.


pages: 397 words: 109,631

Mindware: Tools for Smart Thinking by Richard E. Nisbett


affirmative action, Albert Einstein, availability heuristic, big-box store, Cass Sunstein, choice architecture, cognitive dissonance, correlation coefficient, correlation does not imply causation, cosmological constant, Daniel Kahneman / Amos Tversky, dark matter, endowment effect, experimental subject, feminist movement, fundamental attribution error, glass ceiling, Henri Poincaré, Isaac Newton, job satisfaction, lake wobegon effect, libertarian paternalism, loss aversion, low skilled workers, Menlo Park, meta analysis, meta-analysis, quantitative easing, Richard Thaler, Ronald Reagan, Socratic dialogue, Steve Jobs, Steven Levy, the scientific method, The Wealth of Nations by Adam Smith, Thomas Kuhn: the structure of scientific revolutions, William of Occam, Zipcar

Scores of thousands of people have died who would have lived if the United States had an opt-out policy. Choice architecture plays a vital role in determining what decisions people make. Some ways of structuring decisions result in better outcomes for individuals and for society than other ways of structuring decisions. No one is hurt by opt-out procedures for things like organ donation; no coercion is involved because people who wish not to have their organs harvested are free to decline. The deliberate design of decision frameworks that function for individual and collective good has been called “libertarian paternalism” by Thaler and Sunstein.8 The difference between choice architectures that foster the right choices and those that don’t can be subtle—at least to people who are unfamiliar with the power of loss aversion and consequent status quo bias.

One would think that virtually everyone would take advantage of the free money offered by employers who provide defined contribution plans. In fact, however, about 30 percent of employees fail to sign up for such plans.9 A study in Britain of twenty-five corporations that offered defined contribution plans—and paid 100 percent of the cost—found that barely half of employees signed up for the plan!10 This is like burning up a portion of your salary. A sensible choice architecture for savings plans would not require people to opt in, which after all takes little more effort than checking a box, but would have an opt-out default, which requires even less energy than that. You are enrolled in the plan unless you ask not to be. In one plan, the opt-in approach resulted in scarcely more than 20 percent enrollment three months after starting the job and only 65 percent after three years on the job.

Finally, some powerful pragmatic reasoning schemas don’t constitute abstract blueprints for reasoning but are merely empirical principles that facilitate correct solutions to a broad range of everyday problems. These include the fundamental attribution error, the generalization that actors and observers tend to explain behavior differently, loss aversion, the status quo bias, the principle that some choice architectures are generally superior to others in the quality of choices they encourage, and the principle that incentives aren’t necessarily the best way to get people to change their behavior—among dozens of others in this book. Abstract pragmatic schemas are tremendously useful, but purely logical schemas are of limited value. I believe this is the case because there’s a very high civilization, namely Confucian Chinese, that never developed purely logical formalisms.


pages: 354 words: 91,875

The Willpower Instinct: How Self-Control Works, Why It Matters, and What You Can Doto Get More of It by Kelly McGonigal


banking crisis, bioinformatics, Cass Sunstein, choice architecture, cognitive bias, delayed gratification, game design, impulse control, loss aversion, meta analysis, meta-analysis, phenotype, Richard Thaler, Wall-E, Walter Mischel

Rather than hope that we as a nation develop more willpower in order to meet our biggest challenges, our best bet might be to take self-control out of the equation whenever possible—or at least reduce the self-control demands of doing the right thing. Behavioral economist Richard Thaler and legal scholar Cass Sunstein have argued persuasively for “choice architecture,” systems that make it easier for people to make good decisions consistent with their values and goals. For example, asking people to become organ donors when they renew a driver’s license or register to vote. Or having health insurance companies automatically schedule annual check-ups for their members. These are things most people mean to do, but put off because they are distracted by so many other more pressing demands. Retailers already use choice architecture to influence what you buy, although usually not for any noble purpose but to make a profit. If there were sufficient incentive, stores might more prominently feature healthy or environmentally friendly products.

If there were sufficient incentive, stores might more prominently feature healthy or environmentally friendly products. Instead of lining the checkout area with indulgent impulse purchases like candy and gossip magazines, stores could use that real estate to make it easier for people to pick up dental floss, condoms, or fresh fruit. This kind of simple product placement has been shown to dramatically increase healthy purchases. Choice architecture designed to manipulate people’s decisions is a controversial proposition. Some see it as restricting individual freedom or ignoring personal responsibility. And yet, people who are free to choose anything most often choose against their long-term interests. Research on the limits of self-control suggests that this is not because we are innately irrational, or because we are making deliberate decisions to enjoy today and screw tomorrow.

Presented at the 2008 World Meeting of the International Association for Research in Economic Psychology and the Society for Advancement of Behavioral Economics, Rome. Page 77—For a dramatic telling of the Easter Island tragedy, see Diamond, J. Collapse: How Societies Choose to Fail or Succeed. New York: Viking, 2004. For an economic model, see Bologna, M., and J. C. Flores. “A Simple Mathematical Model of Society Collapse Applied to Easter Island.” EPL (Europhysics Letters) 81 (2008): 480–86. Page 78—“Choice architecture”: Thaler, R. H., and C. R. Sunstein. Nudge: Improving Decisions About Health, Wealth, and Happiness. New York: Knopf, 2008. Page 79—Placement increases purchases: Just, D. R., and B. Wansink. “Smarter Lunchrooms: Using Behavioral Economics to Improve Meal Selection.” Choices 24 (2009). Chapter 4. License to Sin: Why Being Good Gives Us Permission to Be Bad Pages 82–83—Sexist survey and moral licensing: Monin, B., and D.


pages: 487 words: 151,810

The Social Animal: The Hidden Sources of Love, Character, and Achievement by David Brooks


Albert Einstein, asset allocation, Atul Gawande, Bernie Madoff, business process, Cass Sunstein, choice architecture, clean water, Daniel Kahneman / Amos Tversky, David Brooks, delayed gratification, deliberate practice, disintermediation, Donald Trump, Douglas Hofstadter, Emanuel Derman,, fear of failure, financial deregulation, financial independence, Flynn Effect, George Akerlof, Henri Poincaré, hiring and firing, impulse control, invisible hand, Joseph Schumpeter, labor-force participation, loss aversion, medical residency, meta analysis, meta-analysis, Monroe Doctrine, Richard Thaler, risk tolerance, Robert Shiller, Robert Shiller, school vouchers, six sigma, Steve Jobs, Steven Pinker, the scientific method, The Spirit Level, The Wealth of Nations by Adam Smith, Thorstein Veblen, transaction costs, Walter Mischel, young professional

If she had to adopt some of their mind-set in order to get them to listen to her, so be it. Erica decided she would build her consulting business not on cultural segmentation, which the market wasn’t ready for, but on behavioral economics, which was hot and in demand. Heuristics Erica read the major behavioral economists. Behind every choice, they said, there is a choice architecture, an unconscious set of structures that helps frame the decision. This choice architecture often comes in the forms of heuristics. The mind stores certain “if … then …” rules of thumb, which get activated by context and can be trotted out and applied in appropriate or near-appropriate circumstances. First, for example, there is priming. One perception cues a string of downstream thoughts that alters subsequent behavior. If you ask test subjects to read a series of words that vaguely relate to being elderly (“bingo,” “Florida,” “ancient”), when they leave the room they will walk more slowly than when they came in.


She would sit down and remind herself that she needed to find one narrow niche, but she couldn’t help herself—the flood of scattershot ideas just kept coming. She felt liberated not having to follow the guardrails of some other person’s thinking. She was going to create a consulting firm that would be unlike any other. It would be humanist in the deepest sense. It would treat people not as data points, but as the fully formed idiosyncratic creatures they are. She was utterly convinced she would succeed. CHAPTER 11 CHOICE ARCHITECTURE SOMETIME BACK IN THE PHARAOHS’ DAY, A SHOPKEEPER DISCOVERED he could manipulate the unconscious thoughts of his customers simply by manipulating the environment in his store. Merchandisers have been following his lead ever since. For example, shoppers in grocery stores usually confront the fruit-and-vegetable section first. Grocers know that shoppers who buy the healthy stuff first will feel so uplifted they will buy more junk food later in their trip.


pages: 199 words: 43,653

Hooked: How to Build Habit-Forming Products by Nir Eyal


Airbnb, AltaVista, Cass Sunstein, choice architecture, cognitive bias, cognitive dissonance,, framing effect, game design, Google Glasses, Inbox Zero, invention of the telephone, iterative process, Jeff Bezos, Lean Startup, Mahatma Gandhi, Mark Zuckerberg, meta analysis, meta-analysis, Oculus Rift, Paul Buchheit, Paul Graham, Peter Thiel, QWERTY keyboard, Silicon Valley, Silicon Valley startup, Snapchat, TaskRabbit, telemarketer, Toyota Production System, Y Combinator

But why are zombies suddenly so fascinating? Perhaps technology’s unstoppable progress — ever more pervasive and persuasive — has grabbed us in a fearful malaise at the thought of being involuntarily controlled. Although the fear is palpable, we are like the heroes in every zombie film — threatened but ultimately more powerful. I have come to learn that habit-forming products can do far more good than harm. “Choice architecture,” as described by famed scholars Thaler, Sunstein, and Balz, offers techniques to influence people’s decisions and affect behavioral outcomes. Ultimately though, the practice should be, “used to help nudge people to make better choices (as judged by themselves).” [xv] Accordingly, this book teaches innovators how to build products to help people do the things they already want to do but, for lack of a solution, don’t do.

Socioaffective Neuroscience & Psychology 3, no. 0 (September 26, 2013). doi:10.3402/snp.v3i0.21592. [xiii] “The Acceleration of Addictiveness,” Paul Graham. Accessed November 12, 2013. [xiv] “Night of the Living Dead.” Wikipedia, the Free Encyclopedia, December 18, 2013. [xv] Thaler, Richard H., Cass R. Sunstein, and John P. Balz. Choice Architecture. SSRN Scholarly Paper. Rochester, NY: Social Science Research Network, April 2, 2010. [xvi] For a memorable acronym of the Hook Model, think “ATARI”, as in the 1980s video gaming console. “A hook has four parts: Trigger, Action, Reward, and Investment. Chapter 1: The Habit Zone [xvii] Wood, Wendy, Jeffrey M Quinn, and Deborah A Kashy. “Habits in Everyday Life: Thought, Emotion, and Action.”

[cxii] “Pinterest Does Another Massive Funding — $225 Million at $3.8 Billion Valuation (Confirmed).” AllThingsD. Accessed November 13, 2013. Chapter 6: What Are You Going to Do with This? [cxiii] For further thoughts on the morality of designing behavior, see: Thaler, Richard H., Cass R. Sunstein, and John P. Balz. Choice Architecture. SSRN Scholarly Paper. Rochester, NY: Social Science Research Network, April 2, 2010. [cxiv] White, Charlie. “Survey: Cellphones Vs. Sex – Which Wins? [INFOGRAPHIC].” Mashable, August 3, 2011. [cxv] Bogost, Ian. “The Cigarette of This Century.” The Atlantic, June 6, 2012.


pages: 500 words: 145,005

Misbehaving: The Making of Behavioral Economics by Richard H. Thaler


Albert Einstein, Amazon Mechanical Turk, Andrei Shleifer, Apple's 1984 Super Bowl advert, Atul Gawande, Berlin Wall, Bernie Madoff, Black-Scholes formula, capital asset pricing model, Cass Sunstein, Checklist Manifesto, choice architecture, clean water, cognitive dissonance, conceptual framework, constrained optimization, Daniel Kahneman / Amos Tversky, delayed gratification, diversification, diversified portfolio, Edward Glaeser, endowment effect, equity premium, Eugene Fama: efficient market hypothesis, experimental economics, Fall of the Berlin Wall, George Akerlof, hindsight bias, Home mortgage interest deduction, impulse control, index fund, invisible hand, Jean Tirole, John Nash: game theory, John von Neumann, late fees, law of one price, libertarian paternalism, Long Term Capital Management, loss aversion, market clearing, Mason jar, mental accounting, meta analysis, meta-analysis, More Guns, Less Crime, mortgage debt, Nash equilibrium, Nate Silver, New Journalism, nudge unit, payday loans, Ponzi scheme, presumed consent, pre–internet, principal–agent problem, prisoner's dilemma, profit maximization, random walk, randomized controlled trial, Richard Thaler, Robert Shiller, Robert Shiller, Ronald Coase, Silicon Valley, South Sea Bubble, statistical model, Steve Jobs, technology bubble, The Chicago School, The Myth of the Rational Market, The Signal and the Noise by Nate Silver, The Wealth of Nations by Adam Smith, Thomas Kuhn: the structure of scientific revolutions, transaction costs, ultimatum game, Walter Mischel

After rereading Norman’s book, I realized we could apply many of his principles to the problems we were studying. I had recently bought my first iPhone, a device so easy to use that it didn’t need an instruction manual. What if we could design policies that were equally easy to create “user-centered” choice environments? At some point we adopted the term “choice architecture” to describe what we were trying to do. In curious ways, simply having that phrase to organize our thoughts helped us create a checklist of principles for good choice architecture, with many of the ideas borrowed from the human design literature. Designing good public policies has a lot in common with designing any consumer product. Now that we had our new set of tools, one big choice we had to make was which policy issues to try to address with them. Some topics that we had already written about were easy, but others required us to dig into the literature and see whether we could come up with anything useful or interesting.

These economists simply do solid empirical work and let the chips fall where they may. I already mentioned two such papers earlier in the book: Justine Hastings and Jesse Shapiro’s paper on the mental accounting of gasoline, and the paper by Raj Chetty and his team analyzing Danish data on pension saving. Recall that the Chetty team finds that the economic incentive for saving via tax breaks has virtually no effect on behavior. Instead, 99% of the work is done by the choice architecture of the plans, such as the default saving rate—in other words, SIFs. This paper is just one of many in which Chetty and his team of collaborators have found behavioral insights can improve our understanding of public policy. When all economists are equally open-minded and are willing to incorporate important variables in their work, even if the rational model says those variables are supposedly irrelevant, the field of behavioral economics will disappear.

See also World Bank (2015). 353 repeatedly and rigorously tested: See Post et al. (2008) and van den Assem, van Dolder, and Thaler (2012) on game shows, Pope and Schweitzer (2011) on golf, Barberis and Thaler (2003) and Kliger, van den Assem, and Zwinkels (2014) for reviews of behavioral finance, and Camerer (2000) and DellaVigna (2009) for surveys of empirical applications of behavioral economics more generally. 353 intriguing finding by Roland Fryer: Fryer (2010). 354 The team of Fryer, John List, Steven Levitt, and Sally Sadoff: Fryer et al. (2013). 354 a recent randomized control trial: Kraft and Rogers (2014). 355 Field experiments are perhaps the most powerful tool we have: Gneezy and List (2013). 356 “If you don’t write it down, it doesn’t exist”: Ginzel (2014). 356 his recent book The Checklist Manifesto: Gawande (2010), pp. 176–77. 356 Into Thin Air: Krakauer (1997). 357 99% of the work is done by the choice architecture: Another example is Alexandre Mas who (sometimes collaborating with Alan Krueger) has shown that after labor disputes that go badly for workers, the quality of work declines. See Mas (2004) on the value of construction equipment after a dispute, Mas and Krueger (2004) on defects in tires after a strike, and Mas (2006) on police work after arbitration. One other example of mainstream economists doing research with a behavioral economics bent would be Edward Glaeser (2013) on speculation in real estate. 358 improve our understanding of public policy: See Chetty’s (2015) Ely lecture delivered at the American Economic Association Meeting that I organized in January 2015.


pages: 387 words: 120,155

Inside the Nudge Unit: How Small Changes Can Make a Big Difference by David Halpern


Affordable Care Act / Obamacare, availability heuristic, carbon footprint, Cass Sunstein, centre right, choice architecture, cognitive dissonance, collaborative consumption, correlation does not imply causation, Daniel Kahneman / Amos Tversky, endowment effect, happiness index / gross national happiness, hindsight bias, illegal immigration, job satisfaction, Kickstarter, libertarian paternalism, market design, meta analysis, meta-analysis, Milgram experiment, nudge unit, peer-to-peer lending, pension reform, presumed consent, quantitative easing, randomized controlled trial, Richard Feynman, Richard Thaler, Ronald Reagan, Rory Sutherland, Simon Kuznets, skunkworks, the built environment, theory of mind, traffic fines, World Values Survey

But Thaler and Sunstein gave the ideas a major extra push in at least three ways. First, as non-psychologists they helped to break the ideas out of psychology, and applied them in an accessible form to problems that faced economists and lawmakers. Second, they blended into these existing literatures new ideas from ‘behavioural economics’, including a more formal recognition of the widespread power of defaults and ‘choice architecture’ – or the way in which choices are presented to people.1 Third, they engaged directly in policy, not least through an old Chicago friend and colleague, Barak Obama. Obama and Sunstein: ‘nudge’ comes to Washington In a move that attracted widespread attention, the new President Obama appointed the co-author of Nudge, Cass Sunstein, to be his ‘regulatory tsar’ in his government in 2008.

For example, changing the default on a pension scheme from one that is an opt-in scheme for employees to an opt-out does not eliminate the choice. Employees are still free to opt out if they wish to do so. It is transparent what the choice is, and employees are informed by law about it. In contrast, in some western countries you are obliged to save – though you may have some choice about your pension provider. There’s no neutral choice Nudgers often talk about ‘choice architecture’ – the way that options are presented. The everyday example that is often discussed is the order in which food is presented in a cafeteria. Which do you see first: the salad or the chips? It turns out that the order matters. When you walk in hungry, whichever option you see first is very likely to end up on your tray. As Brian Wansink has shown, conference-goers fill up 68 per cent of their plates with the first three items they come across, regardless of whether the items are healthy fruit or a rich cooked breakfast.2 In fact, we now know that almost every aspect of the cafeteria affects what and how much you eat, from the menu, to the plate size, to the size of the serving implements, to whether or not there are trays.

Even with personalised defaults, there remain tricky questions about who sets these defaults, and we’ll return to this question presently. Effective communication versus propaganda A lot of what BIT does, along with other similar units emerging across the world, concerns communication, at least in a broader sense. A lot of the issues we are asked to work on are about informing, encouraging and persuading. In this sense, the choice architecture is left unchanged, but the focus is on making one action feel more, or less, attractive than another. Indeed, occasionally overseas visitors look at what we do and say, ‘Isn’t this just comms?’ Some of it is clearly about ‘comms’, though we’d like to think that we’re a bit more scientific and rigorous about it than your average ad agency. To recall the phrase from that master of persuasion Robert Cialdini, from the session he did in the State Dining Room at No. 10 in 2006: ‘It’s about effective communication.’


pages: 336 words: 113,519

The Undoing Project: A Friendship That Changed Our Minds by Michael Lewis


Albert Einstein, availability heuristic, Cass Sunstein, choice architecture, complexity theory, Daniel Kahneman / Amos Tversky, Donald Trump, Douglas Hofstadter, endowment effect, feminist movement, framing effect, hindsight bias, John von Neumann, loss aversion, medical residency, Menlo Park, Murray Gell-Mann, Nate Silver, New Journalism, Richard Thaler, Saturday Night Live, statistical model, Walter Mischel, Yom Kippur War

Sunstein was particularly interested in what was now being called “choice architecture.” The decisions people made were driven by the way they were presented. People didn’t simply know what they wanted; they took cues from their environment. They constructed their preferences. And they followed paths of least resistance, even when they paid a heavy price for it. Millions of U.S. corporate and government employees had woken up one day during the 2000s and found they no longer needed to enroll themselves in retirement plans but instead were automatically enrolled. They probably never noticed the change. But that alone caused the participation in retirement plans to rise by roughly 30 percentage points. Such was the power of choice architecture. One tweak to the society’s choice architecture made by Sunstein, once he’d gone to work in the U.S. government, was to smooth the path between homeless children and free school meals.


pages: 543 words: 147,357

Them And Us: Politics, Greed And Inequality - Why We Need A Fair Society by Will Hutton


Andrei Shleifer, asset-backed security, bank run, banking crisis, Benoit Mandelbrot, Berlin Wall, Bernie Madoff, Big bang: deregulation of the City of London, Bretton Woods, capital controls, carbon footprint, Carmen Reinhart, Cass Sunstein, centre right, choice architecture, cloud computing, collective bargaining, conceptual framework, Corn Laws, corporate governance, credit crunch, Credit Default Swap, debt deflation, decarbonisation, Deng Xiaoping, discovery of DNA, discovery of the americas, discrete time, diversification, double helix, Edward Glaeser, financial deregulation, financial innovation, financial intermediation, first-past-the-post, floating exchange rates, Francis Fukuyama: the end of history, Frank Levy and Richard Murnane: The New Division of Labor, full employment, George Akerlof, Gini coefficient, global supply chain, Growth in a Time of Debt, Hyman Minsky, I think there is a world market for maybe five computers, income inequality, inflation targeting, interest rate swap, invisible hand, Isaac Newton, James Dyson, James Watt: steam engine, joint-stock company, Joseph Schumpeter, Kenneth Rogoff, knowledge economy, knowledge worker, labour market flexibility, Long Term Capital Management, Louis Pasteur, low-wage service sector, mandelbrot fractal, margin call, market fundamentalism, Martin Wolf, means of production, Mikhail Gorbachev, millennium bug, moral hazard, mortgage debt, new economy, Northern Rock, offshore financial centre, open economy, Plutocrats, plutocrats, price discrimination, private sector deleveraging, purchasing power parity, quantitative easing, race to the bottom, railway mania, random walk, rent-seeking, reserve currency, Richard Thaler, rising living standards, Robert Shiller, Robert Shiller, Ronald Reagan, Rory Sutherland, shareholder value, short selling, Silicon Valley, Skype, South Sea Bubble, Steve Jobs, The Market for Lemons, the market place, The Myth of the Rational Market, the payments system, the scientific method, The Wealth of Nations by Adam Smith, too big to fail, unpaid internship, value at risk, Washington Consensus, working poor, éminence grise

In any case more feedback about our decision is so opaque that pinning down precisely what went wrong is like finding a needle in a haystack.16 This severely weakens the theorems that suggest that markets are naturally self-organising with an embedded tendency to reach optimal outcomes. But it opens up a more realistic world of imperfect decision-making that can be improved by smart interventions if we choose. The task becomes creation – usually by the government – of a ‘choice architecture’ that respects choice but guides individuals to exercise it rationally. The answer to individuals being myopic about saving, for example, is to set up schemes into which they are automatically contracted but from which they are free to exit, if they so choose. Nor is it just a question of providing information to buyers and sellers; it must be provided in a digestible, assimilable and understandable way.

There is a need to distinguish between biases insofar as the policy responses to the underlying explanations for behaviour point in very different directions. 16 John Sterman (2000) Business Dynamics: Systems Thinking and Modeling for a Complex World, Irwin McGraw-Hill. 17 Richard Thaler and Cass Sunstein (2008) Nudge: Improving Decisions about Health, Wealth and Happiness, Yale University Press, esp. Part V. See also Jack Fuller (2009) ‘Heads, You Die: Bad Decisions, Choice Architecture, and How to Mitigate Predictable Irrationality’, Per Capita, at 18 Friedrich Hayek (1945) ‘The Use of Knowledge in Society’, American Economic Review 34 (4): 519–30, at hykKnw1.html. 19 Herbert Hart (1997) The Concept of Law, Oxford University Press. 20 HM Treasury (2007) ‘The Race to the Top: A Review of Government’s Science and Innovation Policies’, HMSO. 21 Yannis Pierrakis and Stian Westlake (2009) ‘Reshaping the UK Economy: The Role of Public Investment in Financing Growth’, report, Nesta. 22 Ibid. 23 John R.

., 64, 65 Rowthorn, Robert, 292, 363 Royal Bank of Scotland (RBS), 25, 150, 152, 157, 173, 181, 199, 251, 259; collapse of, 7, 137, 150, 158, 175–6, 202, 203, 204; Sir Fred Goodwin and, 7, 150, 176, 340 Rubin, Robert, 174, 177, 183 rule of law, x, 4, 220, 235 Russell, Bertrand, 189 Russia, 127, 134–5, 169, 201, 354–5, 385; fall of communism, 135, 140; oligarchs, 30, 65, 135 Rwandan genocide, 71 Ryanair, 233 sailing ships, three-masted, 108 Sandbrook, Dominic, 22 Sands, Peter (CEO of Standard Chartered Bank), 26 Sarkozy, Nicolas, 51, 377 Sassoon, Sir James, 178 Scholes, Myron, 169, 191, 193 Schumpeter, Joseph, 62, 67, 111 science and technology: capitalist dynamism and, 27–8, 31, 112–13; digitalisation, 34, 231, 320, 349, 350; the Enlightenment and, 31, 108–9, 112–13, 116–17, 121, 126–7; general-purpose technologies (GPTs), 107–11, 112, 117, 126–7, 134, 228–9, 256, 261, 384; increased pace of advance, 228–9, 253, 297; nanotechnology, 232; New Labour improvements, 21; new opportunities and, 33–4, 228–9, 231–3; new technologies, 232, 233, 240; universities and, 261–5 Scotland, devolving of power to, 15, 334 Scott, James, 114–15 Scott Bader, 93 Scott Trust, 327 Second World War, 134, 313 Securities and Exchanges Commission, 151, 167–8 securitisation, 32, 147, 165, 169, 171, 186, 187, 196 self-determination, 85–6 self-employment, 86 self-interest, 59, 60, 78 Sen, Amartya, 51, 232, 275 service sector, 8, 291, 341, 355 shadow banking system, 148, 153, 157–8, 170, 171, 172, 187 Shakespeare, William, 39, 274, 351 shareholders, 156, 197, 216–17, 240–4, 250 Sher, George, 46, 50, 51 Sherman Act (USA, 1890), 133 Sherraden, Michael, 301 Shiller, Robert, 43, 298, 299 Shimer, Robert, 299 Shleifer, Andrei, 62, 63, 92 short selling, 103 Sicilian mafia, 101, 105 Simon, Herbert, 222 Simpson, George, 142–3 single mothers, 17, 53, 287 sixth form education, 306 Sky (broadcasting company), 30, 318, 330, 389 Skype, 253 Slim, Carlos, 30 Sloan School of Management, 195 Slumdog Millionaire, 283 Smith, Adam, 55, 84, 104, 112, 121, 122, 126, 145–6 Smith, John, 148 Snoddy, Ray, 322 Snow, John, 177 social capital, 88–9, 92 social class, 78, 130, 230, 304, 343, 388; childcare and, 278, 288–90; continued importance of, 271, 283–96; decline of class-based politics, 341; education and, 13, 17, 223, 264–5, 272–3, 274, 276, 292–5, 304, 308; historical development of, 56–8, 109, 115–16, 122, 123–5, 127–8, 199; New Labour and, 271, 277–9; working-class opinion, 16, 143 social investment, 10, 19, 20–1, 279, 280–1 social polarisation, 9–16, 34–5, 223, 271–4, 282–5, 286–97, 342; Conservative reforms (1979-97) and, 275–6; New Labour and, 277–9; private education and, 13, 223, 264–5, 272–3, 276, 283–4, 293–5, 304; required reforms for reduction of, 297–309 social security benefits, 277, 278, 299–301, 328; contributory, 63, 81, 283; flexicurity social system, 299–301, 304, 374; to immigrants, 81–2, 282, 283, 284; job seeker’s allowance, 81, 281, 298, 301; New Labour and ‘undeserving’ claimants, 143, 277–8; non-contributory, 63, 79, 81, 82; targeting of/two-tier system, 277, 281 socialism, 22, 32, 38, 75, 138, 144, 145, 394 Soham murder case, 10, 339 Solomon Brothers, 173 Sony, 254–5 Soros, George, 166 Sorrell, Martin, 349 Soskice, David, 342–3 South Korea, 168, 358–9 South Sea Bubble, 125–6 Spain, 123–4, 207, 358–9, 371, 377 Spamann, Holger, 198 special purpose vehicles, 181 Spitzer, Matthew, 60 sport, cheating in, 23 stakeholder capitalism, x, 148–9 Standard Oil, 130–1, 132 state, British: anti-statism, 20, 22, 233–4, 235, 311; big finance’s penetration of, 176, 178–80; ‘choice architecture’ and, 238, 252; desired level of involvement, 234–5; domination of by media, 14, 16, 221, 338, 339, 343; facilitation of fairness, ix–x, 391–2, 394–5; investment in knowledge, 28, 31, 40, 220, 235, 261, 265; need for government as employer of last resort, 300; need for hybrid financial system, 244, 249–52; need for intervention in markets, 219–22, 229–30, 235–9, 252, 392; need for reshaping of, 34; pluralism, x, 35, 99, 113, 233, 331, 350, 394; public ownership, 32, 240; target-setting in, 91–2; threats to civil liberty and, 340 steam engine, 110, 126 Steinmueller, W.


pages: 324 words: 92,805

The Impulse Society: America in the Age of Instant Gratification by Paul Roberts


2013 Report for America's Infrastructure - American Society of Civil Engineers - 19 March 2013, 3D printing, accounting loophole / creative accounting, Affordable Care Act / Obamacare, American Society of Civil Engineers: Report Card, asset allocation, business process, Cass Sunstein, centre right, choice architecture, collateralized debt obligation, collective bargaining, corporate governance, corporate social responsibility, crony capitalism, David Brooks, delayed gratification, double helix, factory automation, financial deregulation, financial innovation, full employment, game design, greed is good, If something cannot go on forever, it will stop, impulse control, income inequality, inflation targeting, invisible hand, job automation, Joseph Schumpeter, knowledge worker, late fees, Long Term Capital Management, loss aversion, low skilled workers, new economy, Nicholas Carr, obamacare, Occupy movement, oil shale / tar sands, performance metric, postindustrial economy, profit maximization, Report Card for America’s Infrastructure, reshoring, Richard Thaler, rising living standards, Robert Shiller, Robert Shiller, Rodney Brooks, Ronald Reagan, shareholder value, Silicon Valley, speech recognition, Steve Jobs, technoutopianism, the built environment, The Predators' Ball, the scientific method, The Wealth of Nations by Adam Smith, Thorstein Veblen, too big to fail, total factor productivity, Tyler Cowen: Great Stagnation, Walter Mischel, winner-take-all economy

Walter Mischel, the researcher behind the famous “marshmallow study” from the 1970s, has developed effective strategies to train impatient children to be patient—an important success, given that impatient children have a high likelihood of growing up to be impatient adults.14 There are other potentially fruitful ventures, such as what Richard Thaler (of the two-self model) and coauthor Cass Sunstein call “choice architecture.” The term refers to carefully designed technologies, infrastructure, and other pieces of the built environment that subtly “nudge” us to act with more patience and long-term thought. An example: smartphone apps that automatically track our daily expenses and warn us when we’re exceeding our budget. But such efforts are swimming upstream against a current of world-historic proportions. Consider our political culture, which more and more encourages a rapid, visceral response to policy or events.

(As Yippie activist Jerry Rubin boasted in 1970, “Whenever we see a rule we must break it. Only by breaking rules do we discover who we are.”15) Or consider the growing research showing that myopia and short-termism actually increase when we’re uncertain about the future—something our new economic model seems to have made more likely. Further, some of the most troubling myopia occurs not at the consumer level, where “choice architecture” or nudges might have some positive effect, but at the institutional level, in government and especially in business. In many industries, today’s senior managers wield an increasingly impressive set of tools, technologies, and other capabilities that can deliver ever-faster returns. Yet not only do these managers face the same inclination to discount future costs, but they also operate in a corporate culture that itself is increasingly limbic and shortsighted.


pages: 606 words: 157,120

To Save Everything, Click Here: The Folly of Technological Solutionism by Evgeny Morozov


3D printing, algorithmic trading, Amazon Mechanical Turk, Andrew Keen, augmented reality, Automated Insights, Berlin Wall, big data - Walmart - Pop Tarts, Buckminster Fuller, call centre, carbon footprint, Cass Sunstein, choice architecture, citizen journalism, cloud computing, cognitive bias, crowdsourcing, data acquisition, Dava Sobel, disintermediation, East Village,, Fall of the Berlin Wall, Filter Bubble, Firefox, Francis Fukuyama: the end of history, frictionless, future of journalism, game design, Gary Taubes, Google Glasses, illegal immigration, income inequality, invention of the printing press, Jane Jacobs, Jean Tirole, Jeff Bezos, jimmy wales, Julian Assange, Kevin Kelly, Kickstarter, license plate recognition, lone genius, Louis Pasteur, Mark Zuckerberg, market fundamentalism, Marshall McLuhan, Narrative Science, Nicholas Carr, packet switching, PageRank, Paul Graham, Peter Singer: altruism, Peter Thiel,, placebo effect, pre–internet, Ray Kurzweil, recommendation engine, Richard Thaler, Ronald Coase, Rosa Parks, self-driving car, Silicon Valley, Silicon Valley ideology, Silicon Valley startup, Skype, Slavoj Žižek, smart meter, social graph, social web, stakhanovite, Steve Jobs, Steven Levy, Stuxnet, technoutopianism, the built environment, The Chicago School, The Death and Life of Great American Cities, the medium is the message, The Nature of the Firm, the scientific method, The Wisdom of Crowds, Thomas Kuhn: the structure of scientific revolutions, Thomas L Friedman, transaction costs, urban decay, urban planning, urban sprawl, Vannevar Bush, WikiLeaks

This last set of assumptions accounts for the proliferation of what Cass Sunstein and Richard Thaler call “nudges”: clever manipulations of default settings—what the authors call “choice architecture”—to get you to eat healthy foods or save money for retirement. Nudging is to manipulation what public relations is to advertising: it gets things done while making all the background tinkering implicit and invisible. The most effective nudges give agents a semblance of agency without giving them much choice. Brownsword sees two problems with nudges. They appear to belong firmly in the prudential register; by tinkering with our “choice architecture,” regulators try to appeal to our self-interest. But in a truly democratic society, the choice of the appropriate register, as well as shifts across them, should be subject to public debate and scrutiny as well.


pages: 291 words: 81,703

Average Is Over: Powering America Beyond the Age of the Great Stagnation by Tyler Cowen


Amazon Mechanical Turk, Black Swan, brain emulation, Brownian motion, Cass Sunstein, choice architecture, complexity theory, computer age, computer vision, cosmological constant, crowdsourcing, dark matter, David Brooks, David Ricardo: comparative advantage, deliberate practice, Drosophila,, endowment effect, epigenetics, Erik Brynjolfsson, eurozone crisis, experimental economics, Flynn Effect, Freestyle chess, full employment, future of work, game design, income inequality, industrial robot, informal economy, Isaac Newton, Khan Academy, labor-force participation, Loebner Prize, low skilled workers, manufacturing employment, Mark Zuckerberg, meta analysis, meta-analysis, microcredit, Narrative Science, Netflix Prize, Nicholas Carr, pattern recognition, Peter Thiel, randomized controlled trial, Ray Kurzweil, reshoring, Richard Florida, Richard Thaler, Ronald Reagan, Silicon Valley, Skype, statistical model, stem cell, Steve Jobs, Turing test, Tyler Cowen: Great Stagnation, upwardly mobile, Yogi Berra

Haven’t thousands of articles from psychology and behavioral economics outlined major weaknesses in human perception and decision-making abilities? There are the works of Daniel Kahneman, Dan Ariely, and many others. Haven’t we all heard about “nudge,” the concept so eloquently outlined by Cass Sunstein and Richard Thaler? In that worldview, experts know the biases of other decision makers and design the choice architecture to manipulate better human choices, such as changing the default options for which pension plan you will enroll in. Yes, but the chess result differs. Computer chess is pointing out some imperfections in the world’s experts, or you might say it is pointing out imperfections in those who, in other contexts, might be nudgers themselves. Human intuitions can misfire even when we study the world’s best players, who’ve each been trained for decades to think rationally and compete for high stakes while drawing upon centuries of human experience with the game.


pages: 654 words: 191,864

Thinking, Fast and Slow by Daniel Kahneman


Albert Einstein, Atul Gawande, availability heuristic, Black Swan, Cass Sunstein, Checklist Manifesto, choice architecture, cognitive bias, complexity theory, correlation coefficient, correlation does not imply causation, Daniel Kahneman / Amos Tversky, delayed gratification, demand response, endowment effect, experimental economics, experimental subject, Exxon Valdez, feminist movement, framing effect, hindsight bias, index card, job satisfaction, John von Neumann, libertarian paternalism, loss aversion, medical residency, mental accounting, meta analysis, meta-analysis, nudge unit, pattern recognition, pre–internet, price anchoring, quantitative trading / quantitative finance, random walk, Richard Thaler, risk tolerance, Ronald Reagan, The Chicago School, The Wisdom of Crowds, transaction costs, union organizing, Walter Mischel, Yom Kippur War

Thaler and Sunstein advocate a position of libertarian paternalism, in which the state and other institutions are allowed to nudge people to make decisions that serve their own long-term interests. The designation of joining a pension plan as the default option is an example of a nudge. It is difficult to argue that anyone’s freedom is diminished by being automatically enrolled in the plan, when they merely have to check a box to opt out. As we saw earlier, the framing of the individual’s decision—Thaler and Sunstein call it choice architecture—has a huge effect on the outcome. The nudge is based on sound psychology, which I described earlier. The default option is naturally perceived as the normal choice. Deviating from the normal choice is an act of commission, which requires more effortful deliberation, takes on more responsibility, and is more likely to evoke regret than doing nothing. These are powerful forces that may guide the decision of someone who is otherwise unsure of what to do.

business and leadership practices; at Google business pundits Cabanac, Michel cab driver problem cabdrivers, New York City Californians Camerer, Colin cancer; surgery vs. radiation for Cantril Self-Anchoring Striving Scale Carroll, Lewis cars and driving; brakes in; driving tests; fuel economy and; pleasure from cash box categories causal base rates causal interpretations; correlation and; regression effects and causal situations causal stereotypes causes, and statistics CEOs; optimistic certainty effect CFOs Chabris, Christopher chance and randomness; misconceptions of changing one’s mind Checklist Manifesto, A (Gawande) chess children: caring for; depressed; time spent with China Choice and Consequence (Schelling) choice architecture choices: from description; from experience; see also decisions, decision making; risk assessment “Choices, Values, and Frames” (Kahneman and Tversky) CIA Clark, Andrew climate Clinical vs. Statistical Prediction: A Theoretical Analysis and a Review of the Evidence (Meehl) Clinton, Bill Coelho, Marta coffee mug experiments cognitive busyness cognitive ease; in basic assessments; and illusions of remembering; and illusions of truth; mood and; and writing persuasive messages; WYSIATI (what you see is all there is) and cognitive illusions; confusing experiences with memories; of pundits; of remembering; of skill; of stock-picking skill; of truth; of understanding; of validity Cognitive Reflection Test (CRT) cognitive strain Cohen, David coherence; see also associative coherence Cohn, Beruria coincidence coin-on-the-machine experiment cold-hand experiment Collins, Jim colonoscopies colostomy patients competence, judging of competition neglect complex vs. simple language concentration cogndiv height="0%"> “Conditions for Intuitive Expertise: A Failure to Disagree” (Kahneman and Klein) confidence; bias of, over doubt; overconfidence; WYSIATI (what you see is all there is) and confirmation bias conjunction fallacy conjunctive events, evaluation of “Consequences of Erudite Vernacular Utilized Irrespective of Necessity: Problems with Using Long Words Needlessly” (Oppenheimer) contiguity in time and place control cookie experiment correlation; causation and; illusory; regression and; shared factors and correlation coefficient cost-benefit correlation costs creativity; associative memory and credibility Csikszentmihalyi, Mihaly curriculum team Damasio, Antonio dating question Dawes, Robyn Day Reconstruction Method (DRM) death: causes of; life stories and; organ donation and; reminders of Deaton, Angus decisions, decision making; broad framing in; and choice from description; and choice from experience; emotions and vividness in; expectation principle in; in gambles, see gambles; global impressions and; hindsight bias and; narrow framing in; optimistic bias in; planning fallacy and; poverty and; premortem and; reference points in; regret and; risk and, see risk assessment decision utility decision weights; overweighting; unlikely events and; in utility theory vs. prospect theory; vivid outcomes and; vivid probabilities and decorrelated errors default options denominator neglect depression Detroit/Michigan problem Diener, Ed die roll problem dinnerware problem disclosures disease threats disgust disjunctive events, evaluation of disposition effect DNA evidence dolphins Dosi, Giovanni doubt; bias of confidence over; premortem and; suppression of Duke University Duluth, Minn., bridge in duration neglect duration weighting earthquakes eating eBay Econometrica economics; behavioral; Chicago school of; neuroeconomics; preference reversals and; rational-agent model in economic transactions, fairness in Econs and Humans Edge Edgeworth, Francis education effectiveness of search sets effort; least, law of; in self-control ego depletion electricity electric shocks emotional coherence, see halo effect emotional learning emotions and mood: activities and; affect heuristic; availability biases and; in basic assessments; cognitive ease and; in decision making; in framing; mood heuristic for happiness; negative, measuring; and outcomes produced by action vs. inaction; paraplegics and; perception of; substitution of question on; in vivid outcomes; in vivid probabilities; weather and; work and employers, fairness rules and endangered species endowment effect; and thinking like a trader energy, mental engagement Enquiry Concerning Human Understanding, An (Hume) entrepreneurs; competition neglect by Epley, Nick Epstein, Seymour equal-weighting schemes Erev, Ido evaluability hypothesis evaluations: joint; joint vs. single; single evidence: one-sided; of witnesses executive control expectation principle expectations expected utility theory, see utility theory experienced utility experience sampling experiencing self; well-being of; see also well-being expert intuition; evaluating; illusions of validity of; overconfidence and; as recognition; risk assessment and; vs. statistical predictions; trust in expertise, see skill Expert Political Judgment: How Good Is It?


pages: 1,758 words: 342,766

Code Complete (Developer Best Practices) by Steve McConnell


Ada Lovelace, Albert Einstein, Buckminster Fuller, call centre, choice architecture, continuous integration, data acquisition, database schema, fault tolerance, Grace Hopper, haute cuisine, if you see hoof prints, think horses—not zebras, index card, inventory management, iterative process, late fees, loose coupling, Menlo Park, place-making, premature optimization, revision control, slashdot, sorting algorithm, statistical model, Tacoma Narrows Bridge, the scientific method, Thomas Kuhn: the structure of scientific revolutions, Turing machine, web application

. // [See documentation, comments] abbreviations in algorithms argument against authorship bad code, on blank lines around Book Paradigm for categories of checklists 2nd classes coded meanings control structures 2nd declarations with 2nd 3rd descriptions of code intent distance to code guideline efficient creation of endline comments errors, marking workarounds explanatory files flags, bit level global variables 2nd indentation guidelines individual lines with input data 2nd integrating into development interfaces, class interfaces, routine Javadoc 2nd key points layout guidelines legal notices length of descriptions level of code intent loops maintenance of 2nd 3rd major vs. minor markers non-code essential information numerical data optimum density of output data paragraphs of code with 2nd parameter declarations parts of programs performance considerations preceding code rule proportionality of pseudocode, deriving from 2nd 3rd purpose of repeating code with resources on routines with 2nd self-commenting code Socratic dialog about standards, IEEE style differences, managing style violations summaries of code surprises tricky code 2nd undocumented features variables version control why vs. how workarounds commitment delay strategy communication skills, importance of communicational cohesion communications, development team comparisons floating-point equality mixed data types compilers binding during compilation [See executable-code tools, compilers] broken builds data type warnings debugging tools, as 2nd errors, finding in routines line numbers, debugging with messages, treatment of 2nd multiple error messages optimizations by performance tuning considerations project-wide standards for speeds from optimization, table of tools for tricky code optimization validators with warnings 2nd completeness of requirements checklist complex data types complexity abstraction for handling classes for reducing coding conventions for reducing control structure contributions to conventions for managing decision points, counting importance of isolation, classes for live time management 2nd McCabe's metric mental objects held, measure of methods for handling minimization goal patterns, reducing with problem domain, working at reliability correlated with routines for reducing size of projects, effect on span component testing components, buying 2nd Composite pattern compound boundaries compound statements computed-value qualifiers of variable names computer-aided software engineering (CASE) tools conditional statements boolean function calls with [See control structures, conditional flow] boolean variables recommended chained if-then-else statements checklist common cases first guideline comparing performance of covering all cases defined eliminating testing redundancy else clauses equality, branching on error processing examples frequency, testing in order of key points lookup tables, substituting normal case first guideline normal path first guideline null if clauses plain if-then statements refactoring short-circuit evaluation confessional debugging configuration management architectural anticipation of change [See managing construction, change control; managing construction, configuration management] backup plans 2nd boards, change-control bureaucratic considerations checklist code changes cost, estimating defined design changes estimating change costs grouping change requests high change volumes identifying areas of change machine configurations, reproducing purpose of requirements changes 2nd 3rd resources on SCM tool version control version-control software const keyword, C++ 2nd 3rd 4th 5th constants checklist consistency rule declarations using defined emulation by global variables initializing literals, avoiding with naming 2nd 3rd purpose of refactoring simulating in languages lacking construction guidelines percent of total activity, by size of project resources on construction decisions checklist of major construction practices [See construction, decisions] coding practices checklist early-wave environments key points for major construction practices, selecting mature technology environments programming conventions programming into languages quality assurance checklist teamwork checklist technology waves, determining your location in tools checklist construction schedules, estimating approaches to, list of [See construction, schedules, estimating] catching up from behind controlling vs. estimating factors influencing level of detail for multiple techniques with comparisons objectives, establishing optimism overview planning estimation time reduction of scope reestimating requirements specification resources for teams, expanding constructors deep vs. shallow copies exceptions with guidelines for initializing data members refactoring singleton property, enforcing container classes containment 2nd continuation lines continue statements 2nd 3rd continuous integration control structures checklists 2nd 3rd commenting 2nd complexity, contributions to compound statements continuation lines in data types, relationship to documentation double indented begin-end pairs iteration 2nd key points layout styles multiple returns from routines null statements reliability correlated with complexity selective data with sequential data with structured programming unindented begin-end pairs unusual, overview of conventions, coding benefits of [See coding, conventions] checklist hazards, avoiding with predictability benefit converting data types cooperation skills, importance of correctness 2nd costs change estimates collaboration benefits debugging, time consumed by defects contributing to detection of defects error-prone routines estimating 2nd fixing of defects 2nd General Principle of Software Quality 2nd pair programming vs. inspections resources on counted loops coupling base classes to derived classes classes, too tightly design considerations flexibility of goals of loose 2nd object-parameter type semantic type simple-data-parameter type simple-object type size of visibility of coverage monitoring tools structured basis testing CRC (Class, Responsibility, Collaboration) cards creativity, importance of 2nd cross-reference tools curiosity, role in character Currency data types customization, building metaphor for Index [SYMBOL] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W] daily build and smoke tests automation of benefits of broken builds 2nd build groups checklist defined diagnosis benefit holding area for additions importance of morning releases pressure pretest requirement revisions smoke tests unsurfaced work data architecture prerequisites bad classes, testing for change, identifying areas of combined states defined state defined-used paths, testing design entered state exited state good classes, testing killed state legacy, compatibility with nominal case errors test, generators for used state data dictionaries data flow testing data literacy test data recorder tools data structures data transformations for code tuning array dimension minimization [See data, code tuning] array reference minimization caching data floating point to integers indexing data purpose of data types "a" prefix convention [See data, types; variables, types of] BCD change, identifying areas of checklist control structures, relationship to Currency definitions iterative data key points for naming 2nd 3rd overloaded primitives refactoring to classes 2nd resources on selective data sequential data t_ prefix convention variables of, differentiating from data-level refactoring 2nd databases performance issues SQL subsystem design days-in-month, determining deallocation goto statements for pointers, of 2nd 3rd Debug.Assert statements debugging binary searches of code [See defects in code, fixing; tools, debugging] blindness, sources of breakpoints breaks, taking brute-force changes, recent checklist comments, misplaced common defects lists compilers as tools for 2nd confessional debugging costs of 2nd debugger tools 2nd 3rd 4th [See also debugging aids] defects as opportunities defined Diff tool execution profilers for expanding suspicious regions experience of programmers, effects of finding defects 2nd fixing defects guessing history of hypothesis testing 2nd incremental approach ineffective approach to key points line numbers from compilers lint tool listing possibilities locating error sources logic checking tools multiple compiler messages narrowing code searches obvious fixes performance variations project-wide compilers settings psychological considerations quality of software, role in quotation marks, misplaced readability improvements recommended approach reexamining defect-prone code resources for Satan's helpers scaffolding for scientific method of self-knowledge from source-code comparators stabilizing errors superstitious approaches symbolic debuggers syntax checking 2nd 3rd system debuggers test case creation testing, compared to time for, setting maximums tools for 2nd 3rd 4th [See also debugging aids] understanding the problems unit tests varying test cases warnings, treating as errors debugging aids C++ preprocessors [See debugging, aids to; debugging, defensive] case statements early introduction recommended offensive programming planning removal of pointers, checking preprocessors production constraints in development versions purpose of stubs version control tools decision tables declarations 2nd 3rd [See variables, declaring] const recommended declare and define near first use rule define near first use rule final recommended formatting implicit declarations multiple on one line numerical data, commenting order of placement of pointers 2nd using all declared Decorator pattern defects in code classes prone to error [See errors, coding] classifications of clerical errors (typos) Code Complete example construction, proportion resulting from cost of detection cost of fixing databases of detection by various techniques, table of distribution of ease of fixing defects error checklists expected rate of finding, checklist intermittent misunderstood designs as sources for opportunities presented by outside of construction domain percentage of, measurement performance issues programmers at fault for readability improvements refactoring after fixing scope of self-knowledge from size of projects, effects on sources of, table stabilizing defensive programming assertions assumptions to check, list of barricades checklist debugging aids defined error handling for exceptions 2nd friendly messages guideline graceful crashing guideline guidelines for production code hard crash errors guideline important errors guideline key points for logging guideline problems caused by quality improvement techniques, other robustness vs. correctness security issues trivial errors guideline validating input defined data state defining variables Delphi, recoding to assembler DeMorgan's Theorems, applying dependencies, code-ordering checker tools [See sequences, code, order of] circular clarifying concept of documentation error checking hidden initialization order naming routines non-obvious organization of code parameters, effective design abstractions, forming consistent accidental problems BDUF beauty bottom-up approach to design business logic subsystem capturing work central points of control change, identifying areas of changes, management of characteristics of high quality checklists 2nd classes, division into collaboration communications among subsystems completion of, determining complexity management construction activity, as contract, by coupling considerations database access subsystem defined diagrams, drawing discussion, summarizing divide and conquer technique documentation overkill documentation, as emergent nature of encapsulation enough, determining essential problems extensibility goal formality of, determining formalizing class contracts goals checklist good practices table for hierarchies for high fan-in goal IEEE standards information hiding 2nd inheritance iteration practice key points leanness goal level of detail needed levels of loose coupling goal low-to-medium fan-out goal maintenance goals mental limitations of humans metrics, warning signs from nondeterministic nature of 2nd object-oriented, resource for objects, real world, finding packages level performance tuning considerations portability goal practices 2nd prioritizing during prototyping resources for restrictive nature of reusability goal routines, of sloppy process nature of software system level standard techniques goal standards, IEEE stratification goal strong cohesion subsystem level system dependencies subsystem testing for implementation tools for top-down approach tradeoffs UML diagrams user interface subsystem visual documentation of wicked problem nature of Wikis, capturing on destructors, exceptions with detailed-design documents developer testing development processes development standards, IEEE diagrams heuristic design use of UML Diff tools 2nd direct access tables advantages of [See table-driven methods, direct access] arrays for case statement approach days-in-month example defined design method for flexible-message-format example fudging keys for insurance rates example keys for object approach transforming keys disassemblers discipline, importance of discourse rules disposing of objects divide and conquer technique division Do loops [See also loops] documentation abbreviation of names ADTs for bad code, of Book Paradigm for capturing work checklists 2nd classes control structures CRC cards for dependencies, clarifying design as 2nd detailed-design documents external Javadoc 2nd key points names as 2nd 3rd organization of data parameter assumptions pseudocode, deriving from resources on routine parameter assumptions routines SDFs self-documenting code size of projects, effects of source code as standards, IEEE style differences, managing UDFs visual, of designs why vs. how dog tag fields dog-and-pony shows DoNothing() macros DRY (Don't Repeat Yourself) principle duplication avoiding with routines code as refactoring indicator Index [SYMBOL] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W] early-wave environments ease of maintenance design goal eclecticism editing tools beautifiers [See tools, editing] class-hierarchy generators cross-reference tools Diff tools grep IDEs interface documentation merge tools multiple-file string searches templates efficiency eighty/twenty (80/20) rule else clauses boolean function calls with case statements instead of chains, in common cases first guideline correctness testing default for covering all cases gotos with null embedded life-critical systems emergent nature of design process emulated pure blocks layout style encapsulation assumptions about users checklist classes, role for coupling classes too tightly downcast objects friend class concern heuristic design with minimizing accessibility private details in class interfaces public data members public members of classes public routines in interfaces concern semantic violations of weak endless loops 2nd endline comments endline layout 2nd 3rd enumerated types benefits of [See data types, enumerated types] booleans, alternative to C++ 2nd changes benefit checklist comments substituting for creating for Java defined emulation by global variables explicit value pitfalls first entry invalid trick iterating through Java, creating for languages available in loop limits with naming 2nd 3rd parameters using readability from reliability benefit standard for validation with Visual Basic equality, floating-point equivalence partitioning error codes error detection, doing early error guessing error handling architecture prerequisites [See errors, handling] assertions, compared to barricades buffer overruns compromising closest legal value defensive programming, techniques for error codes, returning error-processing routines, calling high-level design implication local handling logging warning messages messages 2nd 3rd next valid data, returning previous answers, reusing propagation design refactoring returning neutral values robustness 2nd routines, designing along with shutting down validation design error messages codes, returning design displaying friendly messages guideline errors 2nd classifications of dog tag fields goto statements for processing sources of, table essential problems estimating schedules approaches to, list of change costs control, compared to factors influencing inaccuracy, character-based level of detail for multiple techniques with comparisons objectives, establishing optimism overview planning for estimation time redoing periodically reduction of scope requirements specification resources for teams, expanding event handlers evolution Evolutionary Delivery exceptions [See errors, exceptions] abstraction issues alternatives to base classes for, project specific C++ centralized reporters constructors with defensive programming checklist destructors with empty catch blocks rule encapsulation, breaking full information rule Java languages, table comparing level of abstraction rule library code generation of local handling rule non-exceptional conditions purpose of 2nd readability of code using refactoring resources for standardizing use of Visual Basic 2nd executable-code tools build tools code libraries code-generation wizards installation tools linkers preprocessors setup tools execution profilers 2nd Exit Function [See also return statements] Exit statements Exit Sub [See also return statements] exiting loops 2nd experience, personal experimental prototyping experimentation as learning 2nd exponential expressions expressions constants, data types for initializing at compile time layout guidelines precomputing results right shifting strength reduction subexpression elimination system calls, performance of extensibility design goal external audits external documentation Extreme Programming collaboration component of defect detection defined resources on 2nd Index [SYMBOL] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W] Facade pattern factorials factoring [See also refactoring] factory methods Factory Method pattern nested ifs refactoring example refactoring to fan-in fan-out farming metaphor fault tolerance feature-oriented integration Fibonacci numbers files ADTs, treating as authorship records for C++ source file order deleting multiple example documenting layout within naming 2nd routines in final keyword, Java finally statements fixing defects checking fixes [See defects in code, fixing] checklist diagnosis confirmation hurrying, impact of initialization defects maintenance issues one change at a time rule reasoning for changes saving unfixed code similar defects, looking for special cases symptoms, fixing instead of problems understand first guideline unit tests for flags change, identifying areas of comments for bit-level meanings enumerated types for gotos, rewriting with names for semantic coupling with flexibility coupling criteria for defined floating-point data types accuracy limitations [See data types, floating-point] BCD checklist costs of operations equality comparisons magnitudes, greatly different, operations with rounding errors Visual Basic types for loops advantages of formatting 2nd indexes purpose of foreach loops 2nd formal inspections author role [See collaboration, formal inspections; collaboration, inspections; defects in code, formal inspections for detecting] benefit summary blame game checklist CMM Code Complete example compared to other collaboration defined egos in error checklists expected results from fine-tuning follow-up stage inspection meetings key points management role moderator role overview stage performance appraisals from planning stage preparation stage procedure for rate of code review reports resources for reviewer role reviews, compared to rework stage roles in scenarios approach scribe role stages of three-hour solutions meeting formal technical reviews formatting code Fortran functional cohesion functional specification functions calculations converted to example [See classes, functions in] defined disallowing key point for naming conventions for 2nd private, overriding return values, setting status as return value when to use Fundamental Theorem of Formatting Index [SYMBOL] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W] General Principle of Software Quality collaboration effects costs debugging defined global variables aliasing problems with [See variables, global] alternatives to annotating changes to, inadvertent checklist for class variable alternatives code reuse problems commenting 2nd enumerated types emulation by g_ prefix guideline hiding implementation in classes information hiding problems with initialization problems intermediate results, avoiding key points local first guideline locking modularity damaged by named constants emulation by naming 2nd 3rd 4th 5th 6th objects for, monster overview of persistence of preservation of values with re-entrant code problems refactoring risk reduction strategies routines using as parameters semantic coupling with streamlining data use with tramp data, eliminating with god classes gonzo programming good data, testing goto statements Ada, inclusion in [See control structures, gotos] advantages of alternatives compared with checklist deallocation with disadvantages of duplicate code, eliminating with else clauses with error processing with Fortran's use of forward direction guideline guidelines indentation problem with key points layout guidelines legitimate uses of optimization problem with phony debating about readability issue resources for rewritten with nested ifs rewritten with status variables rewritten with try-finally trivial rewrite example unused labels graphical design tools grep growing a system metaphor GUIs (graphical user interfaces) architecture prerequisites refactoring data from subsystem design Index [SYMBOL] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W] habits of programmers hacking approach to design hardware dependencies, changing performance enhancement with has a relationships heuristic design abstractions, forming consistent [See design, heuristic; design, practice heuristics; heuristics, design with] alternatives from patterns avoiding failure binding time considerations bottom-up approach to design brute force capturing work central points of control change, identifying areas of checklist for collaboration communications benefit from patterns completion of, determining coupling considerations diagrams, drawing divide and conquer technique encapsulation error reduction with patterns formality of, determining formalizing class contracts goals checklist guidelines for using hierarchies for information hiding 2nd inheritance interfaces, formalizing as contracts iteration practice key points level of detail needed modularity multiple approach suggestion nature of design process nondeterministic basis for object-oriented, resource for objects, real world, finding patterns 2nd practices 2nd prototyping resources for responsibilities, assigning to objects strong cohesion summary list of rules testing, anticipating top-down approach 2nd heuristics algorithms compared to error guessing hiding hierarchies, benefits of high fan-in design goal human aspects of software development humility, role in character 2nd 3rd Hungarian naming convention hybrid coupling of variables Index [SYMBOL] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W] I/O (input/output) architecture prerequisites change, identifying areas of performance considerations IDEs (Integrated Development Environments) IEEE (Institute for Electric and Electrical Engineers) if statements boolean function calls with [See conditional statements, if statements; control structures, if statements] break blocks, simplification with case statements, compared to 2nd case statements, converting to 2nd chains of checklist common cases first guideline continuation lines in covering all cases else clauses 2nd equality, branching on error processing examples factoring to routines flipped frequency, testing in order of gotos rewritten with 2nd if-then-else statements, converting to key points lookup tables, substituting multiple returns nested in negatives in, making positive normal case first guideline normal path first guideline null if clauses plain if-then statements refactoring simplification single-statement layout tables, replacing with types of implicit declarations implicit instancing in keyword, creating incomplete preparation, causes of incremental development metaphor incremental integration benefits of [See integration, incremental] bottom-up strategy classes 2nd customer relations benefit defined disadvantages of top-down strategy errors, locating feature-oriented integration interface specification 2nd progress monitoring benefit resources on results, early risk-oriented integration sandwich strategy scheduling benefits slices approach steps in strategies for, overview stubs 2nd summary of approaches T-shaped integration test drivers top-down strategy for vertical-slice approach indentation 2nd indexed access tables 2nd indexes, loop alterations checklist enumerated types for final values scope of variable names indexes, supplementing data types with infinite loops 2nd informal reviews 2nd information hiding access routines for [See object-oriented programming, hiding information] ADTs for barriers to categories of secrets circular dependencies problem class data mistaken for global data class design considerations class implementation details example excessive distribution problem importance of interfaces, class performance issues privacy rights of classes resources for secrets concept type creation for inheritance access privileges from [See object-oriented programming, inheritance] case statements checklist containment compared to decisions involved in deep trees defined design rule for functions, private, overriding guidelines, list of heuristic design with identifying as a design step is a relationships key points for Liskov Substitution Principle main goal of mixins multiple overridable vs. non-overridable routines parallel modifications refactoring indicator placement of common items in tree private vs. protected data private, avoiding recommended bias against routines overridden to do nothing similar sub and super classes single-instance classes initializing variables accumulators at declaration guideline C++ example checklist for class members compiler settings consequences of failing to const recommended constants counters declare and define near first use rule final recommended first use guideline fixing defects global variables importance of Java example key point loops, variables used in parameter validity pointer problems 2nd 3rd Principle of Proximity reinitialization strings system perturbers, testing with Visual Basic examples initializing working memory inline routines input parameters input/output inspections installation tools instancing objects ADTs factory method singleton 2nd integer data types checklist [See data types, integers] costs of operations division considerations overflows ranges of Integrated Development Environments (IDEs) integration benefits of 2nd big-bang bottom-up strategy broken builds checklist classes 2nd 3rd continuous customer relations daily build and smoke test defined disadvantages of top-down strategy errors, locating feature-oriented strategy importance of approach methods interface specification 2nd key points monitoring phased resources on risk-oriented strategy sandwich strategy scheduling slices approach smoke tests strategies for, overview stubs 2nd summary of approaches T-shaped integration testing 2nd top-down strategy for unsurfaced work vertical-slice approach integrity intellectual honesty intellectual toolbox approach intelligence, role in character interfaces, class abstraction aspect of 2nd 3rd calls to classes, refactoring cohesion consistent level of abstraction delegation vs. inheritance, refactoring documenting 2nd erosion under modification problem evaluating abstraction of extension classes, refactoring with foreign routines, refactoring with formalizing as contracts good abstraction example guidelines for creating inconsistency with members problem inconsistent abstraction, example of information hiding role integration, specification during 2nd key points for layout of mixins objects, designing for opposites, pairs of poor abstraction example private details in programmatic preferred to semantic public routines in interfaces concern read-time convenience rule refactoring 2nd routines, moving to refactor routines, unused semantic violations of encapsulation unrelated information, handling interfaces, graphic interfaces, routine commenting foreign routines, refactoring with pseudocode for public member variables routines, hiding routines, moving to refactor internationalization interoperability interpreted languages, performance of invalid input iteration in development choosing, reasons for [See approaches to development, iterative approach] code tuning design practice Extreme Programming importance of prerequisites 2nd pseudocode component of sequential approach compared iteration, code foreach loops 2nd iterative data iterator loops, defined Iterator pattern structured programming concept of Index [SYMBOL] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W] jamming loops Java assertion example in boolean expression syntax description of exceptions layout recommended live time examples naming conventions for 2nd parameters example persistence of variables resources for Javadoc 2nd JavaScript JUnit just in time binding Index [SYMBOL] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W] key construction decisions killed data state kinds of software projects Index [SYMBOL] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W] languages, programming Law of Demeter layout array references [See coding, style; conventions, coding, formatting; programming conventions, formatting rules; readability, formatting for; style issues, formatting] assignment statement continuations begin-end pairs blank lines 2nd block style brace styles 2nd C++ side effects checklist classes closely related statement elements comments complicated expressions consistency requirement continuing statements control statement continuations control structure styles declarations discourse rules documentation in code double indented begin-end pairs emulating pure blocks endline layout 2nd ends of continuations files, within Fundamental Theorem of Formatting gotos incomplete statements indentation interfaces key points language-specific guidelines logical expressions logical structure, reflecting 2nd mediocre example misleading indentation example misleading precedence modifications guideline multiple statements per line negative examples objectives of parentheses for pointers, C++ pure blocks style readability goal religious aspects of resources on routine arguments routine call continuations routine guidelines self-documenting code single-statement blocks statement continuation statement length structures, importance of styles overview unindented begin-end pairs violations of, commenting Visual Basic blocking style white space 2nd 3rd laziness lazy evaluation leanness design goal legal notices length of variable names, optimum levels of design business logic subsystem classes, divisions into database access subsystem overview of packages routines software system subsystems system dependencies subsystem user interface subsystem libraries, code purpose of using functionality from life-cycle models development standard good practices table for linked lists deleting pointers node insertion pointers, isolating operations of linkers lint tool Liskov Substitution Principle (LSP) literal data 2nd literate programs live time of variables 2nd load time, binding during localization architecture prerequisites string data types locking global data logarithms logging defensive programming guideline tools for testing logic coverage testing logical cohesion logical expressions code tuning comparing performance of eliminating testing redundancy frequency, testing in order of identities layout of lazy evaluation lookup tables, substituting short-circuit evaluation loops abnormal [See conditional statements, looping, conditional; control structures, loops] arrays with bodies of, processing 2nd brackets recommended break statements 2nd 3rd checklist code tuning commenting completion tests, location of compound, simplifying continuation lines in continue statements 2nd 3rd continuously evaluated loops [See also while loops] counted loops [See also for loops] cross talk defined designing, process for do loops empty, avoiding endless loops 2nd endpoint considerations entering, guidelines for 2nd enumerated types for exit guidelines 2nd 3rd for loops 2nd 3rd 4th foreach loops 2nd fusion of goto with housekeeping statements index alterations index checklist index final values index scope index variable names infinite loops 2nd initialization code for 2nd iterative data structures with iterator loops 2nd jamming key points kinds of, generalized labeled break statements language-specific, table of length of minimizing work inside multiple break statements naming variables nested 2nd 3rd null statements, rewriting off-by-one errors one-function guideline order of nesting performance considerations pointers inside problems with, overview of pseudocode method refactoring 2nd repeat until clauses routines in safety counters with scope of indexes sentinel tests for size as refactoring indicator strength reduction switching termination, making obvious testing redundancy, eliminating unrolling unswitching variable guidelines variable initializations variables checklist verifying termination while loops loose coupling design goal, as strategies for low-to-medium fan-out design goal LSP (Liskov Substitution Principle) Index [SYMBOL] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W] Macintosh naming conventions macro routines alternatives for [See routines, macro] limitations on multiple statements in naming 2nd parentheses with magazines on programming magic variables, avoiding 2nd 3rd maintenance comments requiring design goal for error-prone routines, prioritizing for fixing defects, problems from maintainability defined readability benefit for structures for reducing major construction practices checklist managing construction code ownership attitudes [See construction, managing] complexity good coding, encouraging inspections, management role in key points managers measurements programmers, treatment of readability standard resources on reviewing all code rewarding good practices schedules, estimating signing off on code standards, authority to set standards, IEEE 2nd two-person teams markers, defects from matrices mature technology environments maximum normal configurations maze recursion example McCabe's complexity metric 2nd measure twice, cut once measurement advantages of arguing against goals for outlier identification resources for side effects of table of useful types of memory allocation, error detection for corruption by pointers fillers initializing working paging operation performance impact pointers, corruption by tools for mentoring merge tools metaphors, software accreting a system algorithmic use of 2nd building metaphor building vs. buying components combining computer-centric vs. data-centric views customization discoveries based on earth centric vs. sun centric views examples of farming growing a system heuristic use of importance of incremental development key points for modeling use for overextension of oyster farming pendulum example power of readability relative merits of 2nd simple vs. complex structures size of projects throwing one away toolbox approach using writing code example methodologies [See also approaches to development] methods metrics reporters minimum normal configurations mission-critical systems mixed-language environments mixins mock objects modeling, metaphors as moderator role in inspections modularity design goal of global variables, damage from modules, coupling considerations multiple inheritance multiple returns from routines multiple-file string search capability Index [SYMBOL] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W] named constants naming conventions "a" prefix convention [See declarations, naming; readability, naming variables for] abbreviating names abbreviation guidelines arrays benefits of C language 2nd C++ capitalization 2nd case-insensitive languages characters, hard to read checklist 2nd class member variables class vs. object names common operations, for constants cross-project benefits descriptiveness guideline documentation 2nd enumerated types 2nd 3rd files formality, degrees of function return values global variables 2nd homonyms Hungarian informal input parameters Java 2nd key points kinds of information in names language-independence guidelines length, not limiting Macintosh meanings in names, too similar misleading names misspelled words mixed-language considerations multiple natural languages numbers, differentiating solely by numerals opposites, use of parameters phonic abbreviations prefix standardization procedure descriptions proliferation reduction benefit pronunciation guideline purpose of readability relationships, emphasis of reserved names routines 2nd semantic prefixes short names 2nd similarity of names, too much spacing characters t_ prefix convention thesaurus, using types vs. variables names UDT abbreviations Visual Basic when to use nested if statements 2nd [See if statements, nested] converting to if-then-else statements factoring to routines factory method approach, converting to functional decomposition of object-oriented approach, converting to redesigning simplification by retesting conditions simplification with break blocks summary of techniques for reducing too many levels of nested loops designing 2nd ordering for performance nondeterministic nature of design process 2nd nonstandard language features null objects, refactoring null statements numbers, literal numeric data types BCD [See data types, numeric] checklist comparisons compiler warnings conversions, showing costs of operations declarations, commenting floating-point types 2nd 3rd hard coded 0s and 1s integers literal numbers, avoiding magic numbers, avoiding magnitudes, greatly different, operations with mixed-type comparisons overflows ranges of integers zero, dividing by Index [SYMBOL] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W] object-oriented programming resources for 2nd object-parameter coupling objectives, software quality 2nd objects ADTs as [See object-oriented programming, objects] attribute identification class names, differentiating from classes, contrasted to containment, identifying deleting objects factory methods 2nd 3rd identifying inheritance, identifying [See also inheritance] interfaces, designing [See also interfaces, class] operations, identifying parameters, using as 2nd protected interfaces, designing public vs. private members, designing real world, finding refactoring reference objects responsibilities, assigning to singleton property, enforcing steps in designing Observer pattern off-by-one errors boundary analysis fixing, approaches to offensive programming one-in, one-out control constructs operating systems operations, costs of common opposites for variable names optimization, premature [See also performance tuning] oracles, software out keyword creation overengineering overflows, integer overlay linkers overridable routines 2nd oyster farming metaphor Index [SYMBOL] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W] packages paging operations pair programming benefits of [See collaboration, pair programming] checklist coding standards support for compared to other collaboration defined inexperienced pairs key points pace, matching personality conflicts resources rotating pairs team leaders visibility of monitor watching when not to use parameters of routines abstraction and object parameters [See routines, parameters] actual, matching to formal asterisk (*) rule for pointers behavior dependence on by reference vs. by value checklist for, 185 C-library order commenting const prefix 2nd 3rd dependencies, clarifying documentation enumerated types for error variables formal, matching to actual global variables for guidelines for use in routines in keyword creation input-modify-output order Java list size as refactoring indicator matching actual to formal naming 2nd 3rd 4th 5th 6th number of, limiting objects, passing order for out keyword creation passing, types of refactoring 2nd status structures as using all of rule variables, using as Visual Basic parentheses balancing technique layout with Pareto Principle passing parameters patterns advantages of [See design, patterns, common] alternatives suggested by communications benefit complexity reduction with disadvantages of error reduction benefit Factory Method resource for table of people first theme performance appraisals performance tuning algorithm choice architecture prerequisites arrays 2nd checklist comments, effects on competing objectives dilemma 2nd compiler considerations 2nd correctness, importance of database indexing defects in code DES example design view feature specific hardware considerations inefficiency, sources of information hiding considerations of input/output interpreted vs. compiled languages key points lines of code, minimizing number of measurement of memory vs. file operations old wives' tales operating system considerations operations, costs of common overview of paging operations premature optimization program requirements view of purpose of quality of code, impact on resource goals resources routine design 2nd 3rd speed, importance of summary of approach for system calls timing issues user view of coding when to tune periodicals on programming Perl persistence of variables 2nd personal character perturbers phased integration phonic abbreviations of names PHP (PHP Hypertext Processor) 2nd physical environment for programmers planning analogy argument for building metaphor for data arguing for good practices table for logical argument for pointers & (pointer reference symbol) 2nd 3rd [See data types, pointers] –> (pointer symbol) address of 2nd allocation of 2nd 3rd alternatives to as function return values asterisk (*) rule auto_ptrs bounds checking tools C language C++ examples 2nd C++ guidelines checking before using 2nd checklist for comparisons with contents, interpretation of cover routines for dangers of 2nd data types pointed to deallocation of 2nd 3rd debugging aids declaring 2nd deleting 2nd diagramming dog tag fields explicit typing of explicitly redundant fields extra variables for clarity hiding operations with routines initializing 2nd 3rd interpretation of address contents isolating operations of key points languages not providing linked lists, deleting in location in memory memory corruption by memory parachutes null, setting to after deleting null, using as warnings overwriting memory with junk parts of passing by reference references, C++ resources for SAFE_ routines for simplifying complicated expressions sizeof() smart string operations in C type casting, avoiding variables referenced by, checking polymorphism case statements, replacing with [See object-oriented programming, polymorphism] defined language-specific rules nested ifs, converting to polynomial expressions portability data types, defining for defined routines for postconditions routine design with verification PPP (Pseudocode Programming Process) algorithms, researching [See pseudocode, PPP] alternates to checking for errors checklist for cleanup steps coding below comments coding routines from data structure for routines declarations from defined designing routines error handling considerations example for routines functionality from libraries header comments for routines high-level comments from iterating key points for naming routines performance considerations prerequisites problem definition refactoring removing errors repeating steps reviewing pseudocode stepping through code testing the code 2nd writing pseudocode step precedence, misleading preconditions routine design with verification prefixes, standardization of premature optimization preparation preprocessors C++ debugging aids, removing with purpose of writing prerequisites, upstream analogy argument for [See construction, prerequisites] boss readiness test checklist for choosing between iterative and sequential approaches coding too early mistake compelling argument for data arguing for error detection, doing early goal of good practices table for importance of incomplete preparation, causes of iterative and sequential mixes iterative methods with 2nd key points for kinds of projects logical argument for manager ignorance problem problem definition risk reduction goal skills required for success time allowed for WIMP syndrome WISCA syndrome Principle of Proximity 2nd private data problem domain, programming at problem-definition prerequisites problem-solving skills development procedural cohesion procedures naming guidelines for when to use processes, development productivity effects of good construction practice industry average size of projects, effects on professional development professional organizations program flow control of sequential program organization prerequisite program size programmers, character of programmers, treatment of overview physical environment privacy of offices religious issues resources on style issues time allocations variations in performance programming conventions choosing coding practices checklist programming into languages 2nd programming language choice Ada [See construction decisions, programming languages] assembly language Basic C C# C++ Cobol expressiveness of concepts familiar vs. unfamiliar languages Fortran higher- vs. lower-level language productivity importance of Java JavaScript Perl PHP productivity from programming into languages 2nd Python ratio of statements compared to C code, table of SQL thinking, effects on Visual Basic programming tools assembler listing tools [See construction, tools for; tools, programming] beautifiers build tools building your own CASE tools checklist class-hierarchy generators code libraries code tuning code-generation wizards compilers cross-reference tools data dictionaries debugging tools 2nd 3rd 4th dependency checkers design tools Diff tools disassemblers editing tools executable-code tools execution profiler tools fantasyland graphical design tools grep IDEs interface documentation key points linkers merge tools metrics reporters multiple-file string searches preprocessors project-specific tools purpose of quality analysis refactoring tools resources on restructuring tools scripts semantics checkers source-code tools syntax checkers templates testing tools tool-oriented environments translators version control tools project types, prerequisites corresponding to protected data prototyping 2nd Proximity, Principle of 2nd pseudocode algorithms, researching bad, example of benefits from changing, efficiency of checking for errors checklist for PPP classes, steps in creating coding below comments coding from comments from 2nd data structure for routines declarations from defined designing routines error handling considerations example for routines functionality from libraries good, example of guidelines for effective use header comments for routines high-level comments from iterative refinement 2nd key points for creating loop design naming routines performance considerations prerequisites problem definition refactoring reviewing routines, steps in creating 2nd testing, planning for Pseudocode Programming Process psychological distance psychological factors psychological set public data members pure blocks layout style Python description of performance issues Index [SYMBOL] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W] quality assurance checklist good practices table for prerequisites role in requirements checklist quality gates quality of software accuracy [See construction, quality of] adaptability change-control procedures checklist for correctness costs of finding defects costs of fixing defects debugging, role of 2nd detection of defects by various techniques, table of development process assurance activities efficiency engineering guidelines explicit activity for external audits external characteristics of Extreme Programming flexibility gates General Principle of Software Quality integrity internal characteristics key points maintainability measurement of results multiple defect detection techniques recommended objectives, setting 2nd optimization conflicts percentage of defects measurement portability programmer performance, objectives based prototyping readability recommended combination for relationships of characteristics reliability resources for reusability reviews robustness standards, IEEE 2nd testing 2nd 3rd understandability usability when to do assurance of Index [SYMBOL] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W] random-data generators readability as management standard defects exposing lack of defined importance of 2nd maintenance benefit from positive effects from private vs. public programs professional development, importance to structures, importance of warning sign, as a reading as a skill reading plan for software developers records, refactoring recursion alternatives to [See control structures, recursive] checklist defined factorials using Fibonacci numbers using guidelines for key points maze example safety counters for single routine guideline sorting example stack space concerns terminating refactoring 80/20 rule adding routines algorithms arrays backing up old code bidirectional class associations boolean expressions case statements checklists for 2nd checkpoints for class cohesion indicator class interfaces classes 2nd 3rd 4th code tuning, compared to collections comments on bad code complex modules conditional expressions constant values varying among subclass constructors to factory methods data from uncontrolled sources data sets, related, as indicator data types to classes data-level 2nd defects, fixes of defined designing code for future needs Don't Repeat Yourself principle duplicate code indicator error-prone modules expressions global variables GUI data if statements interfaces 2nd 3rd key points listing planned steps literal constants loops 2nd maintenance triggering middleman classes misuse of null objects objects one-at-a-time rule overloaded primitive data types parallel modifications required indicator parameters 2nd 3rd PPP coding step public data members queries reasons not to records redesigning instead of reference objects resources on reviews of risk levels of routines 2nd 3rd 4th safety guidelines 2nd setup code size guideline statement-level 2nd strategies for subclasses 2nd superclasses system-level 2nd takedown code testing to do lists for tools for tramp data ugly code, interfaces to unidirectional class associations unit tests for variables warnings, compiler references (&), C++ regression testing defined diff tools for purpose of reliability cohesive routines defined religious attitude toward programming eclecticism experimentation compared to harmful effects of layout styles becoming managing people software oracles reports requirements benefits of [See prerequisites, upstream, requirements development] business cases for change-control procedures checklists for 2nd coding without communicating changes in completeness, checklist configuration management of 2nd defined development approaches with development process effects on dumping projects errors in, effects of functional, checklist good practices table for importance of key point for nonfunctional, checklist performance tuning quality, checklist rate of change, typical resources on developing stability of 2nd testing for time allowed for resource management architecture for cleanup example restrictive nature of design restructuring tools retesting return statements checklist [See control structures, returns as] guard clauses key points multiple, from one routine readability resources for reusability architecture prerequisites defined reviewer role in inspections reviews code reading dog-and-pony shows educational aspect of every line of code rule formal inspections, compared to formal, quality from informal, defined iteration process, place in refactoring conducting after walk-throughs right shifting risk-oriented integration robustness architecture prerequisites assertions with error handling correctness, balanced against defined 2nd rounding errors routines abstract overridable [See classes, functions in; classes, methods of; classes, procedures in; classes, routines in] abstraction benefit abstraction with object parameters 2nd algorithm selection for 2nd alternates to PPP black-box testing of blank lines in boolean test benefit calculation to function example calls, costs of checking for errors checklists 2nd 3rd classes, converting to, criteria for cleanup steps code tuning coding from pseudocode cohesion coincidental cohesion commenting 2nd communicational cohesion compiling for errors complexity metric complexity reduction benefit construction step for classes continuations in call lines coupling considerations data states data structures for declarations defined descriptiveness guideline for naming design by contract designing 2nd documentation 2nd downcast objects duplication benefit endline layout error handling considerations errors in, relation to length of event handlers fields of objects, passing to files, layout in functional cohesion functionality from libraries functions, special considerations for hacking approach to header comments for high quality, counterexample high-level comments from pseudocode importance of in keyword creation indentation of inline input-modify-output parameter order interface statements internal design iterating pseudocode key points for 2nd layout of 2nd length of, guideline for limitations, documenting logical cohesion low-quality example mentally checking for errors multiple returns from named parameters in naming 2nd 3rd 4th nested deeply objects, passing to 2nd out keyword creation overridable vs. non-overridable routines overridden to do nothing overriding performance considerations 2nd pointer hiding benefit portability benefit postconditions PPP checklist for preconditions prerequisites problem definition procedural cohesion procedure naming guideline pseudocode writing step public, using in interfaces concern queries, refactoring reasons for creating, list of refactoring 2nd 3rd 4th reliability from cohesiveness removing errors repeating steps returns from, multiple reviewing pseudocode sequence hiding benefit sequential cohesion setup code for, refactoring similar parameters, order for similar, refactoring simple, usefulness of size as refactoring indicator small vs. large 2nd specification example stepping through code strength subclassing benefit temporal cohesion test-first development testing 2nd 3rd tramp data in unused, refactoring valid reasons for creating variable names, differentiating from wrong class, indicator for run time, binding during Index [SYMBOL] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W] safety counters in loops sandwich integration scaffolding debugging with testing 2nd scalability [See also size of projects] schedules, estimating scientific method, classic steps in SCM (software configuration management) [See also configuration management] scope of variables convenience argument [See variables, scope of] defined global scope, problems with grouping related statements key point language differences live time, minimizing localizing references to variables loop initializations manageability argument minimizing, guidelines for restrict and expand tactic span of variables value assignments variable names, effects on scribe role in inspections scripts programming tools, as slowness of SDFs (software development folders) security selections, code selective data self-documenting code 2nd semantic coupling semantic prefixes semantics checkers sentinel tests for loops sequences, code hiding with routines structured programming concept of sequential approach sequential cohesion Set() routines setup code, refactoring setup tools short-circuit evaluation 2nd side effects, C++ signing off on code simple-data-parameter coupling simple-object coupling single points of control single-statement blocks singleton property, enforcing 2nd size of projects activities, list of fastest growing [See construction, size of projects, effects on; managing construction, size of projects, effects of] activity types, effects on building metaphor for communications between people complexity, effect of defects created, effects on documentation requirements estimation errors formality requirements key points methodology considerations overview productivity, effects on ranges in resources on single product, multiple users single program, single user system products systems sizeof() sloppy processes smart pointers smoke tests software accretion metaphor software construction overview activities excluded from activities in, list of centralness to development process defined documentation by source code guaranteed done nature of importance of key points for main activities of percent of total development process productivity, importance in programming as programming vs.