A couple of weeks ago I was working on Tic tac toe. Implementing a lot of the techniques that I had learned while developing the echo server.
I found the echo server challenging because I was learning a lot of new concepts concurrently, whilst at the same time implementing what I was learning.
Tic tac toe(TTT) felt like I was rushing and wasn’t learning much about clean system architecture. This perhaps because I had an idea of each piece of the system. A board responsible for board state, computer player class responsible for computer moves, game class responsible for interactions between these objects.
What I did learn a lot with TTT was at the code level. How to write cleaner code, I’m still far from where I want to be, but I have seen improvements to my code compared to my TTT Ruby version 6 months age. My speed of delivering stories needs improving, this is perhaps related to how I estimate, ergo that needs improving too.
I felt too many times I experienced paralysis, I wanted each line of code to be perfect, which is utterly ridiculous. I’m learning to accept my code, to trust that my unit tests will allow me to refactor it later.
Last week I started my Contacts management app(still using C sharp).
A week later I can say I’ve learnt a lot about design and the pain of not only making a mistake, but fixing the mistake late. Yes refactoring is an option however the pressure of rapidly approaching deadline, it becomes harder to think clearly. You think, I won’t refactor this now but later…… Later never arrives. A principle I should remember is to to steadily add value by estimating diligently and working at a sustainable pace.