Top Stories - Google News

Showing posts with label Agile. Show all posts
Showing posts with label Agile. Show all posts

Wednesday, February 23, 2011

Why Johnny Can’t Be Agile

Posted by Andy Hunt, January 10, 2011

Your brain is not wired to work with agile methods.

Ten years ago in February, at Snowbird in Salt Lake City, Utah, I was hanging out with 16 notable folks who cared deeply about software development. We talked about many things, all around the general theme of what to that point had been called “light-weight processes.”

But “light-weight,” while perhaps technically correct, carried connotations of insufficiency. So after some discussion, we all agreed on coining the term agile. And thus the Agile Manifesto and the eponymous movement were born.

But agile techniques were a hard sell. Even simple, non-controversial practices such as version control weren’t yet universally adopted. I used to ask audiences at talks how many people did not use any version control on their project. Typically somewhere between 10% and 30% of the audience raised their hands. It wasn’t that folks were dead set against using version control on religious grounds, they either just didn’t know any better or just didn’t bother.

So surely this was just a matter of education; of spreading the word. Agile methods made sense. Agile ideas are grounded in reality, and even some actual science. Surely the world would see the logic in it? You’d expect some amount of resistance to any new way of developing software—especially one where continuing to Embrace Change was part and parcel of the new method. Folks don’t like change in general, and here we were advocating riding the wave of constant change. But somehow it seemed that resistance to agile ways went deeper than that.

We are not rational or logical creatures. We’d like to think we are, but the biological, psychological truth of the matter is that we’re predictably irrational. How irrational? Take a look at Wikipedia’s list of common cognitive biases for starters. This dauntingly long list begins to describe the many ways that we humans aren’t as logical or reliable as you might think. While you might encounter many of these in your daily life or work, a few stand out as significant barriers to agile adoption. These cognitive biases are why Johnny Can’t Be Agile.

I think the most significant cognitive bias that affects agile methods in particular is our Need for Closure. In general, people are not comfortable with doubt and uncertainty—so much so that we’ll go to great lengths to resolve open issues and to remove uncertainty and reach closure. In other words, our default wiring says it’s better to make the wrong decision now instead of waiting and making a better decision later.

That’s partly why classic Big Design Up Front seemed so appealing. It demanded a heavy initial investment in design and architecture, but promised closure. With the big formal design done, there was no doubt and no uncertainty. There would be problems later on of course, because of pesky low-level details or volatile changes that often invalidated the initial design. The promised closure and removal of lingering uncertainty never actually materialized, but everyone felt better with the illusion of closure.

Uncertainty is a good thing: it leaves your choices open. Forcing premature closure, as in Big Design Up Front, cuts off your options and leaves you vulnerable to errors and unforeseen changes. Artificially making and declaring a decision, such as the end date of a project, doesn’t remove the inherent uncertainty; it just masks it. So agile requires that we grit our teeth and not only put up with uncertainty and doubt, but hold on to them. Live in them. Revel in uncertainty, and postpone closure for as long as possible. After all, you know the most about a project after it’s delivered, and you know the least when you first start.

Logically then, you should postpone major decisions until near the end of the project. But you won’t want to, and some folks simply can’t stand it. They’ll demand an answer, a decision, now. The agile way to respond to that is to offer an answer as a current estimate that will be revised periodically.

The end date of a project is a popular bit of closure that lots of folks would really like to know. But we don’t know it; it’s uncertain based on quite a few variable factors, not all of which we control. So we make a guess. An iteration or two go by, and we’ve got more data to work with. So we make a better guess. Time goes on, and we slowly converge on what will ultimately be a mostly-right answer. For someone who is uncomfortable with uncertainty, this might seem like slow torture.

There’s an old expression, “better the devil you know than the devil you don’t.” There are a number of cognitive biases that support this approach; we’re happier with a familiar situation, even if it’s sheer torture, instead of facing the unknown—which might just be even worse.

Hmm, this smacks of another issue, Post-purchase Rationalization: the tendency to persuade oneself through rational argument that a purchase was a good value. That tendency keeps a lot of expensive tool vendors in business. You’ve got a lot of incentive to use that crappy IDE or database because your team spent so much money on it. Even if it’s killing your project.

