Category Archives: Life

Jack of All Trades, Master of None

“Jack of all trades, master of none,” I’ve heard IT industry professionals scoff arrogantly several times in the past. That was their judgement of polyglot programmers, full stack developers, or any other people who had dabbled in more than one area of the kind of work we do.

Full stack. Heh heh. I took this picture at an eatery in San Francisco in February 2017.

I get where they’re coming from. Our industry is a very complicated one, and it’s really hard to learn much of anything if you don’t focus. Whether we’re talking about backend, frontend, databases, NoSQL and so on, there is an overwhelming number of technologies to discover and learn, and the information overload on the internet doesn’t help digest them.

The conventional wisdom is to be a “jack of all trades, master of one“, meaning you learn a number of different things but try to excel at at least one of them. This is great advice, but I’ve very rarely seen it happen in practice. People tend to either specialise in one thing in depth, or have a superficial knowledge of different things. Which of these would you choose?

Being just a master of one is a real problem I’ve seen for a long time. People who have only focused on one programming paradigm throughout their training and career tend to have trouble thinking outside the box and finding different ways to solve problems. Backend and frontend skills don’t easily transfer across, and most full stack developers are typically much stronger at one of these than the other. Most developers don’t understand enough about security, infrastructure and architecture.

The way I see it, that’s pretty bad. A developer who knows nothing about servers is a bit like a centre-forward who is so good that he can dribble past the opposing team’s defence, but fails to score every time.

That’s why even a semi-decent University education in this field doesn’t just teach programming. Learning CPU architecture, systems programming, Assembly language or C gives an idea what happens under the hood and teaches a certain appreciation of resources and doing things efficiently, a perspective that people having only experience with high-level languages often dismiss. Having a basic grasp of business and management prevents developers from idolising their code (“clean code” anyone?) and helps them to focus on solving real problems. Understanding a little about infrastructure helps them better understand architectural and security concerns that code-focused developers will often ignore.

Universities, in fact, produce instances of “jack of all trades, master of none”. Let’s face it: when you graduate, although your scores might give you confidence, you don’t really know much of anything. But thanks to your holistic training, you’re able to understand a variety of different problems, and gradually get a deeper understanding of what you need to solve them.

I also think there is a place for the “master of one” type of people who specialise very strongly in one area and mostly ignore the rest. I imagine these would be academics, or R&D specialists in big companies like Google. But, as much as we like drawing inspiration and borrowing ideas from successful companies, we always have to keep the context in mind. Who are we kidding? Most of us mere mortals don’t work at companies anything like Google.

So what I’m saying here is: it’s not bad to be a “jack of all trades, master of none” in our field. It is obviously better if you’re also “master of one”, but if I had to choose, I’d be (or hire) the one with the broad but superficial knowledge. Because when you are aware that something exists, then it’s not a huge leap to research it in more detail and get to the depth you need. It’s actually a good strategy to learn depth on an as-needed basis, especially given that you’ll never have enough time to learn everything in depth.

As in life, I’d rather know a little bit about many things that interest me, than bury myself in one thing and otherwise give the impression that I’ve been living under a rock.

Technology and Anxiety

We’re about a year into the COVID19 pandemic by now, and topics like stress and anxiety have gone from taboo to mainstream. They have frequently appeared in the news and social media over the past several months.

While COVID19 has been a horrifying experience in many ways, I think many reasons for the anxiety we experience every day have been around before the pandemic. COVID19 has just exacerbated certain issues by changing the rules, forcing isolation upon us and making us more dependent on technology to communicate; but at the same time making remote work a reality for many people, saving commute time, and reducing environmental impact.

If you work in the IT industry, you are probably no stranger to stress, anxiety and burnout. In fact, I have recently seen a bigger trend of developers burning out, taking a step back from social media, and trying to live in a more disconnected manner.

I am, of course, no exception to all this myself; and reading about other people’s experiences has inspired me to write my own thoughts on the subject.

Disconnecting

