As a software developer, you’re probably the kind of person that loves a mental challenge. You live for the feeling of coming up with that elegant algorithm, describing it to someone, and then smiling as they go silent for a while and then say admiringly “wow yeah, that can work.” You probably also enjoy that exhilarating feeling you get after a painstaking two-hour debug session, where you patiently gathered piece after piece of obscure information, looking for patterns, and finally everything clicks. Or even better, the feeling of power you get when you fix the issue with one line of code – the right line of code. It’s awesome!
My hardcore coding life
Having spent most my R&D career working with low-level languages like C and C++, I was resistant to Java. What do you mean, garbage collection? No man, I manage my own memory. No hidden magic for me, I like to be in control!
I was also resistant to .NET for pretty much the same reasons. I toyed a bit with managed C++ code in .NET to see if I could still get the same low-level in-control sort of feeling, but it just wasn’t the same. I felt like “anyone could do this” and it wasn’t special anymore. You probably just smiled a bit because you have shared this same thought one or more times. Maybe you still do!
At the time, I thought I would miss the technical challenge that comes with hardcore low-level coding. However, on later reflection I realized I was just worried that my hard-earned skills as a “real coder” were becoming less valuable. In fact, I feared that pretty soon everyone would be able to code and I’d become obsolete.
My life “dragging circles”
Before I started working with OutSystems Platform, I was still coding in C++ for a major video game company. When I was presented with the opportunity to work at OutSystems, I was exhilarated by the challenge of doing something completely different, but I was really worried about the technology. After all, my fears had come true. Here’s a technology that allows pretty much everyone to write and maintain solid applications much faster than I would ever be able to and without writing almost any code.
Not only did I feel obsolete but I also feared that I would be bored without the technological challenge of writing code, managing memory, interfacing closely with the machine – all those things that made me feel special, hardcore, an expert and a “real coder.”
Regardless, I embraced the challenge and three years down the road, oh man, I’m so glad I did it!
A fruitful journey delivering business value
The biggest change for me, looking back, is the change in focus. Nowadays, most of my time I’m thinking at the business level, I’m not slowed down by technical implementation details, and came to realize just how valuable that is for business. In fact, my fear of becoming obsolete was justified, but I had it all wrong. I would have become obsolete if I hadn’t made this switch, if I had stuck with some technology just because I was good at using it, or that it’s cool, or that it gives my brain the extra challenge.
I realized that my value is greater by being able to translate business requirements into working software at a pace that makes sense to business (i.e. super fast) than by simply being the guy that’s “really good at C++.”
If I can try a metaphor here, I found it’s more valuable to be the guy that knows where the nails should go than the one who’s really good at hammering them in. The day someone invents a nail gun the hammer guy is ‘screwed’, the other guy isn’t.
And for the technical challenge, I haven’t lost it, it just changed. The challenge is no longer the technology; it’s on a higher level. Not focusing on the intricate details of an application has opened my mind to the possibilities of the higher levels.
I don’t mean to make this sound abstract, but the general feeling I get when developing on the Platform is that anything is possible. Integrations are suddenly easy – almost trivial – prototyping / scaffolding is insanely simple, and getting sample data in there is a breeze. All of these things that shouldn’t consume much development effort, actually don’t.
I find myself saying “yes, of course we can do it” almost all the time, whereas before I mostly said “yes, we can do it, BUT…” and the but was anything from we need extra time to develop an integration API, setup additional working environments, learn new languages, etc.
While all these things get me some “street cred” as a coder and beef up my resume with more tool knowledge, I would find myself less attractive to an employer if they can hire someone to do the same things I do but in one fifth of the time.
My guess is I would eventually become niche, still providing some value but to a decreasing number of people.
Of course I still miss coding from time to time, and I tend to jump at the opportunity to create extensions in Java or C#. It’s fun for me and I think it will always be, there’s no way around that. But I still find many of the same mental challenges I know and love while dragging circles in OutSystems Service Studio.
The good and the bad
I still can’t turn off my architectural mindset. I mean, the Platform makes it easier to do things, but it can’t do ALL the work for you. There’s still good coding and bad coding in the OutSystems world. There’s still good and bad architecture; there are still good and bad algorithms; there’s still fast code and slow code. All the differentiators and challenges are still there.
Just because everyone can write a C++ class doesn’t mean that everyone does it well, and I believe the same applies to any programming technology. So don’t worry, you won’t be bored and you’ll be a more valuable resource to any company that actually cares about getting value for money.