Interview with Alexey Zimarev part 2 — the continuous learner
Alexey Zimarev is a software architect and developer with a focus on domain-driven design (DDD), coaching and mentoring. He is also a contributor to the MassTransit open-source messaging framework for .NET and the organizer of the DDD Norway meetup. During his last visit in Katowice, he found time to tell his story. Read Alexey’s life journey as a developer and architect.
Sylwia: What currently has an impact on your job? What’s your next step? How do you want to learn?
Alexey: Well, I’m a continuous student. I learn all the time and luckily I’m in a community where there are a lot of smart people and people that are smarter than me. I saw the opportunity for myself when I began to speak at conferences and started my meetup — Domain-Driven Design Norway. One of the goals for me was not to show off but let others speak. Of course, to some extent, every speaker does it for their own ego, to satisfy it. People say, “I want to teach, and I want to share knowledge”, but part of it is like, “Yeah, I want people to recognize me”.
Sylwia: They want to be seen?
Alexey: Yeah, yeah. Sometimes people are shy and they do it to become less shy. For me, it was more for fun. I don’t know what part of it is ego, but I think it’s fair to say that some part of it is that. At the same time, I use it as an opportunity to hang out with people that are much smarter than me and I listen to them and I learn from them. Right now I am at a stage that I don’t learn much by reading technical books. I use a lot of books as reference materials because I can understand what they say and sometimes I need to reference someone, “OK, what does this guy think about that”. Instead of asking him or her directly, I can go to their books, so I don’t waste their time. Sometimes we really need to talk to people, because that’s how we discuss ideas, we come up with suggestions and things like that. And what I’m really interested in now is basically I observe situations when companies develop products that are on the market, but they have engineering challenges. Sometimes they say we need to develop a new version of our system, we have a lot of problems, our developments don’t work, we don’t have talents, and we can’t hire people. I am becoming more and more convinced that this usually happens because the company doesn’t have the right culture. Many people like to talk about culture, especially the managers because this is something like a buzzword. The most successful companies, like Netflix, Spotify, and Google have very strong cultures. Everyone wants to repeat their success, so they start to copy stuff. They say, “These guys have culture, so we want to have culture.” But what is your culture? “Well, we need to be enthusiastic, we need to be engaged.” This is not culture. These are just words. And words do nothing if you don’t put any meaning behind them.
Sylwia: Can you explain?
Alexey: If you look at Netflix, GitLab, or you look at Basecamp and many other companies, their culture is actually formulated in words. You can go to the website and read it. And if you don’t like the culture, if you don’t like their view of the world, their principles, and organization, you can say “no it’s not for me”. For example, someone might not like Basecamp’s culture, because they just have three weeks of holidays, they don’t let people go out and speak at conferences, but what I like is that they are a company that supports working remotely. They actually embrace this. The Netflix culture is awesome. They formulated it, they let people know what it is. A company that says, “We have a culture but I won’t tell you what it is” means they don’t have a culture. Different people are attracted by different types of culture, so it not only needs to be written, but it also needs to be there, that you can feel it. It needs to be embraced, it needs to be built. When a company wants to attract people, one of the ways is to develop the culture, exactly as Skyrise does. Create a community, start sharing knowledge, engage interest. This also creates externally-facing culture, like people are getting interested in what’s going on. People get to know experts from the industry, they hang out with them, they talk to them, they have an opportunity to learn.
Sylwia: Is it connected with continuous learning?
Alexey: Yes, continuous learning is a very important aspect of the engineering culture. And I always have this example of ING and their big transformation in recent years. They actually went from being a financial company, a bank, to becoming a technological innovation company providing financial services. They turned their IT upside-down and went from being a call center that eats money and just disturbs everyone else, to investing in IT and development as a driver for innovation. This became their business. This interesting part of engineering became their own focus and their CEO said that what actually fulfilled this transformation is that they understood the importance of engineering talent. Good engineers who are proficient or competent according to the Dreyfus model can easily outperform advanced beginners. And this is something that not every company understands. I talked to one company and told them, “Your experts get frustrated because you don’t let them do what they want to do. You think your management is smarter than them. First of all, why did you hire them? Let them do what they do. Because they are professionals they know what they’re doing. And second, if you don’t let them do what they want, at least not listen to them, they will build their own company.” And they say, “But we’ve got a bunch of advanced beginners because it’s better to let one expert go and keep three advanced beginners, who get frustrated by the experts.” Experts get frustrated only by those advanced beginners who don’t want to learn, but advanced beginners can get frustrated because they are told what to do by experts. Everyone gets frustrated, and your company is not going anywhere.
Sylwia: Yeah, and the company is crashed?
Alexey: Yes, so you need to embrace that everyone needs to at least establish a level of communication. Yes, you need to embrace the talent, but you also need to tell people, especially the advanced beginners, “You guys, we are in continuous learning mode. Listen to people that have more experience, don’t be frustrated, work together.” I heard from Tomasz, Skyrise’s Technical Project Manager, that you have a policy of putting one or two young guys on a team at the same time, but some companies put five juniors on a team and let them write code. This is never going to work.
Sylwia: Of course, juniors must learn from the leaders.
Alexey: Yes, exactly! And sometimes companies think “OK, we hired two experts, now we have twenty juniors and the two experts will help them all.” It doesn’t work. This kills productivity by obvious multitasking, context switching, interruptions. Like, if you want an expert to write code, then you need to divide their time, so they spend some of it helping beginners, but also doing their own stuff. If they spread between multiple teams just helping, they will not be able to fulfill their duties and they will feel that they are underperforming. It’s quite complicated. I have no answers, but I’m very interested in this. I was talking to a friend of mine yesterday about problems and he said, “You know Alexey, the more I work, the older I get I think all the problems in software are related to people.” I told him, “You know, Sergio, you can remove the word software. All problems are related to people.” Religious, political, in general. Everything is related to people because people create problems, people solve problems, but without people, you have no problems. We need to find effective ways that can mitigate the problems. We can never eliminate problems, but mitigate them and have a better environment. What I like the most about Netflix is the culture of developer’s happiness. If you start thinking about it, there are many aspects. Like I said, not that many interruptions, having the opportunity to learn and teach, assigning tasks that are adequate to the level of the person. If you’re an expert receive a complex task. If you’re a junior, receive a little bit easier task, but have a plan for the junior, so they don’t end up doing a task for ten years without having the opportunity to learn or without having a mentor. It doesn’t work. Allow people to play around with their technologies, have hackathons, let them go to conferences, bring experts to the company and have opportunities to do stuff.
Sylwia: You’re right, of course. What about social aspects?
Alexey: The social aspect is important but that’s not everything. Many companies concentrate only on the social part because they have no idea how to improve the engineering culture. They try to take stuff that works very broadly like it works for sales, it works for marketing, it works for finance, and they just take it and apply it to engineers. Of course, it works just as much as for anyone else, but it doesn’t embrace or improve the engineering culture, the quality of people, the knowledge, etc. This is something additional. I agree that there should be some activities that should be performed to improve the social atmosphere. That is for the whole company because usually there are no companies that only consist of developers.
Sylwia: We know that the company culture is important and I fully agree with you. We are still building our company culture here in Skyrise. We teach, we learn, we do social things too, of course. Do you have any tips for young people, for juniors, on how to start their work, their path to being a good programmer?
Alexey: I think the most important thing for young developers is to be more open-minded. There are many good books about it, for example, “Thinking, Fast and Slow” by David Kahneman that I mentioned yesterday at the talk. It is about biases and our assumptions and I think it’s very important to understand how the brain works, but also learn about knowledge acquisition, like the Dreyfus model. I think it’s important for people to understand where they are. The Dunning Kruger effect is one of the biases, because when people start to acquire knowledge, like when people start driving a car, believe that after three months they are experts. And then an accident happens a year later and they discover, “Oh, I don’t know anything.” This is actually good because sometimes people get stuck with this. The Dreyfus model says that you have a beginner, advanced beginner, proficient, competent proficient, expert. But there is a branch which doesn’t go up, it goes to the side. It’s called “expert beginner”. And it goes nowhere. And I think that’s a very big risk for companies because there’s so much demand for developers now that there is a very big risk that a young developer will become an expert beginner. He starts as a beginner, he learns a little bit and he gets stuck there because he/she thinks they know it all and the company they work for embraces them in this illusion. They stop reading, they stop going to conferences, they stop attending meetups, they stop listening to other people because they feel they know everything already.
Sylwia: It is unfortunate that people give up learning.
Alexey: Yes, this is sad, because if you read the book “Humans vs Computers” by Gojko Adzic he gives many examples of software killing people. They commit suicide because of software bugs. People do crazy things because it really affects their lives. How we develop software can have a serious impact on human life. And this is not fun, I mean like you forget to write the unit test because you think you’re an expert and you don’t want to use TDD because someone told you it’s stupid. Software tests are just like car crash tests. For cars, they have very good testing routines and it should be the same for applications to avoid barriers that can hit you in your head. When someone didn’t want to write a test, we can see how many crappy applications we have on our phones.
Sylwia: Oh yes, a lot! A lot!
Alexey: Even our biggest bank in Norway still doesn’t have a mobile app. Their mobile app is a website which is really frustrating. I think this is very important. Be eager to learn and understand and be humble and be open for new ideas, try to broaden your horizons and do not get stuck on “I do .NET with an SQL server and that’s it.” You’re not an engineer anymore. You’re just a .NET programmer with an SQL server. I can say I’m a software architect and I can design a system using any technology because I have quite a wide range of advanced tools and patterns that I can apply. I can use them like LEGO bricks to build a system. I choose the technology that is applied there and I can also offer which platform and language you use. Generally, I can advise the implementation details. I think developers can also benefit from being more elastic and more open. Learn the Domain-Driven Design, for example. And my second tip is to try to learn a functional language. At least one, just to gain a new perspective. If you’re a functional mind, try to learn an object-oriented language. Just to have a better idea of how things can be done.
Thank you very much for your time and valuable insight! It was a pleasure to talk to you.