From Junior to Senior. Who is a Senior Elixir Dev? - Interview with Michał Buszkiewicz, CTO at Curiosum
Elixir, a descendant of the Erlang language, is becoming increasingly popular. Michał shows us its business value, why Elixir programmers are faithful to this language, and how to develop as an Elixir programmer. Read interesting facts about Elixir!
We can say that Elixir (a functional programming language created by José Valim) is not a particularly widespread technology; meanwhile, the results of the recent Stackoverflow survey show that it's among the most loved or enjoyed languages; why so?
I believe there are a few reasons for that. First of all, if developers enjoy working with this technology, they will most likely be happy in their current jobs.
A big part of recruitment is sourcing which is "active recruitment", and it is not easy. Imagine persuading a person that is in a place where they feel comfortable and happy.
We need to offer this developer more, and that is a challenge. We've done some research which makes us offer our candidates what they need.
The second thing is that developers enjoy working with Elixir, but for the moment, the talent pool is not as large as pools of developers using other technologies that have been available for a much more extended period; simply, there are much fewer candidates using Elixir.
That's why the recruitment process for Senior Elixir Developers has to be expanded on candidates who are on a Senior level in general but might not specifically have a considerable experience in Elixir code itself. Unfortunately, that causes certain difficulties in the practical use of the talent of these people since there is not always enough time to teach them, and we don't always have enough time to focus on it as it should be done. Quite often, the synchronization of the recruitment process with sales requires hiring people who will be able to get into the project with very specific knowledge, which might be problematic.
Can we say then that in case of open job offers for the position of Senior Elixir Developer, it's quite impossible to get people interested in this job offer (even harder if these people are happy with their current job)? Is that the only way to good sourcing of candidates?
I think that often these developers simply DON'T KNOW that they should search for new challenges. So you need to create this need in their minds. I believe that the most significant impact have actions that we, as Curiosum, take - such as Elixir Meet-ups and activities related to employer branding. It's all about presence in this Elixir "ecosystem".
José Valim's Apostles? Promoting Elixir for creating web applications
During our recruitments, we often get questions: how many are you in the team, and in that moment when we reply to the candidates that we're only a dozen (and that was the case in 2021/2022), they are pretty surprised and reply: "Wow, I actually thought that you were much bigger!".
So I believe that this type of marketing, showing off Elixir as a great functional language to the world, to make this language more popular, and at the same time our sourcing activities, are the way to attract people who didn't even think before about changing their job. So they can change their mindset and might be interested in joining Curiosum.
I think people who wouldn't even look at our offer a year ago today are willing to talk with us because Curiosum has become well known in the Alchemists (Elixir programmers) world.
Code Tips in Elixir - Blog Post and TILs
We need to mention that you write valuable blog posts and TIL-s for people interested in Elixir code; Each of your blog post about Elixir (and not only!) is a precious source of information and tips. We can say that Curiosum's blog shows that our team has many different specialists from whom they can learn. So who can become their Elixir mentors?
From the beginning, the blog was supposed to show the world that we know what we do. So it helps not only in the recruitment process but also in sales. But going back to the learning topic - I think that it's not only a belief that Curiosum is a place where you can learn something from the seniors, but it also shows that in our company, we sincerely believe in sharing the knowledge. Of course, that is about people in all positions - juniors share the knowledge with other juniors, mid developers with mids, seniors with seniors, seniors with juniors and regular developers... Still, quite often, even the youngest team members have a fascinating perspective on some cases and can cause an exciting discussion on a higher level, e.g. during our weekly lightning talk sessions.
Elixir - a worthy choice for growing companies
What can we say about the business value of the Elixir programming language? First, because, as we have discussed, there are few developers, it's not a highly promoted technology; meanwhile, we know that Elixir has a high value if we speak about innovative apps.
Elixir - perfect for web applications
It turns out that Elixir, which paradoxically comes from even older technology (Erlang's ecosystem, which from the very beginning was created to respond to this type of challenge), makes it a developer-friendly form that is used to a specific structure of more popular languages. As a result, it has become a "sweet spot" between the ease of programming and the speed of creating fully functional software, making it an excellent choice for MVPs. Elixir language (created by José Valim) has now become Ruby's undisputed competitor in this field, and young startups and prospering companies are slowly realizing it.
But not only - later, when the business ideas are validated, Elixir (based on Erlang virtual machine) can also transfer it to the product that will function for years, with hundreds of thousands of users (of course, if everything goes well). This connection was missing in traditional technologies because many of them are great in the MVP phase but require the costly step of transitioning to other technologies in a moment when your business has more extensive needs when we talk about scaling. We're talking here about companies like e.g. Twitter, which switched from Ruby on Rails to Scala many years ago mainly because it needed a future-proof solution for scaling up and development speed.
Hello world - I am a Senior!
How to become a Senior software developer, and what was your experience in becoming a Senior Elixir App Developer?
It was natural, organic, we can say, with time, during practical use and several realized projects and many lines of writing code - this is an important requirement because to become a Senior, you also need to have a proven ability to re-adapt. Seniorship is a kind of continuum. You become a senior over time; it's a process where one day you have more people coming to you to ask about bits of advice instead of you going to them asking for help. In a moment when this proportion is inverted, and way more people ask you for help, that's the moment when you can finally try saying to yourself: "I'm becoming a SENIOR".
Are you a Fullstack Senior Developer or a Backend Senior Developer? How would you describe yourself?
I would describe myself as a Fullstack Developer specializing in Backend because that is the area where I feel most confident. Even though I can create Frontend, I'm much more likely to build a backend system from scratch.
Mikołaj Musioł from our HR and Szymon Soppa (CEO) told me there are two ways to become a Senior Developer in Elixir - first is the one you described, where you come from Junior to Senior as an Elixir Developer, gradually gaining experience mainly in this technology. But we have Senior Developers in different technologies; however, they can very quickly get the Elixir language on such a level to be considered Senior. Would you agree?
Subject to what I said at the very beginning, when it comes to recruiting - a combination of recruiting and sales processes - these processes do not always allow for something like this.
Suppose the pace of acquiring Elixir skills is very fast. In that case, it is possible because, in the end, the set of skills and mindset that is needed to achieve success in any programming language is very similar, not only in the Backend but also in Frontend technologies, since the complexity of the UI is so high that in fact, it requires a similar skillset as creating a Backend.
On the other hand, people with experience in other programming languages often have habits that sometimes need to be actively eliminated due to the slightly different nature of the Elixir language. Therefore some kind of mentoring in this process is required. But it's, of course, possible.
I am the classic example - my background is mainly Ruby on Rails. A way to succeed in Elixir is to understand that Elixir is a completely different language than Ruby, which is a bit of a misconception among Elixir beginners who meet it for the first time. They need to understand the difference, the consequences, what advantage it gives you, and what you must be careful about.
We currently have over a dozen Elixir Developers at various levels, and in each one of our projects, the presence of a Senior is necessary.
What is the biggest challenge for a Senior in the project? How do they differ from the challenges of a Mid developer or a Junior? What is the most difficult thing about a Senior's job?
The most important task of a Senior is to create a solid base for programmers with shorter experience, to have good working conditions. It could be compared to many other industries, working in a different capacity - it's always imperative that a person with some experience adequately prepares the environment in which you work so that people who do not necessarily have the ability to create such an environment from scratch, were able to work efficiently and follow certain well-known paths while creating these paths is precisely the task of the Senior.
I am a great supporter of "example-driven development", which means that if there are components in the system that have been created, and there is some consensus that they have been done well, a developer who gets analogical tasks should follow the examples that already exist in this project. That's why an essential part of the Senior job is making a good project kick-off from the technical side.
Another aspects of Senior's work are all kinds of inspections or audits when a project carried out elsewhere is taken over. It's important to prepare him for working in a new team, to know its condition, the common conventions that can be kept, what kind of habits should be categorically changed, and what priorities we set when it comes to the upcoming work on this project.
For example, we had such a situation in the Stakester project - our most important task at the beginning of this project was an audit, which in fact, influenced our takeover of this project. We often take over a project at a particular stage of advancement, burdened with some technical debt, and then our task is to audit it. Knowing what the client's idea for the development of this project is, we must define the biggest problems that we'll face soon, what the priorities are, what is worth "cleaning up" or refactoring before we start creating new functionalities, how to proportionally distribute the time that we can spend on getting rid of the technical issues and "cleaning" on time to create new functionalities.
Elixir for building scalable and maintainable applications
You are a co-founder of Curiosum and a CTO - what are your goals for Curiosum?
For example, would there be more projects from scratch than those where we deal with code rewriting? Or maybe you would like to acquire projects from a specific industry?
Projects created from scratch are great because you usually have full control over them. You can keep your technical debt very low by ensuring that Curiosum's high standards are always maintained. Furthermore, managing a team that knows our conventions and follows them is easy. Everything is created from scratch according to a set of conventions we set for everyone to follow; they're taught these conventions and rules by us and follow them - very importantly, they know _why_they have to be followed. On the other hand, long-term projects that have already passed the MVP stage are also precious to us because, from time to time, we can learn from their experience. Also, their stability on the market contributes greatly to our stability, which can be followed by a greater focus on sourcing projects that may be slightly riskier, but those starting from scratch are a lot more fun.
Process oriented - not only Elixir code is important!
Regarding my goals as CTO, a present goal is to lead this entire development process to perfection in a technical sense, in which we are active, mainly Elixir, Phoenix, Absinthe, React etc. We are not dogmatically closed to other technologies; however, now we believe that our priority is leading to the perfection of these projects and processes around developer processes. I'm talking about planning and managing a team, about organizing the work - this is a field which I treat as part of the main goal, which is customer satisfaction. Still, it is also an area that supports development, which is why I care about its constant growth.
All this while maintaining the principle rules that we all strongly believe in - the "healthy minimalism" and a kind of "less is more" summing up, we generally prefer to reduce the overhead associated with process management to an unnecessary minimum - we do not want to add elements that will distract attention from what is really important. We focus only on what is NECESSARY to support the development process properly.
Is there any group of projects that can be acquired for Curiosum that you would be particularly interested in?
Personally, I dream about a larger entrance into IoT because Elixir offers quite a lot of possibilities for this purpose thanks to Nerves - and it would be equally interesting to enter the market with a specific IoT product developed in-house, as with developing some software that will be a deployable product itself.
Is it worth applying for a job in Curiosum?
Of course, we invite not only seniors but also Elixir Developers of any experience level!