This is summed up nicely in the Exposure Effect. We tend to prefer things just because they are familiar. This includes tools, techniques, or methods that aren’t working well anymore or that are even actively causing harm. So we’ll generally stick to a crappy way of working, or a crappy programming language, or a crappy IDE just because it’s familiar.

On a related note, we’re wired to be very much Loss Averse. That means it’s usually more important to us not to risk winning if there’s any chance at all of losing something we already have. Remember all those certifications that you worked so hard for? Isn’t that language dying out? You might think it’s better to stick to the dying language because of your investment in it. Hmm, this smacks of another issue, Post-purchase Rationalization: the tendency to persuade oneself through rational argument that a purchase was a good value. That tendency keeps a lot of expensive tool vendors in business. You’ve got a lot of incentive to use that crappy IDE or database because your team spent so much money on it. Even if it’s killing your project.

You’ll even promote those few choice bits of fact to support your decision, whilst conveniently ignoring the vast majority of facts that show you’re in deep trouble. Ah, that would be the Confirmation Bias at work. Everyone has a tendency to find just the facts that fit their own preconceptions and pet theories, and dismiss the rest.

With all of this baggage supporting the existing status quo, it’s even harder for a newcomer, such as an agile method, to gain acceptance.

Okay, I’ll admit it, there actually isn’t a cognitive bias named The Programmer’s Bias, but there should be. First, take the Planning Fallacy: the tendency to underestimate task-completion times. Add to that some Optimism Bias: the tendency to be over-optimistic about the outcome of planned actions. Sound uncomfortably familiar?

Left to our own devices, we’ll underestimate the task at hand and overestimate the quality of the result. Now in agile methods, we’ve got techniques to help counter that, including iterative and incremental development, feedback with unit and other automated tests, heavy user involvement to validate our efforts, and so on. But you actually have to use these techniques, there are no shortcuts. And folks in your organization who aren’t part of the agile experience may still expect it to be perfect and available yesterday.

Agile methods are big on reflection, on conducting formal, team-wide and informal, personal retrospectives. It’s a great idea, and really the only way you can improve over time. But there are some problems here.

First, there’s the well-known Hawthorne Effect. Researchers have noticed that people have a tendency to change their behaviors when they know they are being studied. You’ll see this when you introduce a new practice or a new tool on a team. At first, while everyone is watching—and everyone knows they are being watched—results look great. Discipline is high, and the excitement of something new fuels the effort. But then the novelty wears off, the spotlight moves away, and everyone slides inexorably back to previous behaviors.

That’s enough to condemn agile in the eyes of many organizations. They’ll say, “We tried it once, and it didn’t work.” Perhaps a bit of confirmation bias has snuck in there as well. The normal lull after the initial novelty wears off gets confused for failure of the method itself.

Finally, and perhaps most damagingly of all, is the little-known Dunning–Kruger effect. This is the source of my favorite story about the “Lemon Juice Man,” the fellow who robbed a bank in broad daylight and thought that lemon juice made him invisible to the security cameras. It didn’t. But it never occurred to him to doubt his own belief in the power of lemon juice.

This lack of “metacognitive ability” is our lack of thinking about how we think; our lack of critically evaluating what we know and how we think we know it. As a result, less skilled people will overrate their own capabilities by a large amount. Highly skilled people will underrate their abilities, because they have come to understand just how complex their field can be.

So we often don’t know what we don’t know, and it’s hard to convince us otherwise. But knowing that there are problems in how we think is the first step in avoiding them.

Something to think about.


View the original article here

Tuesday, February 22, 2011

The 12 Key Reasons Companies Adopt Agile

So… I’m starting to see a pattern here…

Snowmageddon in Atlanta and I go on a ‘flurry’ of writing… get back into the groove of working, and I can’t seem to manage a post or two. I’m going to have to figure out how to muster some serious self-discipline if this book is every going to get written. Dennis and I got together the week before last and created an outline for Section-Two. That content will show up as another series of lists over the next few weeks. For today, I want to go back a bit and talk through something I think we might have left out… why people want to do agile in the first place.

A few of my clients recently have me noodling on the reasons that organizations and teams decide to go down this path in the first place. I’ve mentioned several times that no one really cares about agile… all they really care about is better business results. That said, I think the idea of ‘better business results’ can be broken down a little bit. That got me thinking about creating a list of the main reasons I hear from my clients they decided to go agile. So here it is… the 12 Key Reason Companies Adopt Agile.

