📅 Posted 2021-01-22
This post was inspired by one of my mates, Boyter and his post about intern interview questions. Thanks for letting me answer your list of questions! I was fascinated with both the questions and his answers and figured I could have a shot at answering these myself to see where we get to.
I met Boyter when we had a bit of a LAN party group going during high school because of mutual friends, so this would’ve been in the late 90’s. It’s funny when I bump into him in an ABC meeting because people kindly introduce him to me and I politely say we go way back! The industry and the world is indeed small.
What interested you in IT?
We got our first computer at home in about 1992, mainly for my mum so she could do assignments for the extended studies she was doing at the time. We knew many other people with computers and they would be a source of entertainment when visiting their homes. Of course I found other activities to do on our 486sx-based Osborne and I quickly become obsessed with playing classic DOS games like Commander Keen and Jill of the Jungle, but also with programming over-engineered menu systems, the “PLAY” music command crude ASCII art in QBASIC.
From these early beginnings, it was a pretty easy path into studying IT at uni and then following that, a graduate developer role. I wasn’t ever aiming to be in “IT” but it seemed a natural place given how easily I picked up knowledge about computers.
The funny thing about being in IT now is that it’s kinda IT but kinda not IT. I mean, I’m in the “digital” part (which in itself seems as much of a misnomer as “serverless” computing) so surely that means playing with 1’s and 0’s I guess? Well it’s certainly not analogue so I know that much for sure. So what is digital? There’s a whole blog in itself, I reckon, dedicated to that topic. So from the outside, everyone says I’m in IT. But IT is definitely a different department and I don’t feel like we operate in a traditional IT way.
What are you looking forward to working on?
2021 is going to be a massive year. For the first time in a number of years, I have a path cleared with a key goal in sight: work out what good artchitecting looks like and do good architecting for a whole year. I think I’m really looking forward to working out what “good looks like” and learning more about effective ways to use architecture and technology strategy at pace… right up there at the speed that a “digital” team needs it to be in order to be competitive.
I’m not going to be able to do this alone, so of course there will be many discussions to refine all the theory. And I hope that in practice, it works out.
This feels entirely a bit meta, but sometimes it’s nice to set up a framework and then actually use it.
What would be the best project to work on?
For me, there are a few aspects which make a great project to work on. I can recall specific times where I can look back and think “that was a great project!”. There’s no one true formula but here are some of the things I’ve discovered.
- Solving a real challenge using a technique which is quite innovative, and often where the challenge could not be solved previously
- A small team, where each person brings their strengths and works with a balance of “work” and “fun”
- Embedded team members from outside of the traditional IT or digital arm: grabbing something from, say, an editorial team, a sales team, anything really where the person has a little bit of technical knowledge and a great respect for the team. Amazing to work so closely with someone who knows their craft and is willing to make decisions on the spot to keep the team moving fast.
- Freedom to select technologies to solve problems, including using bleeding-edge releases (life is more fun on the edge, right?)
- I like bringing in people without a lot of experience but a lot of energy and by the end of the project, they’ve picked up some amazing skills that would otherwise take a long time to develop in a more BAU kind of role
What is your least favourite language and why?
Out of all of the languages I’ve had the ‘pleasure’ to deal with over the years, I think I dislike Java the most. It just seems really verbose with a whole pile of tiny files with almost nothing in them. Loads of folders too and everything is really nested deeply like it’s set up to scale for huge projects even if your project will never get that big. And it’s really unopinionated, so it takes ages to learn how someone has used it in a project you’re trying to get your head across because there are so many different ways things can be done, rather than a set of rules or guiding principles of how it should be done. I liked how Python came in with indentation standards out of the box and I know that Go is pretty opinionated too. I understand Java is deployed in so many places (and I even studied it at uni and I’m pretty sure some blu-ray players have a sticker on the front advertising their Java poweredness) but it just doesn’t seem great value to get results for the time spent trying to get into it.
The ABC culture, what makes it different from other places you have worked at?
It’s super creative and this means 2 main things:
- People are really connected to their work. They live and breathe it, day and night, and are really passionate about getting to the right outcome. Sometimes emotions take hold and conversations can get heated. But it’s only a good sign of the care people have for their work and how much they really want things to succeed.
- There is space and trust in trying new things (despite having super crazy tight budgets) and not an overbearing fear of failure. So I think people are empowered to try things that could work and then are celebrated when they do. Creeper or skunkwork projects are common and are embraced by leadership teams when results and benefits are demonstrated.
What do you look for when interviewing candidates?
I like the idea of hiring for attitude, experience and qualifications in that order. But of course it’s a lot more nuanced than that.
Attitude, because it doesn’t matter how brilliant someone is, if they’re a jerk, they’re not much use in the team. I look at how well someone presents themself. They don’t need to be perfect and know every answer, but they need to be genuine. I don’t mind it when people admit to not knowing the answer to a question but truthfully want to find out the answer. There’s a keen curiousity to great candidates. I like to see someone be humble in how “good” they think they are as well as balancing their self-confidence in their own abilities.
Experience, because it’s tricky to throw problems at someone who simply doesn’t have the experience to know which direction (or even a first step!) to take. Experience could also mean when someone presents to a specific audience, they know through their experience how to get the most out of that presentation. So then it becomes really efficient because you’re not having to mop up the damage afterwards. Lack of experience can also be a good thing, if you’re looking for someone to further develop rather than coming in at the top of their game.
And finally qualifications, because they can be useful, but are definitely the lowest priority here.
Other important elements I consider is how this person will fit in with the existing team. Will they respect the other team members? Will the other team members be just as effective as without this new team member? Sometimes it’s better having 1 less person than a bad egg who drags the whole team down. Crafting a team mix can be really tricky! It’s also interesting to consider if they don’t work out in this team, can they accept feedback and be moved to another team? Are they compatible elsewhere? People who can be moved around easily and without cause for concern are the most useful because you want to be responsive to change and you never know what’s around the corner.
Did you always know you wanted to be an architect?
Sort of. Very early on I wanted to be a landscape architect! Not quite the same thing, but it definitely has related skills and focus. Have a read of my blog about How I became a Senior Digital Architect to get a better picture.
Are you working on any side projects of your own?
This site, ha! And my serverless CMS are the major related IT-ish projects. I mean, I have loads of other projects for things related to video games, gardening, electronics, house renovations, music… the list is long.
I also have a project for a collaborative “GitHub for music composition” concept but that’s a little bit stalled right now.
How do you keep yourself updated about the new trends in the industry?
It’s one of the reasons I have side projects. You can find out more in my blog Thoughts on working the side hustle for more reasons, but I think having side projects is great for keeping fresh. You can do things which you would never be able to try during your day job.
What’s the most recent thing that you have learned?
Singapore style chilli crab is waaay sweeter than I remember.
OK, seriously now… Despite having all kinds of “questioning” and “disputing” feedback been thrown at you over email, sometimes it’s better to just have a good old fashioned chat, walk through each question/point one at a time, and talk about it. People aren’t nearly as suspicious of your ideas as it might seem from reading an email.
What’s hard about coding?
There are many things! But the things that most come to top of my mind is relating to mis-interpreting the requirements (which results in many refactors, leading to a pretty messy code situation that gets out of hand fast). But more importantly, ensuring what you write can be maintained long into the future. It’s easy to forget the sustainability angle! Code you write now could still be in use in 20+ years time, which is great in the ROI/value sense, but it rarely just sits there untouched for so long. It needs to be open to change and be flexible to expand to suit new things by other people. So it can’t be written in such a mysterious way that nobody has any hope of trying to fix or extend it. Being the only person who knows how something works (or being the dungeon master) is a sign you’re doing it wrong.
Which technologies and languages would you need to develop a project from scratch?
I love this classic senior engineer answer. It is true though, you’d need more information to answer this question as it’s highly dependent on the situation.
What is the best implementation or debugging you have done in the past?
I remember writing and optimising some reports for Lendlease using SQR. It’s a procedural language which extends and ‘wraps around’ a core SQL statement. It’s actually pretty clever and powerful for generating paginated reports from a database source.
There were 2 interesting things I did with SQR, one was take a report which would dog an Oracle database server for 45 minutes to generate (and I think the output was just a couple of pages in a PDF). After creating a temp table which would be populated during the report generation (and empty on disconnect), the data was segmented per report run instance so multiple users running the report at once wouldn’t be duplicating each other’s data and it was built using standard SQR functions, I got the report down to under a minute of execution time. I think the Oracle DBA owed me lunch for that effort! I can’t imagine the original developer trying to test their report by waiting 45 minutes for a result.
The second instance with SQR was an integration between an Oracle Financials system and a reporting engine, for some kind of housing estate financial system implementation project, I don’t know. I was never very interested in finance and yet had found myself writing reports and things which joined many Oracle tables together… I did gain a new found appreciation for SQL. Anyways, I managed to glue two quite disparate systems in a way which meant the users didn’t have to leave their Oracle environment and yet could have nice reports generated behind the scenes with another platform. The network team would be impressed because I would return multiple reports in “packs” which were automatically zipped up, thus saving requests and bandwidth.
I think both were good examples of trying something innovative to solve a problem in an environment where I had to convince all of the consulting “experts” it was a) possible and b) actually a good idea.
What’s the most puzzling programming challenge you have come across recently?
I haven’t actually hit one recently, but I have been dealing with some interesting architectual challenges. Not ones which are technical in nature, but trying to get other stakeholders onboard with a plan without them feeling like being steamrolled and experiencing a loss of control. There’s a situation which, to me, feels a lot like Stockholm syndrome because the existing platform is quite literally bad technology, but as these stakeholders have full control over it, any other solution option outside that bubble can cause fear. By navigating carefully and proposing logical extensions to the existing system rather than wholesale replacement, I think we can improve the technology posture without having to go nuclear on it.
Are there any disadvantages to GraphQL?
I’m really concerned about the cacheability of requests, particularly if combined with a personalisation system where every user is different and requires a different mix of results. And results change frequently. But I’m totally sure there is a way to solve this, but I haven’t had a deep think about it just yet.
If you had any advice to tell a student studying IT that wanted to become a full stack developer or Tech Lead, what would that be?
Don’t worry about what they teach you at uni, all of your real knowledge will come from your own projects and actual work experience. Uni is just a taster. Start your own projects, no matter what they are, you will learn something. It could be as simple as building a website (which, is admittantly a lot harder than it was in the late 90’s…) or something a lot harder like writing a Gameboy emulator. I haven’t done the latter, but I’m told it teachs a whole load of principles in a practical way for a system which is generally quite simple. 8 bit computers fascinate me and I’ve been planning to get into 8 bit coding. One day!\
Second point of advice is to be careful of the trap of knowledge. Once you’ve gained a mass of knowledge, it’s very difficult to communicate to those without that same knowledge. You forget what it is like because it’s so easy to think everyone else is also on the same page in the textbook as you are. I’d personally like to concentrate on this a lot more.
Tech Lead Questions
How do you keep your technology skills current?
It’s really all about what you do outside of work. I think having a side project or side hobby business is an ideal way. Work projects alone will never give you a full gamut of experience. I spent a lot of time building a serverless CMS in AWS and then wrote about it a lot. So I can get more practice writing but also I know the in’s and out’s of such a system. And I’ve got a few clients using it, so I know if it actually does the job or not.
I do a bit of reading but nothing long-form. Mostly HN and articles. I think this helps a lot, it’s good to hear the challenges other people are facing without having to dive into a big committment of reading a whole book about it.
What strengths do you think are most important in a developer [or another relevant IT position]?
Being able to communicate succinctly, confidently and with empathy to your target audience. It could be peers (so avoid being the brilliant jerk) or people who understand technology far less (but have strengths in other areas). If you cannot explain what you can do, what the program does or why something is important, people will find it really hard to buy into your vision.
What are your favourite and least favourite technology products, and why?
Favourite would have to be anything that seems infinite in flexibility and extension. I like the idea that you can adopt a small piece today and then continue to build on it, not feeling hamstrung at any point by the underlying technology. There’s some really great technologies like this today, but sadly they often get bought out.
Least favourite… hmm I really hate the big old dinosaur monolithic systems from companies who have far too much funding for their sales team and actually really terrible technology. You know, the usual suspects. They gobble up other successful players along the way and ruin the technology as they go. They don’t have APIs. They have no idea about scale. They have zero care for UX. They make it difficult to glue their system with other systems without buying the whole shebang and hiring expensive consultants to do everything for you forever. Gartner can be partly to blame, just look at some of those top-right quadrant players and AVOID! But it’s not all bad news: sometimes you can use these such systems as an opportunity to a better solution, as long as you can find clever ways to integrate with them.
What skills or characteristics make someone an effective remote worker?
Here’s a few tips I have found to be effective over the past 9 months, some of which I would never have thought about if COVID-19 and 100% Work-from-Home weren’t such a part of 2020:
- Be online during the times you’d expect, rather than seeming to be offline but still responsive to messages
- Don’t work all hours of the night just because you can (you need breaks!)
- Turn up to rituals and meetings with your camera on even if you aren’t presenting
- Write neat and effective documentation so there’s a trail of your thinking and solutioning. Invite others for a walkthru and review.
- Invest in a better setup: camera, mic, lighting. Also adjust things so your face isn’t tiny in a giant video frame etc.
- Make sure you have fun. Meet up with people if you can. Play boardgames online. Do a walk around the block and show people your area over Zoom. Have a home cooking show. Catch up online and talk about your pet. Whatever it takes, spend time not doing work with work people.
How do you handle tight deadlines?
I try to anticipate them as much as possible. Start working on things you know will blow up or become a major issue down the track, so at least your mind is already thinking about it. Having a bit of progress on things that might actually turn critical gets you much closer to the outcome compared to having not started at all. I’ll rarely work late to meet a deadline but I will put in extra hours if I feel like I need to. It doesn’t happen very often. Eat the frog! (Actually, I really like frogs. Don’t eat the frogs).
That was actually a whole heap of fun to write, so I hope you enjoyed it as much as I did writing it. Please check out Boyter’s answers too!