I recently passed my probation period at Elastic which, of course, I’m remarkably pleased about! In this post, I wanted to attempt three things. Firstly, to encourage every developer out there to dream big and realise that you can accomplish anything you put your mind to. I’m now in a dream role and if I can do that, you can too! Secondly, to attempt to satisfy a few questions I’ve had about imposter syndrome. Finally, to share my journey to Elastic and how I feel since joining.
It was a big decision to leave my previous employment with Madgex who I’d been with for five years. In fact, Madgex was my first fulltime software developer job. I’ve been developing .NET software since its initial release in 2002. However, much of that time was either as a secondary role or as a self-employed side business.
As a bit of background, I’m proud to be a self-taught developer, having never studied computer science at university. In fact, I never attended university at all. After being offered a permanent position with my then part-time employer, I turned down some placements to continue on as their desktop and server technician. I’d always seen myself going to university, so it was a tough choice at the time. However, after studying the syllabi, I realised that the “IT” courses were quite outdated and didn’t seem applicable to what I wanted to learn. My employer said that they would pay for an open university course or any equivalent training I wanted if I chose to stay with them. In the end, I decided to take some Microsoft courses and earned myself an MCSE. This practical training proved very valuable. That said, over the years, I’ve often worried about the fact I didn’t qualify with a university degree.
This has come up as a question on Twitter a few times with other people worried about the lack of a degree. I now realise that if all a company is looking for is a piece of paper, they are quite short-sighted. Sure, if I go to the hospital, I prefer a doctor with a medical degree! But, in the tech industry, it moves so fast that degrees seem to go out of date just as quickly. That’s not to say degrees from the right university won’t be valuable, but I don’t view them as a hard requirement. If you’re like me and don’t have a degree, don’t let it put you off applying for roles. Own it and explain what you’ve learned and how you’ve gained your experience. If the employer can’t value that enough to get past the requirement for a degree, so be it, there are other employers out there for you!
Five and a half years ago, I decided to leave a relatively senior management position for a global outsource provider and attempt to become a full-time developer. At this period in my life, I worked extremely long hours. I found less and less satisfaction due to the way the company was operating. Something that kept me somewhat sane was my side work as an independent software developer. I was working for a couple of clients to develop and maintain bespoke ASP.NET projects for them. While I was often exhausted, I looked forward to spending some time with code and adding new features for them.
After over a year of working this way, I decided, with the help of my supporting wife, that I should perhaps focus on the thing I loved and pursue a full-time software developer role. I started searching and reached out to a couple of recruiters. Most of the roles coming up were full-stack, and I was really after a mainly backend developer role. After a couple of telephone interviews which I decided not to pursue, I was sent a job spec for a position at Madgex. It sounded exactly like the role I was after, so I applied and was very excited to get offered an interview. The invitation to interview was surprising since my CV was relatively light on development experience. I was frankly not expecting to get many interviews.
The interview process itself was great. I immediately liked the company’s feel, and the people who interviewed me were also very friendly. I’m not one for embellishing on the truth, and I remember being entirely frank in the interview. I explained what I knew, what I did to teach myself and how passionate I was. I also said outright that I had no experience of coding on a team and was self-taught. I said that I was willing to work hard and learn, but not to employ me if they needed an experienced full-time developer from day one. I was privileged to have a full-time, well-paid job, so I was more concerned with finding the right fit for both parties than just landing the job. I didn’t want to join somewhere where their expectations were different from what I could deliver. Fortunately for me, this didn’t put them off from hiring me! When I was offered the job, I jumped for it, taking a significant pay cut compared to my management position. Happiness and a better work/life balance were more important than the salary difference.
After joining Madgex, in the first few weeks, I had strong imposter syndrome. The developers there were very talented, and the codebase was far more significant than I’d worked with before. I learned a lot about working as part of a team, developing large SaaS products and working with build automation. The first months were a steep learning curve, but it turned out my initial imposter syndrome was misplaced. After a few weeks, I could even suggest improvements based on the things I had learned before joining. As I’ve mentioned, I was passionate about development. I listened to all of the podcasts I could, including the great .NET Rocks Show. I also watched all of the recordings from Microsoft developer events and studied through Pluralsight and other online sources such as blogs. All of this meant I had absorbed ideas which I could share with my team. It’s important to remember this when joining a new role or company. We all have something to bring to the table. It’s also one reason why diversity and inclusion in the software industry are crucial if we want to build great products.
My five years at Madgex flew by, with me getting promoted to senior developer after nearly two years of being with the company. I continued my eager learning all through my time there. Also, I started blogging more regularly about what I was learning. I was fortunate to be on a team working on a greenfield project, so we had the chance to use new tech, introducing the company to Docker and .NET Core. I started my public speaking career while at Madgex, facing a big fear of mine. I also founded a meetup group for .NET developers. All of these were things I had never imagined myself doing. Many things happened in those five years, which I could never have dreamed of. I was awarded Microsoft MVP in developer technologies. I was able to visit both Microsoft and Amazon in Seattle. I was invited to speak as a guest on .NET Rocks at the same event where I also got to share the main stage with Scott Guthrie and present to a room of 1,000 people. I’ve previously written more about that journey. I’d even applied to become a Pluralsight author and was excited to be accepted by them. More imposter syndrome heading my way as I started on my first course with the! Looking back, it’s a lot for five years.
I’m incredibly proud of these achievements, but I share them here because I want to encourage all developers reading this, that anything is possible. Some of it requires hard work and time outside of your 9 to 5 hours, but consider this an investment. I was happy to invest that time because honestly, I’ve enjoyed every moment. I recommend you set yourself some objectives and consciously go after them. Think big, and you’ll be surprised by what you can achieve! I also want to stress that you need to balance your time and remember to give yourself breaks when you need them. Don’t go after everything at once and burn out.
To move the story along, let me get to the current chapter and yet another surprise opportunity. Mid-way through the 2020 global pandemic, I was contacted by Martijn Laarman, who I’d previously met at a conference in the Netherlands. We’d also spoken to one another over on Twitter. Martijn mentioned that Elastic was hiring for a .NET engineer to work on the .NET client. Over the last few years, I’ve received a fair number of job referrals, especially since becoming an MVP and Pluralsight author. Most of which I’d not really looked at or given much attention. I was extremely happy in my role at Madgex and building cool software. However, the position at Elastic caught my attention straight away.
I’d been working with Elasticsearch as a product consumer for several years, so I had some experience of them as a company. I’d seen them grow and continue to make significant improvements to their products. They had a good reputation and are one of the tech companies I very much admire. The role appealed because, alongside coding, it involved working with the community, something I am passionate about. The role required someone who could present at conferences and write blog posts and documentation. I’d be fortunate that Madgex had been incredibly supportive of my conference speaking and community work. This felt like a logical next step to make that a formal part of my work. However, imposter syndrome struck again, could I work on the .NET client? Did I have enough experience to offer? There’s a big difference from building .NET apps and microservices, to maintaining an extensive library.
At the same time, it just so happened that I had an exciting discussion with a tech startup who were interested in hiring me. That position also appealed to me. It was a chance to work on another greenfield product with an inspiring team and another amazing MVP I knew quite well. Now I had two exciting options, mid-pandemic, and I was also still excited to be in my current role. A fortunate position to be in, I appreciate. I talked it through with my wife and decided to apply for the Elastic role and also have a chat with the CTO of the startup. As time went on, I realised that the startup role wasn’t quite a fit for me and decided to decline it. However, my application for Elastic resulted in an initial meeting with their internal recruiter.
It was a good meeting, and I shared my passion for community and my experience with .NET. I also asked a lot of questions about Elastic culture and the working environment. Elastic is a distributed-first employer with most of their employees working from home, even before COVID struck. Their values “Source Code” really spoke to me and their attitude to a proper work/life balance. It sounded great, and I was happy to get invited to interview with the language clients team. My one big concern was moving from a small 100-person company to one with over 2,000 employees. At Madgex, I was involved in architecting solutions with our growing number of microservices while working on the platform’s next major version. I felt very valued and had a voice in the company. I didn’t want to lose that feeling of closeness one has when you know everyone in the company.
The interview process involved an online code test which filled me with dread. Having not had a computer science degree, I was worried that it would involve obscure coding algorithms and the like. I was pleasantly surprised that it was very practical and focused on more real-world C#. Looking back, I feel I could have done better, but it was obviously enough. The test was followed by three interviews with the team. I’ve always treated interviews as a very two-way process. Sure I need to impress and explain my qualities, but I also want to learn about the employer and the role. I’m interviewing them as much as they are interviewing me! In each interview, I had a lot of questions. Some I repeated with each person I met with, things like what is the engineering culture really like? And, how is distributed working achieved? I also had some questions which came up during the conversation.
During the interview process, I wanted to get a feel for the codebase. Fortunately, the client is open source, so I could scan over it. There was a lot I understood, but also some I’d need to spend more time studying. I decided to see how it would be to work on the code. When I spotted a chance to optimise some fo the code, I set about benchmarking it and then reimplemented a couple of methods. Then I made my first PR to the codebase, which was merged soon after.
After each interview, I was becoming more and more excited about the idea of joining Elastic. Every answer I got was encouraging, and everyone spoke highly of the company. It helped solidify the impression I had from the outside. After each interview, I debriefed with my wife, and I was keener and keener to get an offer. That came the week after my last interview, and I was delighted. That feeling was enough for me to know I would accept, and we struck a deal. I was sad at the thought of leaving a fantastic company like Madgex. I was also nervous about stepping outside of my comfort zone. However, that is where we learn the most, and I love learning new things!
I’ve now been at Elastic for three months and have passed my probation period. You may be wondering, is it everything I’d hoped it would be? Honestly, yes! I was welcomed immediately by the rest of the clients team. Elastic has a robust onboarding process with forms to complete before the start date and lots of training and resources once you start. The first weeks are quite intense, purely due to the amount of information available. I was immediately impressed that a lot of the communication is done via email and everything is very open. Decisions are made in public, and nearly all meetings are free to join, or you can view recordings afterwards. This is an extremely positive way to operate. I joined welcome calls with Shay, the creator of Elasticsearch and the founder of Elastic the company. His passion and values spoke volumes.
In my three months, I’ve completed training courses, attended “X-School” (sadly virtual due to COVID) and got stuck into the code. A lot of my work has been getting up to speed on the client library code and contributing features to keep pace with the Elasticsearch releases. I’ve been able to balance and manage my own time while also feeling well connected to the team goals and objectives. It’s been a very smooth experience, and I felt like part of the team very quickly. My huge thanks are owed to my amazing teammates. They have been a pleasure to work with and have put up with my many questions.
Upon joining, I felt like an imposter, and I’ve learned that it a reasonable and natural feeling. Many of us have it at times in our career. It’s important to remind yourself that you earned your place. Keep doing what you do, and you’ll meet expectations. If you find something you don’t understand, ask, learn about it or study the code.
Elastic is an awe-inspiring engineering company. I’m staggered by the complexity of building widely used software on the scale of Elasticsearch. Everything is managed with a fantastic focus on detail and quality. The build automation and integration testing is magic, and the processes work well. And yet the teams focus on continual improvement to continue taking steps forward. It’s humbling to see this in action and be part of the engineering organisation. I know I’ll learn a lot from working with everyone. The openness of communication, regular all-hands updates, Slack channels and wiki are all amazing. It can be overwhelming, but you soon learn what to focus on and what to save for later. I can’t recommend Elastic highly enough if you see a position which feels like a good fit for your next role.
Their “Home, Dinner” and “Space, Time” values are very much part of how things work at Elastic. Need to take a walk to clear your head, need to start late one morning, need to put a load of washing on, you can. No one is watching the clock and everyone is trusted to get the job done, and they do. Everyone is committed to delivering a great product but you don’t feel pressured into it. I’ve flexed some days around personal matters and been able to take breaks when my brain is not delivering. This approach makes me more productive, not less!
Another piece of their source code I love is “As YOU, Are”. Everyone is encouraged to show their personality and be a real person. I’ve seen many pets join meetings and that just adds to the family feel. Elastic has a clear focus on diversity and is exactly the kind of tech company we need in current times. I’m excited to go with them on the journey. Check out the rest of their source code to see what matters at Elastic.
I’m excited to continue learning and to bring some of my ideas to the .NET client. There are lots of cool things I’m hoping to do with the community too. I’m prepping for a series of short videos on my YouTube channel about Elasticsearch. I have also recently begun some live streaming on Twitch.
This post was not something I’d initially planned to write. Still, after a few emails and DMs with comments and questions around imposter syndrome, keeping pace and self-development, I wanted to try and tackle some of them. It’s been a little uncomfortable to share everything, but I do it as I hope it can inspire a few others as to what is possible. If I can achieve it, so can you!
Don’t fear feeling like an imposter at times. Remind yourself why you are there and what attributes and skills you bring. There will always be things that feel daunting and take you outside of your knowledge and comfort zone. That’s fine, embrace them. You can tackle them and study what you need to know. As I said in a previous post, don’t fear asking questions. Experiment with alternative languages, tools, ways of learning and producing content. Find what you enjoy and focus on that. Keep moving forward, and the opportunities will come.
I hope this has been helpful to at least one developer out there. I urge everyone to share their stories too. We’re all very much alike and struggle with the same challenges. Particularly now, as the world combats COVID-19, it can be challenging at times, and stress is real. Take time to care for yourself and your family, focus on the things which improve your mood. Don’t put too much pressure on yourself.
- How to Become a Better Developer by Asking Questions
- Become a Better Developer Through Blogging
- Become a Better Developer by Reading Source Code