When we went from primitive modems to ADSL, we heralded an era in which internet connectivity was “always on”. Fast forward to today, when we have mobile data, and we receive notifications any day, any time, whether we’re awake or asleep, from work or from friends, with no room to breathe at all. Is it really any wonder that we sometimes feel overwhelmed?

Mobile Devices and Social Media

The Netflix film “The Social Dilemma” is an excellent eye-opener showing how social media platforms are engineered to capture our attention, addict us, and sell us as a product. Yet, what’s in it for us? Giving everyone a voice is hardly an advantage when you’re scrolling through a deluge of politics, marketing, and petty squabbles.

The best thing you can do for your own sanity is get off social media:

  • Remove Facebook etc from your phone.
  • For anything you can’t remove, turn off notifications.
  • If you need to access social media, login from a computer in an Incognito session, do what you have to do, and then logout. (Of course it’s more tedious than using your phone. That’s the point.)
  • Check social media only at specific (few) times of day.
  • Use Do not disturb when you’re asleep, taking a break, or otherwise don’t want to be interrupted by your phone.
  • Stop getting hammered by recruiters. Pursue them yourself if/when you need them.
  • Avoid anything with marketing content. Install an ad blocker in your browser, and watch films on a medium that doesn’t require you to watch advertisements half the time.

Do the same with work-related apps.

  • Don’t install Slack etc on your phone if you can avoid it.
  • If you can’t, turn off notifications outside working hours.
  • If possible, turn off notifications in general. If you’re usually at a computer in front of Slack anyway, there’s no reason why your phone should be buzzing about things you’re already seeing. Keep the app handy for when you really need it (e.g. you’re on the train and need to tell your boss you’ll be late).
  • Tell your colleagues to give you a call if they need you for an emergency while you’re out of the office. That way you don’t need to constantly check your phone or rely on notifications.

Context switching all the time is a sure way to burn you out. It’s already hard enough having to deal with email, chat and other notifications when you’re on a computer.

Infinite Scroll

Part of that social media addiction is a feature where you can scroll infinitely and keep getting more content to consume. Aside from being a bad thing in the stress/anxiety space, I would also argue that it is terrible from a user experience perspective.

  • Content eventually gets lost in an endless stream of random stuff.
  • You have no idea where you are because you can’t rely on pagination or a scrollbar.
  • Things reload automatically, sometimes while you’re trying to read something.
  • Once it reloads, the order is often messed up, and it becomes impossible to locate something you were interested in.

The end result is that you’re addicted to a very shitty way of reading stuff you don’t even care about.

Social Obligations

COVID19 has forced us to rethink the way we socialise. Any contact with people outside our regular household could bring the virus into that household, so is it worth the risk? It depends. People need to eat, I get it. There are also people who don’t care. But people scrambling to buy and deliver Christmas presents in the midst of a pandemic? Seriously… priorities.

Again, I think the lesson here extends beyond COVID19. Before COVID19, was it really uncommon to have to attend so many events (several of which we’d rather have avoided) and do so many things that it would result in very tangible fatigue?

Here, I’ll borrow a tip from Tania Rascia’s 2020 into 2021 roundup (which is excellent related reading, by the way) and suggest you choose your battles, or rather, social obligations by saying “HELL YEAH!” or “no”. Originally a suggestion by Derek Sivers, this means it’s worth investing your time and soul into things you’re really enthusiastic about. Drop it if you have doubts.

Hobbies

Being addicted to social media (or other stuff) means you’ll likely go back to it by default when you’re bored. So how do you stop needing it? Gradually, and by replacing it with things that are actually fulfilling.

Ideally, find hobbies where you don’t need a computer (e.g. reading a physical book, some kind of sport, playing a musical instrument, knitting, hiking, etc). Some computer-related hobbies are also okay (e.g. video games, anything artistic). You’re looking for things where you don’t need to use the mind too much (you do enough of that in your day job), yet which are either physically or creatively stimulating.

