After one year of working as a consultant at Thoughtworks, I’ve seen many colleagues stand out in projects. This is regardless of their technical knowledge or their time spent in the company. I’ve looked up to these people and tried to find out the ‘secret ingredient’ that makes them stand out. By talking to them and attending coaching meetings, I found these 5 tips on how I could do a good job on my project. I hope they help you too!
When I started studying IT, I worked in places where we all had to follow several processes and everything was very defined: requirements elicitation and analysis, developing, testing, approval etc. The goal of the projects was always very clear: to deliver the software and make the client happy.
But I’ve found more than just one goal at Thoughtworks projects. There is no formal definition for it, but today I see the projects in three categories: social projects, internal projects, and client projects. The social projects obviously have the goal of contributing to the development of society; the internal ones and the ones for clients have some very interesting differences.
In the client projects, the goal is like in other companies: to make the client happy. What that includes can differ depending on the project, because we care about developing the client's business - maybe by building frameworks or coaching their developers; but in the end, our goal is simple: delivering software.
In the internal projects, however, apart from all that we also have to pass our development culture on to the team. If there are senior and junior developers, the seniors are expected to teach about pairing, code quality, continuous delivery and all other aspects that form our software development culture; that process of passing on knowledge may very well delay delivery, but it builds capability.
Once you've figured out the goal of the project, the second tip is to figure out what is your goal within the project.
Different projects have different goals, and consequently, different people have different goals within the projects. In an internal project, your goal can vary, from delivering stories to coaching (which includes teaching concepts on code quality, how to give good feedback, etc.). Not that such opportunities don't exist within a client project (sometimes, you may even have the opportunity of coaching the client's developers!), but the pressure of delivering the software can be a bit heavy.
As a junior developer in my first project, my goal was clear: to absorb the all the knowledge I could from everybody in the team! Of course, with time, project goals can change. While working for a remote client, my goals drifted: from traveling to meet the client, to pairing with the developers there, teaching a bit of what I'd learned. After achieving all that, my goal became to deliver stories, to be productive and to contribute to the development of the client.
It may sound a little repetitive, but there is a good difference between understanding your goals and knowing how to actually reach them.
The first story I played in the project was responsible for creating some columns in a table in the graphic interface of the website. Back then, I didn't know a thing about the framework used in the front-end: AngularJS. My goal was set and I knew how to reach it - by studying AngularJS!
Talking to my coach (and today also with my coachee) taught me to ask some very pertinent questions about understanding and reaching goals. The first one was, "What are the small steps to reach this goal?" With that question answered (for example: finding a good online tutorial for AngularJS, such as egghead), reaching that goal that once seemed so big already seems a bit easier, right?
Another common question was "How do I measure my growth?". Measuring what you want to reach can be very subjective, especially when your goal involves other people. However, if you set smaller sub-goals and measure at every step, your motivation increases every time these goals are achieved.
The third question, which leads us to the next tip, is "Who will this impact?"
Sometimes it can be just yourself, and there's nothing wrong with that! Sometimes we want to learn a new framework, improve our communication skills or learn a bit more about functional programming, and we can't see how that's going to impact other people. It is important to know that even when we have a goal that is more individual, (learning angular JS, for instance) we can still impact other people.
For instance, my colleague had a (bold) goal of rewriting the whole codebase of the project and applied concepts of functional programming to increase the quality and extensibility of the code. When this was done, many people were impacted: the team started working faster, the client was very pleased, the client's trust on the team was increased.
"How do you know if your goal has been reached?" is the last question about goals that I learned in my coaching sessions. When I asked myself this, I also understood how I could do my bit and share my learnings: I'll know I've reached my goal when I can present a talk on AngularJS to the client's developers.
Sharing would mean you make your work visible. And no, I’m not talking about being arrogant and shouting out that you did something!
At Thoughtworks, we have a culture of sharing knowledge with other people (practices such as lunch and learn, the coaching program, LevelUp, TWU, only to name a few) so they can grow like we did. When you share your accomplishments with other people, you become a go-to person in the subject, not only to answer questions, but this gives you more opportunities to grow..
And the most important part in generating visibility is to give credit to the people that participated in the process, be it a person who taught you something or simply played a story so you could spend that time studying something!
Disclaimer: The statements and opinions expressed in this article are those of the author(s) and do not necessarily reflect the positions of Thoughtworks.