I read Andy Hunt's recent book, Pragmatic Thinking and Learning, in which he talked about the Dreyfus model for skill acquisition. I did some reflection on where I stand with my simple design and testing skills. I think I am entering the competent stage; I am always learning, but I haven't experienced enough to have reliable instincts for what to do in every novel situation. I have a sense of when a design feels wrong, but I sometimes struggle to express exactly what the problem is or how to fix it. Sometimes I feel like I still need guidance to get me started in the right direction. Unfortunately there often isn't a master on the team to provide that guidance, so we competent-beginner-types are on our own day to day to learn from our mistakes and glean what we can from the experiences of others.
Currently my team of competent-beginners is facing several challenges and that leads me to ask the following questions: how do you incrementally improve a gigantic legacy project that is neither simply designed nor well tested? What should one focus on? When do you know you have to scrap it and start over? Theoretically, if you are starting from scratch, do you think is it possible for a group of less than expert developers to produce reasonably simple design by following a set of guidelines?
Ultimately I want to master simple design and I want to know how to effectively test software. I have no official power to hire anyone or to change the way that we work in my organization or even to set guidelines for how we design and test, but I believe I can have a positive influence. I want to be a resource for my team and help them learn as well. With that in mind I have one final question for the community: am I asking the right questions?