On December 22, 2010 Mark Seemann published a blog post The TDD Apostate. Since then several friends and associates have sent me links to his post as if to say, “See, TDD is not all it is cracked up to be.” It is an excellent post and I agree with much of what the author …
Continue reading “The TDD Zealot”
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 MoreWhen teaching software design skills I often get asked what the difference is between aggregation and composition. My answer: parking lots. Parking lots aggregate cars. A parking is still a parking lot even if there are no cars on it. It is a zero-to-many relationship and what is being aggregated is optional. A car is …
Continue reading “Aggregation verses Composition”
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 MoreSoftware developers are infamous for not being good estimators. They say programmers have three timelines they work with: “done”, “not started” and “nearly finished”. It is easy to get caught up in the implementation details and not know exactly how long it will take to wrap up the task. Time boxing can be very helpful …
Continue reading “Why Short Iterations Work”
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 MoreWe are proud to announce that Techniques of Design has become a Registered Education Provider (REP) for the Scrum Alliance and now offers training for Certified Scrum Developers: Our three-day Scrum Software Development Essentials course, combining lectures and hands-on coding exercises, fulfills the technical-training requirement for the Certified Scrum Developer track. Our Design Pattern Development …
Continue reading “To Be Agile (Techniques of Design) now offers Certified Scrum Developer training!”
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 MoreHow do you define quality? Ford says that quality is job one but what is it and how do we create quality? We all recognize quality service at a fine restaurant and a quality product like a fine piece of furniture but what is quality in software? I ask this question a lot to developers …
Continue reading “What is Quality?”
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 MoreRetrofitting tests into legacy code is difficult process but can give us the ability to redesign and improve the quality of that software as we go. It is generally a good idea to add tests before refactoring code. Tests serve as a safety net so if I make a mistake in refactoring the test will …
Continue reading “Retrofitting Tests”
Read MorePart of allowing change to happen during development is by building software with engineering practices that support change. The most important of these practices is correctly using unit tests. Tests represent a way to both embody understanding of the system and prove that the system works. Unit tests are really a form of specifications because …
Continue reading “Test Driven Documentation”
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 MoreBack 25 years ago the way we started to write a new version of a successful product was that we deleted the previous version and started with a clean slate. Virtually all the code we wrote was thrown away and many new versions were started from scratch. But we can’t do that today. The systems …
Continue reading “We Can’t Keep Starting Over”
Read MoreI’ve been a software developer for over a quarter of a century and I’ve seen software development change quite a lot in that time. When I started out writing code the main concern that I had was to make my software work. It was challenging to make software do what we wanted back then because …
Continue reading “The Limiting Factor”
Read MoreIn feedback learning timing is everything. I’ve had the good fortune of working with dolphins in research projects a few times in my life. When we train dolphins to learn a new behavior we use a “bridge”, which is a high pitched whistle that we sound at the moment they do the behavior we want. …
Continue reading “Dolphins and Developers”
Read MoreI have a friend who is a hardware engineer. He says he hates software because it is too forgiving. When he designs electronics he has to follow strict engineering practices. One little mistake will likely make his whole design fail and cost his company over a $250,000 to “re-fab” the chip. He has to be …
Continue reading “Software is Too Forgiving”
Read More