How can something be creatively stimulating and yet not be a burden on the mind? You know how science and art are often thought to be two extremes of a distant spectrum? I think it couldn’t be farther from the truth. Take music, for instance. The science part of it gives it structure, yet on its own it would be uninteresting. As an art without the science, it would be random and uncompelling, like what you get if you put a monkey (or me) in front of a piano, and leave it free to bang around.

Now, I believe programming jobs are a combination of science (the tools you use to solve a problem) and art (the way you arrange those tools to solve the problem in a specific way). The problem is that after your first handful of “A-ha!” moments, it becomes more of the same, and the creative passion goes away. That’s why, outside of work, it’s good to pursue interests that are of a purely creative nature. Science makes us better at life, but it is art/creativity that makes it truly enjoyable.

Hobbies are also best when you use as many of the senses as possible. Sure, you could experience a distant land on a computer, seeing the panorama, listening to the sounds, and perhaps running your finger across a touch-screen. Seriously? Go on a hike. Let your eyes focus on distant objects. Listen to sounds that are natural and not electronic. Feel the breeze on your skin. Listen to the waves. Taste some of the local produce. There, all five senses. Beautiful. You see, computers let you experience a lot of things you never could, but in a limited way. When you build something with your hands, it’s a completely different feeling from building software.

Productivity

If you really like what you do, you probably take an interest even outside of work. Constantly reading, learning, experimenting, achieving, and sharing what you learn with others. It’s something we’re encouraged to do in our industry, and for good reason – many of the things we learn and the solutions we find are thanks to selfless souls who took the time to share their wisdom for no personal gain.

There is, however, one problem: resources are limited. More specifically, our time is limited. When you have to spend a good part of your day at work, look after your family, take care of your home, shop for groceries (not to mention other necessities), get enough sleep, do some exercise, have a hobby or two, and do more work-related stuff in your free time… well then you might be juggling a bit too much… ergo stress, burnout, anxiety.

I’m not saying you shouldn’t have a blog or side projects, or take an interest in programming outside of your job. But to achieve a good balance, you need to prioritise, and do it in moderation.

Burning through the Backlog

People who sell Agile for a living love to extend Agile practices beyond the realm of software development. For instance, in his talk “Agile Everywhere!“, Henrik Kniberg talks about he optimised the way his family wash the dishes. While this talk is entertaining and probably also insightful, it can be pretty tedious to live life as a sequence of tasks in a neverending backlog.

In the software industry (and in everyday life), I sometimes feel that we’re just constantly trying to finish off as many things as possible. There are two main reasons for that. First, although I (and Peopleware) love to think otherwise, the sad truth is that in most companies, software development has been reduced to a factory, a conveyor belt of tasks. “But,” you might argue, “software is knowledge work! It’s a creative endeavour! Surely good quality software can’t be written in such conditions!” Well, just take a look at the state of websites, web applications, and software in general today.

Secondly, oftentimes, the pressure is actually self-imposed, especially for high achievers. In a competitive industry where there are no real standards for measuring competence (unlike, say, the engineering or accounting professions) or what job titles even mean, it’s really not clear what one must do to stand out from the crowd, and sometimes people will invest huge amounts of effort even in their own time to try to get somewhere.

The problem with this is that, like work itself, learning and keeping up to date is a process that never ends. Like I wrote in 2014, don’t bite more than you can chew. Prioritise your personal goals, keeping them to a minimum and selecting only those which feel really worth it. Spread them out over longer periods of time rather than trying to burn through something you’re learning as fast as possible.

The “HELL YEAH!” or “no.” advice from earlier applies here as well, since your own excitement is not a bad way to decide how to spend your own time. However, you can also take a hint from Lean practices and try to get some feedback before embarking on a complex side project or writing a book that perhaps nobody cares about. The only time it’s worth doing something that nobody cares about, or reinventing the wheel, is when you’re doing it as a learning exercise; and in that case, you still need to treat it as a proof of concept and scope the problem to avoid wasting huge amounts of time on it.

