Software development and all related stuff is a joy you will never want to give up. But the truth is, you will sometimes feel exhausted and need to head to different directions in your career. This post is mostly about my personal experience and I will try to share couple of advices with you.
Some Personal Background
My software career started when I was at the college in the year 2000 as a part-time junior developer in a small software company. I learned couple of tricks during my time there. Within couple of years that small company growed into a notable software house and got some major contracts. That company was also my first professional employer. We had a really great team back then (most of the guys are still in software business) and I learned much from these guys. Then I started to work for my current employer and it has been 12 years.
Spending 12 years of your career for the same employer is a big deal, especially when the major business of your employer is not software. This brings lots of opportunities if you will look at the bright side. You will be part of the journey and feel comfortable with most of the aspects of your job, you may get promotions, you may build very strong social relationships with your co-workers, last but not least, you will be very comfortable with the business domain. But, on the dark side frustations will bug you from time to time. You will have to overcome performance and job satisfaction issues, you will question your career and your employer, you will get tired of dealing with the same business domain.
If you allocate enough time analyzing your day to day activities and referencing to the past,when appropriate, then your frustrations will ignite you to place some new things into your professinal life. But be carefull and do not wait up to the final drop in the bucket.
Contribute with a personal touch
Regardless of your job description and responsibilities always look for things you can contribute to. Whether this is a piece of code or a business process. As you spend more time on similar tasks you will gain confidence and expertise on various aspects of some bigger and complex things. You need to be an active observer and not only spend time on your tasks but also try to understand things other people do.
In terms of coding and software development, spending too much time at the same place usually means being expert on couple of modules. This is nearly inevitable when software development is not the primary business of your employer. But still there are lots of opportunities for contributing. You may have to integrate with modules developed by someone else or people may integrate with your modules. Do not hesitate to read code written by someone else, always strive for acquiring the knowledge one level below the surface.
In the era of very flexible source code control systems,like Git, creating a personal branch and experimenting with the code is a no brainer. Start with the most known part to you and dive deeper step by step. Ask questions to people instead of judging with assumptions. This will lower the social barriers. Ask people for code reviews frequently and give them a chance to get familiar with your proposed contribution. Follow the contribution, code formatting and other guidelines if there are any.
If everything goes well your contribution will be merged. This will have lots of positive outcomes both in personal and social contexts. To name few of them
- You will have a peak in job satisfaction
- You may get promotion or transfer to a new team
- You may build new relations with other developers
- You may get contributions to your own code
What if your contribution gets rejected? You should always try to look at the bright side, you may still have some positive outcomes (plus to the ones I listed above) like
- Reading code written by someone else will make you a better developer
- You may grow interest to learn a new language, framework or tool
- You may acquire some good practices and see some bad ones to avoid
- With a deeper knowledge you may improve your code to provide better service to other modules or optimize your code to use other services more effectively
This one is closely related with the previous section, because at some point your contributions may trigger a disruption and you should be prepared for this. If you are motivated to contribute as much as possible this may disrupt other developers. Disruption does not have to be on purpose and pople may feel disrupted regardless of your intention. You may utilize a different coding style or framework in your contribution and that may be the source of disruption. Watch out for this feeling and know your methods to manage that. Some methods I personally value are
- Develop good communication skills
- Do not judge people for their choices
- Be open, both with your ideas and your code
- Prove your intention with code rather than fuzzy ideas or theory
- Be clear about which apsect you are improving; maintainability, code reuse, performance, efficiency
- Be open for feedback and improve your proposition if needed
- Do not push too hard to get your thing accepted
- Be carefull on analyzing both technical and soft (personal, team, job description etc) impacts of your proposition
Explore the business
What I whole hartedly belive is that, good software developers should always explore the business and try to find ways to improve the code they develop. Whether this is a business process or an end user, I would advise you to keep an eye on how your code is interacting with the real world.
Another aspect of exploring the business is that, you may enlighten the business people or your users with not so well known functions available in the software. Organizations change and that is also true for the users. Most of the time valuable knowledge is locked down in the darkest corners of some sort of documentation or captured by few people.
You should look for opportunities to know the business better. Here are couple of advices on exploring the business
- Spend some time to evaluate the business requirements. You may get requirements on pills from business analyists or business owners. Do not get confused by this fact, still you should spend some time to understand the whole process, motivating factors for the requirments at hand and such details. Capturing and understanding the big picture will improve you and your code.
- Ask for business process documents if available. If no business process documentation is available spend some time to create your own focused around the module or system you are responsible for. This practice will ease your maintainance efforts.
- Do not hesitate to attend business meetings. If there are business analysts ask them kindly to include you in critical decision making or requirement gathering meetings.
- Ask question, lots of questions. Try to use a clear language and make sure that your questions are capturing the business context.
- Look for the right person or team to ask questions. Distilled information (knowledge if you say so) is always easier to digest.
- Feel confident. So confident that you can contact with the top level management to discuss or ask questions
Keep investing on your coding skills
Some things mentioned in this section may not be legal or appropriate for your employer but still you should take the facts highlighted below into consideration
Working for the same employer or handling similar task for a long time has very negative effects on your professional development unless you take some counter measures. I would advise you to think about how you can automate or spend less time on mundane and recurring tasks. Such tasks may include adding a column to a database table, deploying a change to an environment or publishing a configuration change into production. You will probably use same programming languages and tools for years. If you succeed to find a method to handle such tasks with less effort you will earn some bonus time and invest that time on new professional adventures.
Here are couple of advices on potential new adventures for you
- Contribute to open source projects
- Work on your own pet projects
- Write technical blog posts or record technical podcast
- Answer questions on sites like Stackoverflow
- Attend coding challenges and hackathons
- Attend or organize comunity events
- Organize internal workshops
- Keep reading on programming related staff
- Experiment with new programming languages, frameworks, tools and technologies
Trust me, all the activities I listed above will make positive effect both on your daily tasks and your professional career.
A manager with coding skills
If you approach coding and software development as a passion you can skip this section. But if you are in early days of your career or confused keep reading
You will get promotions during your career and these promotions will move you away from actual code. You will start as a junior developer then you will become a senior developer and at a point you will be promoted as a team lead and couple of other possible technical management positions. You will feel comfortable up to the point when you become a midlevel manager. Then you will not see or deal with real code and this will become an issue if you are passionate programmer at heart. Confusion will bug your head for so many hours that you will have hard times to concentrate on the management tasks.
All of the confusion depicted above has two alternative solutions. The first one is, you can accept your new career path and spend your whole time on improving your managerial skills. You can attend some trainings organized by your emplyer, you can spend some money and get some certifications, you can read management books. The second one is, while executing the first solution you can spend a fraction of your business day on programming related activities. Here are my advices for the second one
- If possible attend code review session of the development teams. This is a little bit risky since developers do not want managers to butt in internal affairs like code reviews. You should declare your intention clearly and see if that intention is socially OK for the team
- Keep communicating with your software architects and team leads
- Get the design documents and spend some time on understanding the technical design
- Hold routine technical meetings with your team and
- Keep investing on your coding skills
Communication, focusing on different aspects of the business, continuous improvement on your coding skills will help you have a longer programming career whether this is for money or passion. Strive for crystal clear career path and do not forget to evaluate yourself.