My First 30 Days at Atlassian

On February 21st I let my (former) employer know that I was resigning because I had taken a position at another company to grow professionally and expand my technical abilities. Come April 1st I started a new position as a Junior Backend Developer at Australia’s best software company (IMO) and one of the world’s best software companies (IMO), Atlassian. I was going to write this post a little earlier but I wanted to get more settled into my new position at Atlassian and get a better feel about how I was really adjusting working at a new and amazing company, in a new city, with me not knowing anyone at the company. What I can say it has been fantastic ๐Ÿ˜€

Previously my commute was a very short walk to the bus stop, then catching the free shuttle bus service our town offers to work (which was the bus’ first stop from where I caught it from). In total the entire trip from my house to my work was generally no more than 15 minutes at the best case. Now I need to wake up early (well early for me) at around 6am, drive to the train station and catch an early train to the Sydney CBD. I could catch a later train but there is no guarantee that there will not be any diversions or delays. In total the trip can take as long as 1 hour and 30 minutes. Thankfully I don’t need to stress on the train trip as I don’t need to change trains (the one I take directly goes to the CBD), can do some light work, listen to some music or a podcast, and even chat with my mates if they catch the same one that day.

One thing I can definitely say is that Atlassian looks after their employees very well. Originally for breakfast I would have an Up & Go and then head to work. Now I don’t have breakfast at home. Atlassian offers free breakfast ๐Ÿ™‚ I usually grab a bowl of fresh fruit and yogurt, and a small bottle of orange juice. Overall a much healthier breakfast option. For lunch I would generally make myself a sandwich and pack some snacks like crackers, yogurt, muesli bar, etc. Again, I don’t need to worry about lunch because Atlassian has me covered with free lunches everyday. With an assortment of different fruits, vegetables, meats, breads, drinks, etc and hot foods on Tuesdays and Thursday I can safely say that I will never get hungry; oh that is not to mention the assortment of snacks including chips, biscuits, nuts, ice cream, etc. I have already started to put on weight that I need to work off with all the food I am consuming.

One thing that I knew was coming was getting a new Apple laptop, based on all the images I saw of employees with their computers on Glassdoor and YouTube. I have never owned an Apple product until now and I am still getting used to the butterfly keyboard and macOS, but generally moving between Windows and macOS is no different than when I was moving between Windows and Ubuntu at university. On the hardware and workstation front having a super comfortable computer chair, standing desk, and large monitor along with a Macbook Pro that is spec’d out to the gills are all great things to have. If you are in Silicon Valley or work at a startup technology company these might all be common but it wasn’t where I was previously working (including the amount of free food and drinks).

Working at Atlassian has also been amazing so far. I am on the Bitbucket Server team and it has some really intelligent and talented developers, designers and managers. One thing that I have noticed when I got here was that my team and manager had a plan for me for the next several months and if I had any questions I could approach any colleague whether they were or were not on my core team. After getting through the massive amount of HR and onboarding tasks put in front of me there was just so much to learn. Many at the company say it is like “drinking from the fire hose“. There is just so much to learn, consume and understand. I can say that what they are saying is 100%, based on how much there is to learn and consume. Thankfully for me, I am surrounded by such helpful people that if I need any clarification or guidance about anything I can easily approach them and they are more than willing to help. It can be a little daunting to try and understand everything, see how everything fits together and how to resolve some of the issues. But as any good developer would say, your debugger is your friend as well as the log files. With a very clean code base with plenty of unit and integration tests it makes understanding the product much easier.

To summarise my first 30 days, it has gone very quick. From fun company and team events such as Star Wars movie event for May 4th (we had it on May 3rd as May 4th in Australia is on Saturday) and lawn bowls to resolving customer issues on Bitbucket Server, I have completely enjoyed my time. I am always learning something new every day and am trying to help my team as best I can, where I can. The next couple of months I am going to try and resolve more and more complex problems, try not to break anything (or if I do fix it) and ensure that I am leaving a positive measurable change. One thing I have learnt very quickly is to speak up when stuck, if you see an issue don’t ignore it but proactively do something about it. Everyone at the company I feel breathe Atlassian’s company values. With everything going well so far, I hope to be here for a very long time.

