Supporting the professional growth of the team

As an Engineering Manager I take the personal and professional growth of my direct reports very seriously. It is one of my core duties to make sure that, in my capacity, I have enabled them to learn continuously and advance their professional and soft skills. In this blog post I will share with you my formula how I support the professional growth of the team.

Understand who wants what

Every person is unique. Just admitting that defines the level of attention required to individualize the learning and growth experience. What exactly do I mean by that? Let us suppose you have a team member who is very much into data solutions. But, in their daily job, you constantly assign them frontend tasks. Maybe they will do the job, but I’m sure they will not operate at their optimal level if they don’t like frontend development.

With every one of my team members I do regular monthly (sometimes more often) 1:1 meetings. These meetings usually are for me to listen and them to talk. They are for me to understand what excites them, what bothers them, what makes them tick. I take notes and with every meeting I review my notes to check for deviations or changes. I also use these meetings to understand what interests them to understand them better personally and their professional interests.

Understanding the industry and market trends

I think it is of utmost importance for an Engineering Manager to be well acquainted with the trends in the industry and the market. In our vibrant industry, it is at the same time very difficult for us to be able to catch everything what is happening around us. Everyday we have a new framework coming up, a new cloud service, a new programming language update, and keeping up is a real challenge, so we do need to be able to filter critically the information that will be important for our future.

What has worked for me so far is to organise and classify information digestion. I use Twitter and LinkeIn to follow people behind the technologies of interest. I also follow the companies and communities behind the technologies that are in my and my teams area of interest.

This way I can keep myself up to date with what is in trend, what is being pushed and developed from big companies, therefore worth to invest time in.

Finding synergies with our company projects

Of course just knowing what are the trends and what the team members want to learn does not lead us anywhere. We have to match these two to create growth. So, how can we make these two ends meet?

We are lucky that the part of business we work in is very vibrant. We have more projects and backlog that we can manage to complete. In this backlog I constantly look to find opportunities where we can solve our business problems with innovative cutting edge solutions. I try to create opportunities where our important business goals are achieved by team mates implementing solutions with the latest technologies they enjoy. This way, a growth opportunity for the developers is created as well as our company benefits from innovative and up to date technical solutions. Win-win situation 🙂

Enabling the team to jump on these opportunities

Of course, when adopting a new technology, being a new version of a language, of a framework, or a new tool, this would mean that the team has to spend time learning it. Therefore, I as a manager have to critically evaluate these opportunities to see if this makes sense. If that new thing we want to adopt help us move faster, safer or further in our work. It should make sense from the business perspective and it should make sense from the professional growth perspective as well. When these two ends meet, I seize these opportunities.

Conclusion

As managers we should help our colleagues to be very attractive for the market, but also should create an environment that the employees would not like to leave.

As employees, we always have to think from the perspective that we are hired to solve the business problems and bring value to the company. But also we have to keep in mind that without continuous learning and improvement our value bringing capabilities diminish by time.

As the famous quote goes:

CFO asks CEO: “What happens if we invest in developing our people and then they leave us?” CEO: “ What happens if we don’t, and they stay?”

Are Azure Certifications Valuable?

It has been years since I stopped taking certification exams and lately I decided to get back to that adventure. In September 2020 I passed exams to be recognised as Microsoft Certified Azure Solutions Architect Expert.

Arian Celina - Certified Azure Solutions Architect Expert

Before and after passing the exam, I asked myself the question which I have seen many people ask as well; Are Azure Certifications valuable? I believe the question is applicable not only for Azure Certifications, but in general for any industry certification. Are they valued by the community and employers? Do they make a difference in your career? I have also written about this topic in the past, and yet it seems the same questions are still coming up. Let me share my updated opinion with you.

From the motivational perspective, it is very important to clarify the answer to those questions so we know why we are putting all that effort to learn and prepare for the exams. I also think these questions should be rephrased with a reversed perspective. Before we modify question, let us first discuss about the value itself.

What is the value and who defines it? Who can tell if a certification is valuable? I think think there is no single source of truth for that. From experience, I have encountered employers and peers who value a certified professional more than someone who is not certified. I have also seen opposite. As someone who have interviewed more than 100 candidates so far, I can say both can be right and wrong.