1. Faster time to market – Lots of folks that decide to go agile are pretty fed up with 18 month delivery cycles that quite often deliver the wrong products to market… one’s that our customers just aren’t interested in buying. The idea of two week delivery cycles and quarterly release cadences is pretty appealing. Our markets and our competition are just moving too fast… we’ve got to get better at getting working product out the door faster.

2. Early ROI – The other day I was onsite with a team that was struggling to see the value in thin slicing their user stories. After missing a few sprints, the team decided to give thin slicing the old college try. They didn’t nail the sprint, but were successful delivering an increment of working software that was of value to the business. Here is a paraphrase of their Product Owner’s reaction:

“Even though you may have thought it was less efficient to splitting stories, it makes a real difference to the business. I can show the output of this sprint to an external customer and sell business based on this.” <<< Very cool!

3. Feedback from real customers – One of my customers told me that over 50% of the features they’ve built have not ever been used by their customers. That’s pretty consistent with other industry stats I’ve seen recently. Just imagine if we could take all that time we use to spend building stuff our customers didn’t want, and focus it on building stuff they’ll actually use. I hear arguments all the time that sprint planning or writing tests slows the team down… does anyone ever consider how much building the wrong product slows the team down?

4. Build the right products – This may end up just collapsing this with #3, but for now it feels slightly different to me. Even if we are building the exact features that our customers are asking for, incremental delivery helps us build them the way our customers will actually use them. When we deliver in smaller increments, we have the opportunity to let our customers see the emerging product, respond to it, and tweak it as they go. Agile helps the customer and the team converge on the best possible outcome.

5. Early risk reduction – Agile doesn’t treat risk as a separate area to be managed… agile is risk management. By delivering early and getting feedback, we reduce the risk of building the wrong product. By focusing on architectural risk in the early sprints, we reduce the risk that we won’t have a solution that can be build in time… at least we’ll know it early. By continuously integrating and building defect free software, we reduce the risk that our stuff wasn’t built right just before we need to bring it to market. Wasn’t it Tom DeMarco that said “Risk Management is Project Management for grown-ups”?

6. Better quality – Developers are generally tired of building crap and our customers are universally tired of getting crap. When businesses fix time, cost, and scope… the only thing developers have left to manage is quality. Agile fixes time, cost, and quality… and gives us the tools to vary the business and technical scope of the solution. You might not get everything you hoped for, but you can trust what was delivered.

7. Culture and morale – Some folks want to adopt agile because the culture in their organization just sucks. Agile is a pretty hot topic, and most developers get pretty excited about giving it a try. Agile holds the promise of creating teams of empowered individuals… teams full of people working on the highest priorities of the business with a shared sense of purpose. When agile is done well, it creates really fun places to work… there is nothing quite like being part of a team of people working hard toward shared goals.

8. Efficiency – I almost titled this one “reducing waste”… but that’s not how the folks I work with usually communicate it, so I chose to call this efficiency. People know that the big up front plans usually turn out useless in the long run. People know that the people in their functional silos aren’t working very well together. They know that the ‘throw it over the wall’ handoffs result in churn and back and forth behavior. Agile holds the promise of helping us eliminate the stuff we don’t need and get down to the business of building working software.

9. Customer satisfaction – Building products our customers can use makes them happy. Being able to frequent add new features based on their feedback makes them happy too. As a software customer, I’m not sure there is anything worse than investing in a product that doesn’t work, doesn’t do what we need it to do, and not being unable to see any path forward for making it better. I’m willing to buy a first iteration product if I know it is going to do nothing but get better over time. As a matter of fact, it can be fun seeing the product emerge as the development team gets more feedback. Agile helps us build this kind of partnership with our customers, one where we are working together to get problems solved.

10. Alignment – I want to explain this one a bit becuae I don’t think it’s immediately obvious. When we are organized in functional silos, when our teams are not organized around either products or other business objects, when our technology infrastructure is owned in more than one place… that’s being out of alignment. Agile suggests that we have cross-functional teams that support products. This is really a simple expression of alignment and folks get it… they want it. In practice, sometimes though, the ‘one team-one product’ relationship isn’t possible. The trick is to determine how to align the organization when the simple pattern breaks down. People don’t usually ask for ‘alignment’, but they want connection between effort and real business results.

