10 years into a software engineering career

Unknowingly I’ve become what I always wanted, but couldn’t even name it. I have a short story to tell, about how I got here, and where I want to go.

The story starts innocently when I was about 16 years old, and read “How to become a hacker” for the first time. Not only did it make sense, but it was also very inspiring. It was a curriculum I knew I should follow to get where I want.

I also knew I wanted to be close to computers, solve problems, and share my findings on the internet.

The story

Looking back, I think it started with an obsession with Linux distributions. I was reinstalling them over and over, Fedora, Mint, Xubuntu… ● 1 trying to understand the pros and cons of each system. About that time I’ve also got my first smartphone, installed a Python interpreter on HTC G1, and wrote a bunch of scripts that helped me through high school. Between 16 and 18 I’ve learned Django web framework (build an e-commerce store with Paypal integration), HTML, CSS, and even did some PHP to hack around WordPress templates.

After high school, I’ve made a few iOS games using Cocos2d. It was a no-brainer to study CS - so I did get Engineering Degree. In the meantime, I worked on iOS apps at night. I chose Android for my final engineering project - just out of wanting to give Android a try.

Quickly, I’ve become an iOS expert. I got in early - around the days of iOS 4. I’ve learned Objective-C, managing memory by hand, different paradigms, how to package SDKs, etc. It was all very exciting and got me very far. I think that the iOS ecosystem is a good start for inspiring programmers - it does many things right - the nomenclature, just the right APIs, documentation, and examples. Also, there is a lot of satisfaction from building apps and having your software in your pocket.

I moved to Warsaw to get my Master’s degree at the legendary MIM facullty. This was a real university (not a polytechnic). I needed to refresh my math a lot. Discrete math, logic, algorithms - man, it was scary and fun at the same time. That Master’s program was just awesome - learning modern cryptography, writing a parser in Haskell, a compiler in C++, and exams - where we compiled Java to JVM and C to Assembly. By hand. On paper.

During a summer break, I got a job writing an iOS library as well as a small firmware, both to scan for BLE beacons. The CTO of that company asked me if I could learn Elixir and use Nerves to write the firmware. I was up for a challenge, and I did deliver. Even though I did not get any more Elixir work after that, I still use it for Advent of Code and alike. The syntax is just so attractive.

At the end of my Master’s, I got very interested in Game Theory, social network analysis graph centralities, etc. I was hoping to write a smart-ass thesis in that area, but in the end, I just didn’t. At the time I thought it was OK (“Don’t write if I don’t have anything to contribute”) - but now I kinda wish I’d closed that chapter. Anyway…

Thanks to my mobile experience I took a Senior Software Engineering role at a biometrics startup. Another iOS library, this time to communicate with the peripheral. ● 2 This was a very interesting project - mostly because of how many problems are there still to solve with biometrics. Optics, Computer Vision, AI models, software architecture, testing environments, real-time processing, and analytics of the capture logs. This got me hooked.

My next project was more or less, the same library but for Android. Fortunately, Kotlin was around at this point.

● 3 - Story Appendix

The changing moment

After that, I was moved to another project within the company. It was a C++ firmware for a face recognition device. The problem there wasn’t software - it was requirements, architectural guidance, team building, and software delivery. I tried my best and was even named a manager. I’ve mastered OmniGraffle, spent evenings communicating with US-based stakeholders, and mornings trying to lead a Polish development team. I think I was finally exposed to what people have shielded me for all these years.

Managing an offshore team is hard, it’s even harder to manage an offshore team that is part of an external software house. The problems I encountered:

  • managing communication/relations between companies (internal product team vs software house team)
  • devising clear requirements
  • selection of tools/languages to solve a problem
  • understanding of the end user
  • playing around vs delivering
  • self-initiative of developers
  • understanding of what other teams are doing
  • and a list of common principal/agent pitfalls

I wore a manager hat for a while. I’ve learned a lot from a different side, and the most valuable realization was this: no matter how many smart people you hire, and how many nice frameworks are used - if the organization and processes are not in order, you will keep losing time and money. We make software to solve a problem, we make it for the users. This is how I see it - and if there’s a dirty hack or unformatted code, or paradigm break - it doesn’t matter. What matters to me is solving that problem in a timely manner, in a friendly atmosphere, and reiterating on it.

Eventually, we got this project in order - we’ve hired some new bright people (and an software delivery director to release me), and the product is now rock solid.

New opportunity (or: new problems) knocked - the company set out to make a new product. And I was offered a new role… Systems Architect ● 4 . I had to google what that means, - and actually, I ended up clueless.

It sounded like I need to make some kind of architecture - yeah I get that.

I’ve listened to a lecture from a Systems Engineer from NASA - I got that I would work between the teams and make sure everything integrates nicely - OK, I like that.

I read a book “The Art of Systems Engineering” - I got a theoretical background to talk about systems, a few good ideas, and workflow diagrams - learned a bit, worth skimming over.

The realization

So I tried my best with this new opportunity:

  • proposed software architecture consulted it with key developers, and made sure everyone is onboard
  • researched, reviewed, and tested different hardware options - narrowing down the scope of the system (keeping price in mind)
  • learned about AI accelerators, researched the space, the compilers, the availability, the readiness, the speedups
  • started in-house algorithms development - so far we’ve used 3rd party algorithms for most biometrics - this was different we set to develop our own. Together with the research team, we proposed network architectures that are small enough and able to quantize for the accelerator and the strategy for the training
  • spec-out a storage and training servers
  • helped prepare the tools and scenarios for data collection
  • created a simulation test environment to be able to replay the prerecorded videos and create test packages
  • actively participated in scoping the MVP, and how to onboard early adopters
  • consulted the roadmap and new functionalities with the backend team
  • narrowing down integrations with 3rd party vendors
  • wrote parts of code, mostly in JS and Python

Only now, when I reflect on what I did - I can see, that I’m indeed a Systems Architect, and not a Software Engineer anymore. And this is a happy place for me, this is where I feel the most productive and fulfilled.

I also wanted to mention the Lex Fridman interview with John Carmack, especially Carmack’s advice for young people, where he makes a point of doing systems engineering and that it may not be for everyone. He said, “You can’t learn everything, but you have to convince yourself that you can learn anything…”. I agree 100% percent with what he says, and it resonates with me.

Anyway, I just wanted to share my path and what I do, because at least for me the Systems Architect/Engineering job was not very intuitive at the beginning.