I have met certified candidates who have not been able to defend their title with knowledge. So I have met people who were not certified on a topic but were more knowledgeable than their certified peers. I have also met certified people who were subject matter experts and knew their topic in detail, kind of detail that we do not easily learn by randomly playing with the technology.

When I reflect on my late Azure certification journey but also on my previous certifications for .NET and Java, what I remember is that while preparing for the exams I have often learned hidden details about the topics which I have not encountered during the daily work. Those hidden details then later have quite often have saved me time or effort and enabled me to bring better solutions into life. This in itself is a value for me.

Considering this, the revised question I think we need to ask ourselves would be:

What do we gain from this certification?


In my opinion, we should not get certified so other people value us more because we hold that title. We should do certifications to learn better the technology we like. Of course one can do that without taking the exams and without getting certified. It’s just that taking the exams pushes you to follow a certain curricula which is reviewed by experts and that often gives more structure to the learning.

I have been using Azure for years and have quite some experience deploying and running web applications on various forms of workloads, containerised and non-containerised. Yet, when I took the late exams for Azure Cloud Solutions Architect Expert certification, I learned a lot about some not so familiar topics to me, like migrations of Virtual Machines from on-premise datacenter to Azure, about backing up Virtual Machines, or about Express Routes. Taking those exams pushed me to learn more about those topics which probably I would not in my daily work.

As a conclusion, in my opinion industry certifications are valuable as they push us to get better at that topic and this inherently will make us a more valuable contributor to our team, company and community. When we do that, whether the certification is valued by our potential future employers plays a smaller role in answering this question.

My language learning framework

The most important lesson that I have learned in my career of almost 15 years in software development is that programming languages are just tools to solve real life or business problems. About 5 years ago I was doing full time .NET, then I jumped to Java for about two years, then I switched to Ruby and Rails, and just recently I started using Kotlin to create two microservices (don’t ask me why, the business needed it ;)).

Because of this, there is no point whatsoever to be bound to a language/platform religiously. The languages are tools but it’s the core knowledge of computer science and software development practices that prevail.

These changes have been inspired by different rationales, sometimes influenced by the employer and sometimes by the economic conditions of the runtime environment. E.g. hosting a Java web application during 2006 was way more expensive than a PHP application, therefore, I used PHP as a primary language for my web facing pet projects. So during my career so far, I have used Java, .NET, PHP and Ruby as my core languages and also have implemented small solutions using Kotlin, Javascript, and Python.

To adapt to this changing environment of ours I have noticed I had created a framework, which I call my language learning framework. The framework itself is not about the language per se, but about the whole ecosystem around that language. It came as a result of identifying unchanging things around any language ecosystem. E.g. no matter the type of language, there is a way to deal with strings, numbers or arrays. Or the language has some sort of collections.

With almost every language that I have used, I have had the need to also learn a framework to develop web applications, a framework to do testing, and other common things around the application. So out of this experience, here I share with you my language learning framework. It lists the things I try to learn or pay attention to when I start learning a new language.

I. Language
1. Runtime & ecosystem (general knowledge)
2. Syntax
3. Data types (if there are types)
4. Main constructs
4.1. packages/modules, classes and methods/functions
4.2. loops & conditioning
4.3. arrays
5. Core libraries
5.1. String manipulations
5.2. collections (lists, arrays, maps, sets)
5.3. math (rounding, sqrt, pow, PI)
5.4. important packages/gems/etc. and any language/platform specific library
II. Frameworks
1. Application development (evaluate popular ones and pick one)
2. Testing (unit & integration)
3. Main design patterns and in that language
III. Toolset & Other
1. IDE platform specifics
2. CI/CD
3. Deployment (does the docker & Kubernetes work or is there anything platform specific)
4. Community
5. important learning resources