If you are looking for a change the take a look at the Atlassian careers page, we are always looking for talented individuals to grow our ever expanding team.

Returning back to the fundamentals and my programming roots

I have been at my current employer now for over four years and when I started there I was merely involved in the implementation of new features and bug fixes. But as my tenure increased as did my involvement in the projects that I was implementing for the various customers we have, and responsibilities. Now I spend a significant portion of my time not looking at as much code or configuration for the project’s implementation but assisting my team members in implementing new features or fixing bugs, helping our customer support team resolve issues, working through customer requests with a business analyst and how it could be implemented, and ensuring that we meet the deadlines that we have set.

Moving from a software engineer to a manager like role is different and presents its own set of challenges. The code I do look at now and modify is mainly to assist another colleague (pair programming, guidance, etc), to optimize what we currently have (nothing better than making something run more efficiently or take up less memory), or to streamline our internal development process across the teams (if I can automate it then why not). I really do miss sitting at my desk uninterrupted for extended periods of time listening to either a podcast or music and coding away resolving a bug to be ready for a release or implementing a new feature for a customer. But now that is few and far between.

With this limited amount of time programming at work I have decided to start programming even more at home; I really don’t want to get rusty at my programming skills. The last month or two I have been attempting to (and successfully) solve programming challenges and problem sets on both LeetCode and HackerRank. Both are very good sites IMO on keeping your software engineering skills up to scratch and making sure that you understand the fundamentals no matter the language. Along with this I have started to get back into working on some side projects. The problem I have with side projects is that I start them, get a portion of the way through them, and then lose interest. I have many side projects shelved and stashed which are incomplete, and when I go back and look at them I know why I stopped working on them; to be honest they are not really good side projects.

So for 2019 (and I have been going strong so far which is really why I have not written a meaningful blog post recently) I plan on working on and finishing a side project (at least one meaningful one) so that I can showcase it, and write up some more technical post about what I have been reading and doing in my spare time. 2019 is going to be another good year ๐Ÿ™‚

Obsessively Learning For The Better

Ever since I could remember I always loved to learn and help others. Be it to learn how things work, why something was designed a specific way, and/or what made this thing function the way it did. All of those questions fuelled my curiosity and passion to learn, to understand, and to help others understand or solve their problem. There is something satisfying about knowing how things work, why they work, and being able to answer people’s questions with an appropriate answer. Plenty of people are not too concerned about the how and why, and are just happy that it works; this is absolutely fine as well. For me however, the more I understand something the more I can leverage it to my advantage getting the absolute most out of it. This is probably another reason why I became a Software Engineer and continued to study after my Bachelor degree to obtain a Master degree.

I encountered a small technical issue yesterday and was browsing Stack Overflow to see how others resolved their problem and what the exact root cause was. There was a perfect answer to the issue with a equally perfect explanation as to why it was failing and how the fix solves the issue. Sometimes when I see the answers to questions on Stack Overflow there is just an answer with little to no explanation as to why it fixes the issue. These answers I feel are not that great because really you don’t learn and understand how to fix the problem, you just use a solution without understanding the problem properly. You don’t learn anything. If I do encounter just an answer to the problem I try to read up further as to why this solution works. In the long run being able to understand the problem completely and how the solution fixes it is far more beneficial.

On a daily basis I try to learn something new, be it a new functionality that I didn’t know in Java, C++ or C# had or how to use my body to ensure that I can easily incapacitate an attacker with minimal effort using BJJ. By me constantly learning something new every day I can better myself which in turn I can try and assist others to better themselves or provide a solution to a problem they have encountered. This desire to learn has helped me in my career so far as a Software Engineer, as you need to constantly develop your skills and research new and upcoming technological trends to stay relevant. It is a challenge to try and better yourself day in and day out, but when you go to bed at night and you think about what you have learnt that day or how you have helped someone, it makes going to sleep that much easier.

Software Development: Crunch