Content

Those of us who are active in the community tend to feel pressure to constantly produce content. Whether that means answering questions on Stack Overflow, writing blog articles regularly, or speaking at conference, it often feels as if we’re disappointing people if we don’t give them something to reap.

This, of course, is just one of those self-imposed goals, and a pretty harmful one, for two main reasons. First, there is very little return in it. I’m not saying that sharing knowledge doesn’t have a lot of benefits (helping others, learning by teaching, and increasing your visibility to name a few), but when you fast forward a few years and several hundred articles later, and you look back, you can’t help wondering whether you should have spent that time in better ways… with family for instance?

Because in actual fact, unless you’re Jon Skeet, or you’ve contributed something pretty awesome to a major open source project (which becomes more and more difficult to do as software becomes more complex), chances are that people who can make a difference in your career aren’t going to notice your contributions. And even if they do, in an industry dominated by politics and Codility-style tests, your ability isn’t necessarily going to be an influential factor in your career development.

The second problem with forcing yourself to produce content regularly is that… you end up doing exactly that. Making content for the sake of making content. And that’s why the internet is full of people writing the same stuff over and over again, or bullshit “N Things” articles. Like I wrote in “The Sixth Anniversary“, it’s far better to slow down and write something only when you have something really interesting to share.

Write Things Down

It’s pretty common to have an idea, or remember something you need to do, and to be too busy to pursue it right away (or anytime soon). Multiply that by one or two dozen, and you’re suddenly anxious because you don’t want to forget all these things you can’t do right now.

Write them down. Chances are that most of them can wait, and by writing them down, your struggling mind doesn’t have to juggle all these things at the same time. Even better, schedule them at different points in your calendar to figure out which you actually need to do first, and which can wait. Once again, spread them out, and avoid overloading your calendar at any given time. Try to set a maximum number of items you think you can tackle on a daily and weekly basis.

Coping with Work

A couple of years ago, when I used to work in Ireland, a high-level executive visited our office one time and talked about his career. I asked him how he coped with stress, and he answered, “How many things that bother you today will you still be thinking about in 5 years’ time?” Sure enough, that makes you realise that although some things may worry us, sometimes we make a bigger deal than we need to.

What’s the Worst That Could Happen?

Think about it. COVID19, Brexit, US elections. Missed deadlines, abuse of power and public funds, economic and political instability dragging on for months and years, and millions of people sick and dead thanks to people who messed up (many of whom are top political leaders), and no one’s accountable.

The point here is that although you should always strive to do a proper job, many decisions carry very little risk, and most mistakes are easily corrected. Conversely, in software development, we’re often known to waste a lot of time arguing about little details, a phenomenon known as bike shedding. Are you building systems that people’s lives depend on (such as medical, aircraft or space-related software)? In that case, by all means, analyse every little detail and lose sleep if it makes the result that much more reliable. Otherwise, making a mistake or looking stupid probably isn’t a big deal. Go ahead, take a risk. You’ll learn from it in any case.

Another aspect to this is when you need to worry. In my experience, I’ve found that it’s quite common to worry about something that might happen in future, only to come back later and find that it won’t happen at all. Well, there’s no point in prematurely worrying about some problem that might occur, just like there’s no point in building features just in case (You Ain’t Gonna Need It (YAGNI)).

Commuting

One of the biggest lessons we learned from COVID19 is that we were right about remote work. It works. Not just that, but there are other benefits.

Let’s just focus on commuting. Avoiding the commute saves time, money, traffic, environmental impact, and stress. Just physically getting to work on a day-to-day basis, along with millions of others on the same quest, is bound to make you anxious as you deal with things like overcrowded, late or faulty public transport, crazy drivers, and road closures. It’s not uncommon for people to be already stressed out by the time they arrive at the office, when their day hasn’t even started yet.

Add to that the fact that commuting can eat up anything from 20 minutes to 4 hours (even as much as 6, in extreme cases) a day, and you have basically no time left for yourself.