Some of these items on the list are dead clear so you just follow it, but some of them are hard, like choosing which framework to use. How do you choose which framework to pick. Well, in those cases, I use different inputs to make my decision but most often it is an educated guess. What I consider is, I ask my colleagues/friends if they have experience with any of the ones I am considering and get their opinions. I also evaluate possible blog posts about them and also try to measure the popularity by checking the number of contributors, how often does a major version gets released, how many job openings I find requiring that framework, and based on all these inputs I narrow my list to two options. Then I try both of them with a certain simple scenario and I try to evaluate how easily I could implement that scenario and get a feeling of both and then decide. Out of all the factors I consider, how much I like it and how many job vacancies are there requiring that framework are two criteria that weigh most with me. The pleasure to work with is very important for me, but also having an opportunity to use it (have an employer/business which actually uses the framework) is also important in my opinion.

One important thing is, when I try to jump on a new language, I try to do all these steps in a relatively short period, potentially with max 2-3 months, and then try to repeat it at least 2 times with 2-3 sample projects. In this way I make it possible for my brain to remember it, otherwise, if it takes too long to go through the list, I forget things in between and the end result is not satisfactory.

This is not a definitive list and doesn’t include everything we need to learn to be productive in one language/platform, but it certainly serves as a good starting point for me when I want to jump into a new language.

Do you have a different approach? Share with us!

How to unleash employee creativity

At my current company, Springer Nature, we have a great benefit of having the freedom to dedicate 10 percent of our work time working for a side project, learn something new, or on anything that can help us learn something new. Our employer gave us this freedom so we can grow personally and professionally, but one observation I have had during these months that we are practicing this was that it also helps to unleash employee creativity.

How we do it?

This initiative firstly started as a Hack Day for developers. Then we renamed it to “10 percent time” so it can be more inclusive to other profiles that are part of our department, such as UI & UX designers, PMs, and POs. We spend every second Friday of the month by doing something other than work related stuff, something that would in one way or another help us learn something new. Sometimes we do an online course, test that new version of a library we use every day, evaluate a new framework or even learn a new programming language. Beginning of the day we do a joint stand up where we share our plans for that day with other participants. Sometimes someone likes somebody’s idea and we join forces for that day to create something awesome. By the end of the day, we gather together and share what we have created and what did we learn. Some do a demo, some showcase their code and some just summarize their learnings. During this sharing session often people get the inspiration for their next hack day, or sometimes we realize that a presented idea could be of a benefit for the company to grow as a project and we pitch it to our colleagues and management.

What did we do during these days?

During the previous Hack Day, one of my colleagues did create a simple  NodeJS CRUD API as she wanted to learn NodeJS. On the other side, as I usually do backend stuff, from time to time I am quite interested to learn things about frontend. For a long time, I wanted to learn Vue.js, so I volunteered to create the frontend for that API. During those few hours of coding, we managed to do a simple Vue.js application and implement a frontend for CRUD operations of that API. The code can be found at https://github.com/acelina/books-fe GitHub repo. Of course, I didn’t become proficient in Vue.js in one day, but next time I need a frontend for my app, at least I know where to start and I value this.

In another case, me and a colleague of mine started a Hack Day project to improve the process of managing code challenges for our developer candidates. We worked on this project for  three Hack Days. The result was an application that included features like managing the automatic creation of a GitHub repo for a candidate, including there her code challenge and give her the privileges to commit to that repo. It also included the feature to manage the workflow of submission, so when the candidate creates a PR of her finished code challenge, the application will remove her from project collaborators and notifies us in a Slack channel that a submission is ready to be reviewed. It was a three fun Hack Days for two of us and it resulted in a production-ready application which eliminated manual labor. There are several other successful results which came out of this 10 percent time.

What we achieved?

I understand that the projects we do during these days are never ready for production, but we achieved to create a culture of sharing the knowledge with others and by it to foster employee creativity. This 10 percent time creates space for us to experiments with things we don’t have the time to experiment during our regular work days because of deadlines or priorities. It also helps us to grow professionally and personally. Sometimes it results in a useful thing for the company as well, and most importantly it helps us to unleash our creativity while having fun. As a developer, I value this a lot in a company, and I would recommend every company to start practicing it. You never know where brilliant ideas come from!