Naresh Jain Discusses "Simple Design & Testing" And The Conference Dedicated To It
A core tenet of agile development is the value of "simplicity" - particularly when it comes to software design and even the manner in which it's tested. Since 2006, Gordon Pask Award recipient Naresh Jain has been running a worldwide "Open Space" formatted conference, the Simple Design & Testing Conference, for practitioners to meet and push the boundaries on what this really looks like and what it means.
As the next conference in the running series is about to go down June 26th & 27th, this time in Mumbai, India, InfoQ stole a few minutes with Naresh to find out what's going on behind this small, but well-known conference and why Naresh is so passionate about the topic.
InfoQ: What does "Simple Design & Testing" mean to you? Why is it something people should care about?
For years I've searched for answers to questions like "What is Simple Design?", "Is my Simple your simple?", "Can we always find a simple solution to a complex problem?", and so on. I don't think I have all the answers, but I've concluded to myself that a design that does not get in my way of making progress is simple design. Can it be simpler? Probably. Does it need to be? Not unless its getting in your way.
Testing is a very interesting practice. Its certainly as deep and diverse as design. Like with design, with testing also, we find a huge polarity. On one side we have the testing fanatics, who want to test every single line of code they write. On other extreme we have developers who think testing is best left for the monkeys from the Third World countries. It very difficult to find people with the right balance. It requires real knowledge of the topic as well as years of real, hands-on practice. IMHO its crucial to find the right balance as a community, else we'll likely miss the boat.
So, finding such a balance, personally and for others, might be your core motivation behind the SDT conference? What else would you say is the intention of this conference?
Yes, a hands-on, boundary-pushing environment to find these answers is what I've always striven for at the SDTConf. Further though, you go to big Agile conferences and you drown in process talk. Even if you have some technical discussions, its very basic and most of the time is spent convincing participants (skeptics) the value of doing Evolutionary Design, TDD, Automated Tests, Low-fi prototypes, Continuous Integration, Pair Programming, Continuous Deployment, etc.
Where and when do we get time to push the boundary on these topics? How do we take it beyond the basics? You are trying these practices and you are stuck in a particular situation or you made some decision and you want some feedback from real practitioners. Where do you go?
My goal with this conference is to create a safe environment where practitioners can meet face-to-face and really turn their learning dial to 11.
What inspired you to actually start this? And why did you choose to use a 100% 'Open Space' format?
I always believed Open Space conferences are not suited for technical topics, until I attended the first Continuous Integration and Testing Conference. I was blown away by the quality of learning I had at that conferences. Working on large enterprise applications, it was very difficult to come up with Simple Design which was easy to Test. Those where my 2 biggest issues on the project I was working back in 2006.
So I told myself, I should organize a conference around these 2 topics and use the same open space format as CITCon. I spoke with folks at the Agile Philly User group, and people liked the idea. David Bogus introduced me to West Chester University, who hosted the first conference. Year by year, things just grew from there. A bit amazing to me, really.
This upcoming event represents the conference's fifth year straight, congratulations! What has kept you motivated to continue having and leading these SDT conferences, and what are some of your biggest learnings to come from them?
Each year at the conference, I learn things that change/improve my programming style.
For example, at the first conference, we had a very interesting discussion about, "There is no Spoon" [led by Corey Haines] . Later I paired with Corey and we test drove some code using this approach. When I'm in a sketch mode, not knowing what objects are required, this is a great technique to test drive.
Next year, I ran a session on Avatars of TDD, where we discussed how different people have different styles of test driving. I got an opportunity to pair with many people and was able to really flush out some initial thinking on different attributes that influences your style (avatar) of TDD. The same year, we had another very interesting discussion on What are my tests telling me about my design. Over the years I've added many more patterns to this category. It really helps me explain to people that it's not the test's fault, your design needs some more. (Don't shoot the messenger.)
Last year we had a very interesting discussion on which is the one single code smell (biggest stinker) if eradicated, would solve 80% of the design problems in a code base. My take was that its Primitive Obsession (lack of right level abstractions) that causes majority of the problems including duplication and conditional complexity.
I've just highlighted some topics that came to my mind, but as you can see on the wiki, we have a ton of very interesting topics [many documented well there]. Its these discussions and learning that's kept me going.
What would you like to see happen more or less of with the SDTConf going forward?
Well, I'm hoping people stop confusing the conference name as the "STD Conference", which of course has a significantly different connotation! It does always garner a few laughs though, so that's never bad!
Right now during the conference, we have really intense discussions around pressing design and testing topics. We have some hands-on sessions. But not as much as I would like. I wish it can be more demonstration, than just discussions. Because when it comes to programming, its better done than talked about. Talk is cheap.
For last couple of years we've planned that before hand people could share parts of their code with design issues they are facing. With the relevant context, people to refactor/rewrite this code and use the conference at platform where different people show their solutions. This could lead to lot more learning.
Personally I think attending a conference of this quality is extremely important for all of us. Hence scaling it to different parts of the world is important. I wish more people could take the conference idea and organize it in their part of the world (similar to what is happening with Agile Coach Camp).
Any concluding thoughts you'd like to pass along to the community?
We are seeing more smaller, hands-on, practitioner-centric, peer-to-peer learning and exploration focused conferences pop-up around the globe. This is very exciting, because I believe real learning happens in these smaller conference settings. Practitioners need to find experiential means to increase their skill and perspective, and to learn from and with others. Don't wait for someone else to start one, if you're passionate about a topic, you can get something started too.