There is lots to be said about remote work and commuting, but the takeaway here is that you really should consider working remotely if it’s an option. Simply avoiding the commute works wonders for one’s inner peace.

Conclusion

Basically, if you want to worry less:

  • Aim to do less. Choose a few goals that are really important, and spread them out so that they’re achievable and leave you time to enjoy other things in life.
  • Block out anything that you don’t really need and that makes you miserable. Social media, politics, news, even friends or family who bring out the worst in you. You don’t owe anything to anyone.
  • Get some creative and stimulating hobbies. Build something with your hands. Use your senses. Get some exercise. Stop being a zombie on a phone, especially when you’re with other people.
  • It’s okay if you’re not productive all the time. On the contrary, you might find things work out better if you take a step back and have time to think about what you’re doing.
  • Focus on quality rather than quantity.
  • Write things down to get them off your mind. Most things can wait.
  • Are you doing something high-risk? Then worry, spend time asking for advice, and take great care. Otherwise, get on with it and don’t look back.
  • Work remotely if you can.

3 Stupid Article Title Patterns

If you use social media (e.g. Facebook) a lot, you’ll notice that your friends probably share a lot of crap, ranging from Farmville invitations to ‘inspirational’ (*cough*) articles. Over the years, you probably noticed that a lot of the articles they share seem to follow a small set of clichéd patterns. Here are three particular ones I’ve come across.

1. n Things

stupidtitles-nthings

Look at the image above. The article itself and the majority of the ones linked on the side follow the same pattern: “6 Reasons…”, “5 Things”, etc. In fact, I deliberately used such a pattern even for this article, to help get the message across.

An “n Things” article is typically little more than a random list of items, often based on the author’s limited experience and viewpoint rather than on any relevant sources. There is no particular structure in such articles. In fact, even the numbering itself is misleading: these articles often list items in no particular order. This is in stark contrast with factual news articles which use the inverted pyramid as a model to present information progressively in descending order of importance.

stupidtitles-topn

A variant of this is the “Top n” article, such as “Top 10 places to visit in Dublin”. In this case there really is an ordering. However, it’s not always quite reliable. If it’s some top 10 list on someone’s blog, then that’s just the (only?) 10 places he happened to visit. Some more reputable sites might refer to some actual statistics, but the criteria used to evaluate the items and come up with a ranking are usually quite debatable.

2. Questions

stupidtitles-question

I’m not the first person to feel uneasy whenever I see a title that ends in a question mark. In fact, Betteridge’s Law of Headlines states that:

“Any headline which ends in a question mark can be answered by the word no.”

Again quoting the above-linked Wikipedia article, Betteridge was quoted thusly about a particular article:

“This story is a great demonstration of my maxim that any headline which ends in a question mark can be answered by the word “no.” The reason why journalists use that style of headline is that they know the story is probably bullshit, and don’t actually have the sources and facts to back it up, but still want to run it.”

I don’t think this requires further elaboration.

3. Future Predictors

stupidtitles-predictors

Articles that contain the word “Will” are usually one of two types. If they end in a question mark, then refer to Betteridge’s Law above. If they don’t, then they’re making some kind of grand statement about how things will be in the future.

You might think that people writing such articles have been blessed with the gift of prophecy. More often than not, however, they have no idea what they are talking about. Such articles tend to make grand claims about the future, either depicting some sort of utopia or scaremongering on the bleakness that is to come. But in reality, nobody knows what will happen in the future, and the people who write these kinds of articles are usually not among the few who might be able to make educated guesses about what will happen.

Not convinced? Check out the comments for the above Slashdot article.

What’s in a Job Title?

The companies I’ve worked for so far have always had some kind of hierarchical organisation. For instance, you start off as a Software Developer, then you are promoted to Senior Software Developer, and so on. However, I’m aware that there are other companies which prefer to have a flat hierarchy, and keep job titles to a minimum.

Well, what’s in a job title, anyway? Does it really matter what your job title is?