Nearly everyone in their working life will experience at some point a very tight deadline, significantly increased pressure to complete a specific task, and/or an insanely amount of extra hours that are expected of you to do. In the software industry (could also be used in other industries not too sure) this is referred to as “crunch“. There are many articles out there about crunch, especially in the video game industry. It is a time where you rarely see your family and friends, you eat and drink way too much junk food, your regular exercise regime is thrown completely out the window, and you may even dream about the code you had written (and not in a good way).

Currently during my software engineering career I have only ever experienced this crunch period twice. I wouldn’t consider the first time really crunch though. I did have to work towards a really tight deadline, longer hours, but it was only for a very short time. The second crunch I experienced was recently and it was for a longer period with an insanely tight deadline, a significant amount of work, and very long hours both during the normal work week and weekend. Personally I think crunch every so often, but not too frequently is a good thing. A little stress and hard work can be beneficial. In saying that though, working in an environment where you are in crunch mode every couple of weeks is probably not great for your well-being and highlights a potential problem with the operations of your organisation.

During my crunch I had to unfortunately stop attending my BJJ classes, working on my side projects, playing video games and even going out with friends and having a couple of beers. After my crunch period ended, I was exhausted but I made a commitment to myself to go back to my BJJ classes and attend my usual social gatherings at the minimum. With the software engineers that I worked with during this crunch period, I asked them how did they cope with all the stress, what techniques they used to mitigate feeling like garbage, and do they have any tips or tricks to make crunch not feel like a massive drain? All of them essentially came back with the same or similar responses:

  1. Breathe and take everything one step at a time:
    • Don’t panic as panicking will only make things worse.
    • Rushing or not paying attention to what you are doing will only cause you to make more mistakes and then cause you to panic even more.
  2. Switch off after your day is done:
    • You most likely won’t work for 24 hours so when you are done for the day and have worked close to 20 hours, clock off.
    • Focus on something you enjoy and do not bring your work home with you.
    • Be with your family and/or friends, or enjoy what little sleep you can get.
  3. Communicate and do it early:
    • There is nothing worse than needing help and not asking for it, you will only then fall further behind, rush and make mistakes and/or panic.
    • Others may be able to help you solve the problem faster and you will less likely panic if you know that others are here to help.

Along with all of these handy little tips and tricks I remembered some of the useful information that was presented in “The Clean Coder: A Code of Conduct for Professional Programmers” Chapter 11 – Pressure. That chapter essentially had the same information as what my colleagues had said to me.

Come the next crunch (which I know will happen at some point in the future) I will be better prepared mentally and will ensure that when I do get some time to myself\ I spend it making sure my body gets the rest it deserves or spend it with the people I enjoy being around. Keep my mind and body sane and happy ๐Ÿ™‚

What I Enjoy The Most As A Software Engineer

The last two weeks or so I have been thinking about what I enjoy the most about being a software engineer. Do I love implementing new and exciting features for the customers to use? Absolutely. Do I enjoy designing and building new tools to make lives easier for the software engineers and testers where I work? Of course. Out of all the tasks that I perform on a daily basis, nothing beats fixing bugs.

The way you need to think is completely different in my opinion when you are fixing bugs compared to designing and implementing something from scratch or adding a new component. I treat this process much like a problem solving game where I assume the role of a detective trying to find out where the problem is happening, why it is happening and what is the best way to fix it so that in the future it won’t break again. With the use of logs, breakpoints and tests I ensure that the problem is fixed.

Why you may ask that I prefer to fix bugs over performing other tasks? It is extremely challenging, rewarding and you need to pay even greater attention to what you are doing. It really is the ultimate problem solving challenge in some ways. Your absolute attention to detail and focus is imperative and the amazing feeling you get when you successfully fix the bug is satisfying.

In the future will I still love fixing bugs over other tasks? I don’t really know. Most likely though I would say yes. I have always enjoyed a challenge, the problem solving game and that feeling you get when you succeed. Only time will tell, but right now any time I look at the Kanban boards or have issues assigned to me and it is a bug I get excited no matter how small or large the problem may be.