11. Emergent outcomes – Some folks aren’t trying to deliver against a fixed time, fixed cost, fixed scope plan… some folks don’t know what they want to build or how to build it. Some people are building products for markets that don’t exist yet using technologies that are brand new and cutting edge. Agile is a great way of building software when you have to explicitly account for the fact that you’ll have to learn as you go. Build a little product, learn something from your customer, adapt your vision, build a little more software, and ultimately create something that is better than you could have ever planned in a vacuum.

12. Predictability – Most development shops are pretty bad giving the business any idea of when they are going to be done, and what they are going to get for their money. The business has gotten to the point where they almost don’t care how fast you build something… they just need you to get predictable doing it. It’s become a mantra of mine lately… I tell teams all the time that I need them get good at making and meeting commitments and stabilizing their velocity over time. In the absence of predictability, I don’t care about speed. In the absence of predictability, I have no idea what to tell my customer. In the absence of predictability, I have no idea how to coordinate and align the other parts of the business. At some level I have to be able to make and meet a commitment.

13. Because someone told me to – This is a last minute addition… I guess we have a baker’s dozen of sorts.  I initially left this out because I don’t think it’s a real reason. At the end of the day, the person in power has some sort of reason, most likely driven by one of our previous 12.  The challenge though is that sometimes you get teams where this is the only reason they care.   If you are faced with a team that doesn’t buy it, and are only going through the motions because someone told them to, it will definitely influence your adoption and transformation strategy.

Okay… so those are my top 12 (13)… I’d love to hear what you guys have to say. What have I left out? Why else do people decide to adopt agile practices and transform their organizations?

Originally posted at LeadingAgile.


View the original article here

Reflections on the 10 Years Since the Agile Manifesto

Posted by Mike Cohn, February 15, 2011

This month is the tenth anniversary of the start of the meeting that resulted in the Agile Manifesto. Much has changed in the ten years since the Agile Manifesto. Back then, the processes encompassed by the Manifesto—Extreme Programming, Scrum, DSDM, Feature-Driven Development, and others—existed only on the fringes of the software development world. It was, therefore, easy to dismiss them as being inappropriate for real-life application.

"Tenth Anniversary of the Agile Manifesto"

Even in my own division, we questioned our decision to use Scrum. After all, most of the buzz in those days was about the Unified Process. There was this feeling in the air that if you weren’t doing the Unified Process, perhaps you should be. We had been tremendously successful with Scrum yet were filled with doubt—would we have been even more successful if we used a complete methodology instead of this little toy of a process called Scrum? After all, we didn’t know anyone else doing Scrum and the term “agile software development” didn’t exist. When the whole world seemed to be moving toward a “unified process,” it was hard not to wonder if you were the only ones who weren’t.

And then one February morning I got an email from Ward Cunningham: “Look how I spent the last few days,” he wrote. He included a link to a new website, www.agilemanifesto.org, and a grainy photo of some guys standing around a whiteboard. But that website hit me like a lightning bolt—we weren’t alone, after all. Suddenly I knew there were at least seventeen others who felt the same as we did. And then day by day, there were more, each signing his or her name and adding a brief statement of solidarity on the agilemanifesto.org website.

With a name for what we were doing— agile—others like us seemed to pop out of every corner. “Yes, we do that, too,” became the catchphrase of early agilists as we all discovered we were not alone.

And now here we are ten years later, and things have swung 180 degrees. If you aren’t agile or in the process of becoming agile, you probably feel like you should be. The biggest change from ten years ago is that agile processes now deserve a seat at any table where people are discussing which process to use. If I were a VP of development today in a large conglomerate and I suggested agile to the VPs of other divisions, they could not just dismiss it with a wave of their hands. Agile, in its many forms, is a viable, credible alternative. It may not be the right one for every company or project but no one would be laughed out of the room for suggesting it.

From laughed out of the room to credible alternative in ten years. Where does agile go from here? Hopefully two things are in store for us next. First, I’d like all the brands to go away. No Scrum. No XP. No Kanban or lean. No DSDM. No Crystal. Just agile. We saw this happen two decades ago in objects. We had various modeling approaches and methods from Rumbaugh, Booch, Meyer, Jacobson, and others. Those differences were eventually put aside and we now have merely objects and UML.