Motivation

There’s this scene from the film “Kingdom of Heaven“, where the main character (Balian) selects a peasant and knights him on the spot. The bishop is horrified.

Bishop: “Who do you think you are? Will you alter the world? Does making a man a knight make him a better fighter?

Balian: “Yes.”

You see, making a man a knight doesn’t give him any special power. But he knows that he is now a knight. This means that he is responsible to uphold his duties as such.

On the job, it’s pretty much the same. Becoming a Senior Software Developer does not make you any more able in your work than turning 18 years old makes you suitable to drive. But it does put you into a bag of a handful of accomplished and trusted developers, and as such you will work a lot harder to show that you deserve that title. It also means that you will most likely take more initiative in your work, and go outside the scope of your individual duties by guiding others in performing theirs.

A little recognition goes a long way in motivating individuals.

Categorisation

Some companies offer the excuse that their employees have the same job titles or salaries in the interest of fairness, so that they are all treated equally.

Such companies should wake up and realise that people aren’t all equal. Some work harder than others. Those people do not deserve to be lumped in the same boat as those who do a miserable job.

The CV Factor

When an employee applies for a job, having “Senior Software Developer” looks a lot better than “Software Developer”.

It is true that job titles mean different things from one company to another. In some companies, a Software Developer is merely responsible for coding; while in others, he might actually be managing a whole project. Hiring companies should ideally look beyond the job title and ask about the roles that the candidate played in his employment.

However it is also true that companies and recruitment agencies receiving a lot of job applications often resort to simple filtering at face value in order to reduce the number of applications.

Consider this: individual A has been a loyal and hard-working Software Developer for 20 years, and his company never gave him a promotion. His friend, individual B, has been promoted to Senior Software Developer and then Lead Developer, even though his skills and responsibilities are less than those of individual A. When recruiters look at their CVs at face value, who will they prefer? What will they think about individual A when they see that he’s had the same role for 20 years?

How Learning to Play an Instrument Makes You a Better Professional

I briefly mentioned the importance of experience in my recent article, “On Military Intelligence“. There are many skills which you can only learn in one specific way: by doing it a lot. Such skills include reading, writing, driving, art, programming, and music. That’s why “practice makes perfect”.

Music is a daily commitment, requiring lots of practice in order to learn and master the theory, practice, techniques and styles. One could even go as far as to say that it quickens the mind, as the arrangement of notes into various scales and patterns is almost mathematical in nature, and one learns to reason about them.

However, beyond the music itself, learning to play an instrument can help you develop certain characteristics that are particularly important at work. Let’s see what these are.

Patience

Music is like software: if you’re going to work on it, then it’s worth taking the time to do it properly, as I’ve written in my earlier article, “On Goal-Orientedness and Mediocrity“. Attempting to rush something will only result in poor quality. While such deficiency may go unnoticed for several months in software, it is much easier to realise when a tune you’re playing doesn’t sound right.

Music gives you the patience to take the time to do things the right way.

Confidence

Playing in front of other people, even if it’s just the teacher, can be intimidating. Aside from any possible confidence issues that one might have, there is the fear that doing something wrong in front of others will make you look stupid.

And that’s a good thing, because this pressure causes you to prepare well for when you need to do something in front of people. The next time you give a presentation at work, or you lead a meeting, you know you’d better know what you’re talking about.

And at the same time, playing regularly in front of people and getting used to the fact that you’re doing it right has the effect of boosting your self-confidence and helps you overcome any fear of audiences.

Humility

When you’re a 27-year-old who’s been playing for six months, and you’re in the same room with 12-year-olds who have been playing for six years, that’s a pretty humbling experience. They’re kids, so you should know more than them, right?

It’s also possible that there are people with less experience, but who are much better than you are. The same can happen at work – someone younger might have a lot more talent than you.

You can be arrogant, and perceive such people as a threat. Or you can accept the reality that they have a lot to offer, and try to learn from them, and in doing so benefit from their experience and become better at what you do.