In honor of the New iPad, I thought I’d blog this time about something other than software development and share with you my favorite app. I believe Apple will continue to own the tablet market not because of their stunning hardware or great ad campaigns. They know what Microsoft knew and IBM didn’t twenty years …
Continue reading “My Favorite App”
Read MoreI remember a poster at my college that said “All great minds don’t think alike but they do make connections.” I think this is especially true in software development where we are all largely self-taught. When I ask my students what the most valuable thing they got from my training was, I get a lot …
Continue reading “Connections”
Read MoreInterestingly enough, I do not find many sources discussing problem-solving skills for software development. Most books are concerned with the mechanics of a language or framework and almost every software design book I read teaches a procedure rather than to pay attention to the clues in the problem itself. Certainly, universities do not teach these …
Continue reading “Become a Better Problem-Solver”
Read MoreHow we think about a problem has a direct impact on the solutions that are available to us. What is or isn’t possible is oftentimes a fluid thing based on what we know and also what we believe. In software, virtually anything is possible but the level of difficulty often depends on our starting assumptions. …
Continue reading “Solutions Thinking”
Read MoreWould you pay $10 to spin a roulette wheel with a potential payoff of a million dollars? Maybe so but you probably wouldn’t do it if you had to win 100 spins in a row, right? Risk is part of life; we have to take them but we want our risks to be calculated. Yet …
Continue reading “Do You Play All or Nothing?”
Read MoreI worked on many projects in my 30 year career as a software developer. I’ve worked on embedded systems, operating systems, collaboration software, downloadable applications, and enterprise applications—the whole gambit. I’ve done coding, testing, managed developers, been a ScrumMaster, Product Owner and virtually every other role on a development team. The thing I enjoy the …
Continue reading “Don’t Do (Up Front) Design”
Read More“We don’t need to do <blank>, we’re doing Scrum.” I’ve heard some beginning Scrum teams say this. They think that doing Scrum is their get-out-of-jail-free card, freeing them from doing architecture, design, documentation or even thinking about what they are doing. Compared to waterfall, Scrum is a lightweight process but it is a process and …
Continue reading “The Scrum Excuse”
Read MoreOne of the things that established professions like medicine and law have that we as software developers don’t have is some form of mandatory mentoring. For doctors it is residency, for lawyers it is internships, even carpenters need to apprentice with a master carpenter before they can become a master themselves. But in software development …
Continue reading “Do You Mentor?”
Read MoreCompromises are part of life. We must make tradeoffs if we are going to ship product but we want to make the right tradeoffs and that can only happen when we have information to back our decisions. Understanding good design principles and practices help us make informed technical decisions. The principles give us guidance in …
Continue reading “Making the Right Tradeoffs”
Read MoreThey say that perfection is the enemy of the great and this is very true in software development. I used to believe that there was no such thing as the perfect design but now, after years of studying design, I think in many situations there is such a thing as a perfect design. The problem …
Continue reading “The Enemy of the Great”
Read MoreI teach software design at some of the largest and most well-funded companies on the planet. My classes cover concepts and practices that most developers are not aware of. I do draw on other people’s work—lots of other people—but I synthesize it in new ways and give practical examples from my own experience as a …
Continue reading “You Are Awesome (Whatever You Call Yourself)!”
Read MoreOne of the biggest challenges I’ve had in my career as a developer was over-design. I used to just dive in and code on projects but soon afterwords I would end up stuck. To compensate I would spend a lot of time in the design phase only to discover later that most of my concerns …
Continue reading “Under-Design and Over-Design”
Read MoreSometimes I like to start a project by doing a few hours of design and then spend the rest of an iteration building a proof of concept. Oftentimes I can get a tremendous amount of functionality roughed out in a system very quickly and then spend the next several iterations making it supportable and maintainable. …
Continue reading “First Seek to Understand”
Read MoreAlthough his life came to a tragic end I have a great admiration for Ignaz Semmelweis. You’ve probably never heard of him but most of us owe our lives to him. He was the Australian physician who helped popularize sterilization practices that surgeons use today. I can’t even imagine how he must have been ridiculed …
Continue reading “Don’t Forget to Wash Your Hands”
Read MoreAs an agile developer I still prototype but I tend to do it differently than in the past. I now make a distinction between a prototype and a proof-of-concept. A proof-of-concept is code that verifies an approach to solving a problem. I use a proof-of-concept as a sanity check to make sure I am taking …
Continue reading “Agile Prototyping on a Napkin”
Read MoreI am a big believer in prototyping. The quicker I can get functionality to my users the better. I often find that it helps my users visualize how to use the system I am building and often this will lead to useful feedback. However, I do have a caveat when building prototypes for customers—make sure …
Continue reading “Prototyping Caveat”
Read MoreSometimes I hear developers say that they are scared to build prototypes because their manager will make them ship it as a product. There is a big difference between a prototype and a product. A home builder wouldn’t mock up a house out of cardboard and then try to sell it so people could move …
Continue reading “A Prototype is Not a Product”
Read MoreI am told that some developers don’t like coding standards imposed on them. I do not have that experience. In working with thousands of developers I notice that they prefer following standards as long as it supports them in doing a good job. We all hate busy work or pointless activities. If your coding standard …
Continue reading “Do You Believe in Coding Standards?”
Read MoreFar too often I hear managers say, “Just get it out the door.” I understand the perspective. We work in a world of constraints and the business needs to survive. Management often says this but really mean “I look to my developers to tell me what critical things must be there in order for the …
Continue reading “Compromises on Quality”
Read MoreHave you ever stay up until three in the morning trying to track down a bug? Maybe it was code that you were charged with maintaining or maybe it’s something you just wrote. Remember how it felt trying to figure out what the author was doing? Who is our customer? You may think it is …
Continue reading “Who is Our Customer?”
Read MoreWhen I show students in my classes a particularly bad design and ask them to evaluate it, they feel uneasy but very few have language to describe what is bad (or good) about a design. Without a common language that distinguishes good code from bad code we have little power. Reviewing a design is like …
Continue reading “Is it a Good Design?”
Read MoreThe biggest impediment to change is a cultural one. Change means things are going to be different and human beings resist this at some level. Change requires being able to adapt and this can be difficult so as a result we tend to resist it. I often run an interesting experiment in some of my …
Continue reading “Resistance to Change”
Read More