The next change I’d like to see (and predict will occur) over the next ten years also occurred in the OO world: We stop talking about agile. We stopped talking about objects a while ago—they won. No one engages in big debates about OO anymore. Sure, there are some applications, such as those with intense performance requirements, where we don’t use objects. And some projects are written in non-OO languages. But even in those cases I suspect the code being written has still been influenced by objects. I’d like agile to reach this same point, where we no longer need to talk about it. Rather than “agile software development” it is just “software development”—and of course it’s agile. No one asks me if the Ruby code I’m writing these days is OO. Of course it is. I hope someday no has to ask if I used agile on the project. Of course I did.

In another ten years I hope I am asked to reflect on what will then be twenty years since the Agile Manifesto. I hope by then it’s a largely forgotten document, like the Magna Carta. Yeah, that dusty old thing. My life is still influenced by the Magna Carta, and I was recently called to jury duty to remind me of this, but I hardly spend my days thinking about it. I hope for a similar fate for the Agile Manifesto. And when I do reflect back on agile software development ten years from now I hope we’ve stopped calling it agile. I hope we’ve stopped calling it anything at all and are just doing it.

Originally published on Mike Cohn’s blog.


View the original article here

Why Johnny Can’t Be Agile

Posted by Andy Hunt, January 10, 2011

Your brain is not wired to work with agile methods.

Ten years ago in February, at Snowbird in Salt Lake City, Utah, I was hanging out with 16 notable folks who cared deeply about software development. We talked about many things, all around the general theme of what to that point had been called “light-weight processes.”

But “light-weight,” while perhaps technically correct, carried connotations of insufficiency. So after some discussion, we all agreed on coining the term agile. And thus the Agile Manifesto and the eponymous movement were born.

But agile techniques were a hard sell. Even simple, non-controversial practices such as version control weren’t yet universally adopted. I used to ask audiences at talks how many people did not use any version control on their project. Typically somewhere between 10% and 30% of the audience raised their hands. It wasn’t that folks were dead set against using version control on religious grounds, they either just didn’t know any better or just didn’t bother.

So surely this was just a matter of education; of spreading the word. Agile methods made sense. Agile ideas are grounded in reality, and even some actual science. Surely the world would see the logic in it? You’d expect some amount of resistance to any new way of developing software—especially one where continuing to Embrace Change was part and parcel of the new method. Folks don’t like change in general, and here we were advocating riding the wave of constant change. But somehow it seemed that resistance to agile ways went deeper than that.

We are not rational or logical creatures. We’d like to think we are, but the biological, psychological truth of the matter is that we’re predictably irrational. How irrational? Take a look at Wikipedia’s list of common cognitive biases for starters. This dauntingly long list begins to describe the many ways that we humans aren’t as logical or reliable as you might think. While you might encounter many of these in your daily life or work, a few stand out as significant barriers to agile adoption. These cognitive biases are why Johnny Can’t Be Agile.

I think the most significant cognitive bias that affects agile methods in particular is our Need for Closure. In general, people are not comfortable with doubt and uncertainty—so much so that we’ll go to great lengths to resolve open issues and to remove uncertainty and reach closure. In other words, our default wiring says it’s better to make the wrong decision now instead of waiting and making a better decision later.

That’s partly why classic Big Design Up Front seemed so appealing. It demanded a heavy initial investment in design and architecture, but promised closure. With the big formal design done, there was no doubt and no uncertainty. There would be problems later on of course, because of pesky low-level details or volatile changes that often invalidated the initial design. The promised closure and removal of lingering uncertainty never actually materialized, but everyone felt better with the illusion of closure.

Uncertainty is a good thing: it leaves your choices open. Forcing premature closure, as in Big Design Up Front, cuts off your options and leaves you vulnerable to errors and unforeseen changes. Artificially making and declaring a decision, such as the end date of a project, doesn’t remove the inherent uncertainty; it just masks it. So agile requires that we grit our teeth and not only put up with uncertainty and doubt, but hold on to them. Live in them. Revel in uncertainty, and postpone closure for as long as possible. After all, you know the most about a project after it’s delivered, and you know the least when you first start.

Logically then, you should postpone major decisions until near the end of the project. But you won’t want to, and some folks simply can’t stand it. They’ll demand an answer, a decision, now. The agile way to respond to that is to offer an answer as a current estimate that will be revised periodically.

