This post is a reflection of my 3+ years as a Technology Analyst in Citi, as well as my future career aspirations. It's going to be pretty wordy compared to the rest because I can't share any pictures of internal banking applications. 👀
Overview
I was a part of Citi's graduate program, and this was my first job since graduating from university. During my time there, I was placed in teams on a rotation basis, moving to a different team each year.
During my first and third year, I was a Java backend developer for the Treasury and Trade Solutions team, as well as the Foreign Exchange team respectively. I worked on developing backend features, using Java Springboot framework. I wrote REST APIs to connect our application to our database, which was held in Microsoft Server. I was involved in development, as well as unit and integration testing. I wrote test cases with jUnit, as well as cucumber framework. We used agile methodology and JIRA to keep track of our progress as well as delegate tasks.
During my second year, I was a dashboard developer in the Private Banking team. I developed dashboards using Tableau, and handled a migration of data from SAP business objects to Tableau.
Learning Outcomes
I am grateful for the opportunity to work in different teams, as it gives me different perspectives and allows me to expand my skillset in different ways. Here are a few takeaways I have:
- Working on large scale applications
As compared to university projects, these applications were to be used by thousands of clients and staff, and hence needed a much more sophisticated architecture and design. I noticed the importance of proper documentation and segmentation of our code. We used microservices in our application, which was good as it improved scalability, fault isolation and independent deployments. Working on such large scale applications also met we had to be careful with every change and deployment, as a mistake in any microservice could impact the entire application. Hence, we had to create change requests and gain approval for any changes we made to the code base.
With that being said, testing was a large part of our jobs. I conducted unit and integration testing, to make sure every part of each feature could work independently and together with other components. Most unit cases were written in jUnit, and behavior-testing was done with cucumber framework. Being involved in testing taught me how to catch every edge case, and ensure that my code was efficient and functional.
In each of my projects, my team consisted of 6-10 engineers, mainly located in Singapore and India. I learnt how to work with people of different backgrounds, and communicated effectively despite time differences. We were responsible for different parts of the application, but had to understand what everyone was working on in order to avoid conflicts in code and coordinate deployments.
We used JIRA to keep track of our tasks. Using the JIRA dashboard, we were able to identify what everyone was working on, and which components were lacking behind and perhaps needed more manpower. We split our tasks according to story points, which was decided on together during our sprint planning meetings. We adopted the agile methodology, and had scrum daily to update each other on our progress, and whether we were facing any blockers. These meetings were very helpful because it enabled us to track our overall progress, as well as provide assistance if anyone was facing any difficulties. I also had the opportunity of being scrum master for a few sprints, and it strengthened my organisational skills.
Future Aspirations
While I have definitely grown as a software developer, I recognise that there are areas that I would like to further improve in. After leaving Citi, I had the time to reflect on my experience and think through what I would like to experience in my next role.
- System Architecture and Design
I believe that my core Java skills have improved greatly, and am confident in coding in Java at the moment. However, I would like to be able to be involved in designing solutions, as well as planning the architecture or algorithm of applications. During my time at Citi, I felt that I was mainly developing new features in existing applications, and mostly were tasks assigned by my tech lead. Hence, I would like the opportunity to be more involved in the 'big picture', and give input on system architecture and design.
I have been to quite a few interviews in the last few months, and a common feedback I received is 'You have good coding skills as well as a good resume, however it would be good if you knew more about system design and concepts'. Since then, I have been reading up on and studying more on this aspect, and look forward to be able to experience this process in my next role.
- Greater Ownership in Projects
I am someone who is result driven, and enjoy the satisfaction of seeing my code 'come to life'. To be honest, there was a period that I found my job a little mundane. Looking back, it was because I felt that to an extent my work was not impactful enough within such a large organization. As we were working on existing applications, I felt that I did not take enough ownership of my work. I took a lot of pride in my past projects (as seen in my other posts) as they were built from scratch and I could visually see the result of my hard work.
I acknowledge that my mindset was not the best, and I should have seen how every small change was still a positive impact to the overall application. Nonetheless in my next role, I hope to be able to contribute significantly to whichever project I am part of, and deliver a product that I can be proud of.
Conclusions
Truly appreciate everyone that has read my post up until this point! It has been a great few months of self reflection, taking a break, pursuing my other interests, and I am more ready that ever to be back as a software developer. To any potential employers, I hope to be given the opportunity to work hard for and contribute to your company :-)
Comments
Post a Comment