I was reading the book Refactoring to patterns and was wondering how I can get chance to practice the skills, because without deliberate practice on new ways to refactor and use patterns, my skills won't improve.

But office work requires me to finish each task as quickly as possible. Most of the time, the project's design and architecture isn't controlled by me, I can only follow the similar style as the existing code. Sometimes there is a project with a bad design, but there is also another developer whose design skill is better than me and he already has the whole plan to refactor the project, so that I'm just following his plan. How do I get opportunities to practice?

3 Answers 3


Well to be frank you can't wait for an opportunity to come by knocking at your doorstep. If you are very much inclined in practicing the skill it would be great if you could come with your designs irrespective of what the so called better skilled developer has. Just toss your ideas and have a nice conversation on how mine would be helpful for this existing bad up design. Maybe you would fail in the first few attempts but you would learn a lot and (also seen your so called better skilled developer colleague would also have something to learn from you).

In short put your designs also on the table and know how good or bad you stand else there is no way to benchmark your skill.


Practice, practice, practice. Hobby projects are definitely a good idea. And if you want to learn, it's often better to work on someone else's open source project, that way you can learn from the patterns they employ.

I'd suggest looking into coding dojos and code katas. The whole idea behind this concept is that by practicing on well-defined manageable practice problems, you'll be better equipped when problems come up in your own code. (The websites explain this better than I did, definitely check them out.)

Side point: One essential thing that's not quite a pattern is proper habits when it comes to testing.

Also, last comment: office work requires you to finish each task as quickly as possible. If you work too fast and create a lot of bugs, you didn't finish the task, as you'll have to go back to it later. This is rework. If you don't take the necessary time to learn the proper way to do things, you'll create more work for yourself in the short term and not learn the proper patterns to improve over the long term. It's worth it both to you and to your employer that you practice proper design patterns. (That said, design patterns can often get overused and abused by people who practice them overzealously or without background understanding, but that's a separate point.)

  • Rework is kind of an interesting subject.. 37signals.com/rework is a decent book on the subject.
    – carpeliam
    Commented May 26, 2011 at 5:43
  • 1
    Oh, one more comment, and this goes along with following other people's patterns. Use the people in your office as a resource. If they have plans on how to refactor something, get them to explain their thought process and force them to teach you. If your office is not focusing on your personal professional development, then there's a problem.
    – carpeliam
    Commented May 26, 2011 at 5:46
  • +1 for the note on when a task is finished. Commented May 26, 2011 at 8:08

I think you have following options:

  • Consider to practice on non-working time - just stay at work and experiment with refactoring the code without committing the code to VCS. To do deliberate practice you don't need to commit the changes. You need to reproduce a procedure till it becomes your second nature.
  • Consider mastering communication skills to discuss with your coworkers what refactoring is more appropriate. Crucial Conversation is really helpful to understand the mechanics of a communication.
  • Pet project - create a pet project and practice your skills their. It need not to be very useful. You goal is to practice programming skills.
  • Consider to propose your services in open source project - this is more advantageous to deliberate practice as you can get feedback

Not the answer you're looking for? Browse other questions tagged or ask your own question.