The end date of a project is a popular bit of closure that lots of folks would really like to know. But we don’t know it; it’s uncertain based on quite a few variable factors, not all of which we control. So we make a guess. An iteration or two go by, and we’ve got more data to work with. So we make a better guess. Time goes on, and we slowly converge on what will ultimately be a mostly-right answer. For someone who is uncomfortable with uncertainty, this might seem like slow torture.

There’s an old expression, “better the devil you know than the devil you don’t.” There are a number of cognitive biases that support this approach; we’re happier with a familiar situation, even if it’s sheer torture, instead of facing the unknown—which might just be even worse.

Hmm, this smacks of another issue, Post-purchase Rationalization: the tendency to persuade oneself through rational argument that a purchase was a good value. That tendency keeps a lot of expensive tool vendors in business. You’ve got a lot of incentive to use that crappy IDE or database because your team spent so much money on it. Even if it’s killing your project.

This is summed up nicely in the Exposure Effect. We tend to prefer things just because they are familiar. This includes tools, techniques, or methods that aren’t working well anymore or that are even actively causing harm. So we’ll generally stick to a crappy way of working, or a crappy programming language, or a crappy IDE just because it’s familiar.

On a related note, we’re wired to be very much Loss Averse. That means it’s usually more important to us not to risk winning if there’s any chance at all of losing something we already have. Remember all those certifications that you worked so hard for? Isn’t that language dying out? You might think it’s better to stick to the dying language because of your investment in it. Hmm, this smacks of another issue, Post-purchase Rationalization: the tendency to persuade oneself through rational argument that a purchase was a good value. That tendency keeps a lot of expensive tool vendors in business. You’ve got a lot of incentive to use that crappy IDE or database because your team spent so much money on it. Even if it’s killing your project.

You’ll even promote those few choice bits of fact to support your decision, whilst conveniently ignoring the vast majority of facts that show you’re in deep trouble. Ah, that would be the Confirmation Bias at work. Everyone has a tendency to find just the facts that fit their own preconceptions and pet theories, and dismiss the rest.

With all of this baggage supporting the existing status quo, it’s even harder for a newcomer, such as an agile method, to gain acceptance.

Okay, I’ll admit it, there actually isn’t a cognitive bias named The Programmer’s Bias, but there should be. First, take the Planning Fallacy: the tendency to underestimate task-completion times. Add to that some Optimism Bias: the tendency to be over-optimistic about the outcome of planned actions. Sound uncomfortably familiar?

Left to our own devices, we’ll underestimate the task at hand and overestimate the quality of the result. Now in agile methods, we’ve got techniques to help counter that, including iterative and incremental development, feedback with unit and other automated tests, heavy user involvement to validate our efforts, and so on. But you actually have to use these techniques, there are no shortcuts. And folks in your organization who aren’t part of the agile experience may still expect it to be perfect and available yesterday.

Agile methods are big on reflection, on conducting formal, team-wide and informal, personal retrospectives. It’s a great idea, and really the only way you can improve over time. But there are some problems here.

First, there’s the well-known Hawthorne Effect. Researchers have noticed that people have a tendency to change their behaviors when they know they are being studied. You’ll see this when you introduce a new practice or a new tool on a team. At first, while everyone is watching—and everyone knows they are being watched—results look great. Discipline is high, and the excitement of something new fuels the effort. But then the novelty wears off, the spotlight moves away, and everyone slides inexorably back to previous behaviors.

That’s enough to condemn agile in the eyes of many organizations. They’ll say, “We tried it once, and it didn’t work.” Perhaps a bit of confirmation bias has snuck in there as well. The normal lull after the initial novelty wears off gets confused for failure of the method itself.

Finally, and perhaps most damagingly of all, is the little-known Dunning–Kruger effect. This is the source of my favorite story about the “Lemon Juice Man,” the fellow who robbed a bank in broad daylight and thought that lemon juice made him invisible to the security cameras. It didn’t. But it never occurred to him to doubt his own belief in the power of lemon juice.

This lack of “metacognitive ability” is our lack of thinking about how we think; our lack of critically evaluating what we know and how we think we know it. As a result, less skilled people will overrate their own capabilities by a large amount. Highly skilled people will underrate their abilities, because they have come to understand just how complex their field can be.

So we often don’t know what we don’t know, and it’s hard to convince us otherwise. But knowing that there are problems in how we think is the first step in avoiding them.

Something to think about.

Originally Posted: Blog.Tooshed.com


View the original article here