Hello and welcome to Tech Talks, a podcast brought to you by the Technology Education Collaborative.
We're an Arizona nonprofit that supports the secure, thoughtful use of technology.
Today, we're talking to Charles Knox about what he does as a technologist.
This is part of our ongoing series where we talk about technologists, about what they do in their daily lives,
what their jobs look like on a practical level and how they get through the daily grind.
Thank you so much for being here.
Thanks for having me. It's great to be here.
All right. So if you don't mind, we'll just go ahead and get started.
So what is your title or position?
So in the industry, you can kind of do a lot of things.
You can wear a lot of hats, but ultimately I resigned to calling myself a senior software engineer.
Sometimes it'll be a senior full stack software engineer, sometimes site reliability engineer, depending on the use case.
There's a lot that goes into each role that you take on, and it really just depends on the company that you're working at.
So for the purposes of this talk here, call me a senior software engineer.
All right. Fair enough.
So what exactly does that mean?
So what specifically are you doing on a daily basis?
You kind of start your day, 8 a.m., 9 a.m., whatever time works for you according to your company.
And you just sit on your computer, check to see if you missed any emails and look at any tickets that you've got,
whether you use Jira or some other tool like a Kanban board, agile, whatever tool.
And you see, hey, where am I at on my tickets?
Whatever tasks haven't been done yet.
Chances are you're still working on something from like yesterday or the day before or even like the last two weeks or so.
So depending on how your company structures itself, it really just forms the first, I would say, couple hours of your day.
And a lot of companies that practice agile, they'll do what's called a daily stand up.
Right. So a daily stand up is where you kind of get together for like 15 minutes or so.
Everyone kind of stands around in a circle and they talk about what they did the previous day.
If they're blocked on anything, if they need help, that kind of thing needs to be addressed right then and there.
As to how efficient and effective stand ups are, that's a different question, right?
Yes. There's a lot of discussion about agile right now in the tech space, for sure.
Indeed, there is. And it's kind of fun to hear about it.
But as someone who's been in the industry for probably about 12, 13 years, depending on how you count things, I've been doing agile scrum, whatever you want to call it, since around 2013, 2012 in different forms.
And I like some parts of it.
I don't like some parts of it.
I think a little bit of process at a company can go a long way.
But at the risk of going on a tangent, we'll probably just leave it at that for now, for at least the first sort of hour or two of a day.
Right. Sure. The rest of the day really is open and you sometimes have to fight for your day being open as a software engineer.
This is something you just need to push for.
And what I mean by that is some jobs are like, say, managerial or something like that.
You'll be on calls all day long talking to people.
Your job is moving the dial forward through other people as a manager.
But as an engineer, if your calendar is booked with stuff, you're not going to be able to get enough time to focus on coding or whatever you need to focus on.
Right. So if your calendar is open, you're going to have a good day.
You're going to get a lot of stuff done if you can stay focused.
And that's the other challenge is staying focused.
So that's pretty much what a day is like.
You're really just kind of sitting in your chair, getting stuff done, writing code.
And if you're not writing code, you're probably debugging stuff that either is from like, I don't know, I tried to install and set up our environment and something didn't work.
You know, if you work in node, probably trying to deal with NPM install commands breaking or you're trying to deal with Python, you know, your environment just doesn't work anymore for whatever reason because you updated your system.
So many things just happen on a daily basis that are like, this isn't working.
Why isn't this working?
I got to spend a lot of time figuring this out.
And it can be very, very frustrating at times, even just to do basic things.
So you need a lot of latitude in your role as a software engineer to, like, keep your calendar clear because you're going to be running into stupid stuff all day long.
And the actual coding work that you're doing usually is sort of minor by comparison.
If you're really banging out a lot of code in a day, it's probably not high quality code, which high quality code can be taken in a lot of different ways.
But I think you probably get the gist of what I'm saying.
If you're writing too much stuff in a day, you sort of risk this quality versus quantity imbalance.
But that's basically a day in the life, so to say.
OK, that actually goes really nicely into the next question, which is, what would you say your least favorite part of what you do is?
Because every job, no matter how much you love it, there's always going to be just things you have to do that just, you know, do not let you up inside.
But you got to do them.
So what are some of those things?
I think a lot of the challenges that come with any job in the sector is having to sort of duke it out with your colleagues about certain topics.
When you are putting forth a proposal or an architecture design of something that you've been assigned to work on, you'll get a ticket, let's say, from Jira or something else.
And it will say implement X, Y, Z feature.
And a lot of the details will be left out depending on your company.
Sometimes you'll again, depending on your company, if you have a UX designer and maybe like a UI designer and a very well structured project owner on your team, they will have figured out a lot of details for you.
And that's actually the mark of a good team is if they figured out a lot of the questions in advance, they curate good tickets for you, then you can actually just move forward with your job and your life.
But in situations where the onus is on you to architect everything yourself for whatever reason, right?
Not necessarily that there's something wrong.
But because you are the only person who can figure this out, there's no UX designer that can figure out how to architect your caching layer or something like that.
You know what I mean?
Sure.
So if the onus is on you, you have to really put a lot of thought into just putting together a reasonably good document that describes everything well, and then sharing that document with people and being prepared for a lot of aggressive feedback.
In some cases, some people get very, very opinionated about these things.
And if you don't have polite conversations and if you don't have reasonably respectful discourse, things can devolve pretty quickly.
And I've seen it happen many times over the years.
And so ultimately, you have to be prepared to push for things.
And if you can do it in a way that wins people over by being polite, always listening to perspectives, taking everyone's feedback into consideration, you can definitely move things forward pretty well, I think.
But also, another part of that is don't spend way too much time on writing the perfect documents either, because if you're anticipating every single thing that could go wrong and trying to squeeze that into a single document, no one's going to read it.
I've had this happen many times where I'll put together a very well thought out document that took me all day long to write or maybe multiple days.
I'll send it out. And because people are so busy with other things at their jobs, they just end up not really paying attention to the close sort of intricate details that I had to solve.
Usually what will happen is you can put a basic layout of your designs and then more or less hash out details in like a real time synchronous meeting.
That's one of the struggles, I think, that comes with this sort of work.
There's lots of other things, but I'll kind of keep it at that for now.
You're definitely touching on several themes that repeatedly come up in all of our conversations with all kinds of technologists, which is the importance of soft skills, the importance of being able to be diplomatic with your co-workers.
Perfectionism is definitely a trait that's very common among technologists, but can be a double edged sword.
That's a very common thing.
I'm really glad that you brought that up.
But yeah, that makes a lot of sense.
Just kind of having that assertiveness training, right?
It's a hard balance.
Assertive diplomacy.
Yes, definitely.
Absolutely.
So that gets us into what's your favorite thing about your job?
So you wouldn't be putting yourself through that if you didn't love it, presumably.
So what do you love?
What gets you up in the morning?
What do you love?
What are you looking forward to?
Yes, a great question.
So I just love writing software, solving problems, the satisfaction of having something come together, you know, like getting that REST API endpoint up and running and having it do the thing you asked it to do successfully.
Even on the first try, God forbid, you know, like that's the best thing.
So just those little bits of satisfaction, I think, make a lot of it worth it.
Getting better at your development environment, you know, learning to customize things that make you more productive, all those little things that come with it.
I try to find a lot of satisfaction in that, you know, like, for example, I run Linux on all of my systems.
I don't use Windows or Mac whenever possible.
And currently I'm succeeding at that, but not always.
And so ultimately, like if I can customize my environment to exactly meet my needs, like, for example, I've got a mouse at home.
It's like one of those, it's like a trackball mouse.
That's what it is.
And it has a couple of buttons on it that are like for going back and forth, like on a Web page or whatever.
And I have it customized in X11 on Linux so that it receives the event for pressing that button on your mouse.
And it actually runs a bash script that moves my cursor across the screen in like four different locations based on where it previously was.
And this helps me get across the screen really fast without having to exert much on my wrist because I have a wrist injury that's like not insane or anything like that.
But after a long day of work, it sort of adds up.
And so anything I can do to sort of improve my ergonomics and like make my life easier, I look at that as a fun challenge to solve.
And being able to bring that to work, I don't know, I just find that satisfying in a weird way, I guess.
But, you know, ultimately, if I can bring these skills that I learned on the job back home to write other applications and tools and things like that, that solve problems for me personally, I view that as a win every time.
I mean, I learned React on the job, and now I'm able to write a React app for whatever purpose.
I find that to be super valuable.
And I've used that for whatever purpose on many occasions.
So that, I think, is what I love about it.
OK, so it's a lot of optimizing efficiency and the ability to customize things and just basically the ability to apply what you're doing at work in your everyday life and use it for anything I want, you know, like I can write an app or some random person in an afternoon.
I could write something that could really change someone's life just because I spent some time learning how to write Golang or Python scripts, you know what I mean?
So the opportunities are pretty substantial.
And that sounds like there's a lot of creativity involved in that, too.
There is. That's the thing is you can just go crazy and write it however you want.
And most of the time it's fine.
You know, you don't have to worry about your algorithm O of N squared, whatever, because you're just kind of writing it at home for one person to use or whatever.
There's a time and place for algorithmic efficiencies and that sort of thing.
And that's also an exercise in and of itself that can be very satisfying.
But when you get to write something yourself and just solve that problem in your own way, there's really nothing quite like that.
It feels like you're sort of building a house almost, but just for yourself quickly.
That sounds really fun.
Yeah, that's I can tell the excitement coming off you.
It definitely comes through.
So what is something practical you would want somebody who's considering going into this field to know?
There is a lot of practical things that go into just simply existing in this space.
I think the most important thing is your relationship with your manager and your co-workers.
I've always sort of leaned on trying to be as respectful as possible to your colleagues in particular, your co-workers rather.
Your colleagues can be super supportive of you no matter what you're going through.
They can take a load off your shoulders if you're going through like a really hard time or if you need to take some time off of work.
The knowledge that your co-workers can pick up some of your slack and having good relationships with them is it's something that brings a lot of peace of mind.
But with your manager, your manager ultimately controls a lot of your experience at work, right?
So I spent around eight years at a very, very big tech company, Fortune 50 type size, and your manager is basically responsible for assigning projects to you and allowing you to take on other work here and there.
So if you don't develop a good relationship with your manager or if your manager and you aren't jiving, you know, it's going to be a problem.
And I've had experiences where it was very problematic.
A manager will hold you back or they will move you forward is really what it comes down to.
There's also some other things that I'd like to point out, particularly with working in big, small and medium companies.
I've worked at big company and I've also worked at a few very, very early stage startups like pre-seed, seed stage.
I've been sub 10 employee the first 10 employees.
I was one of those.
Yeah, the experiences between those are very different.
You get a lot of freedoms to do whatever the heck you want at a very, very early stage startup.
And for me, what was appealing about that was, oh, I can just run Linux on my computer and, you know, do whatever I want because there's no rules at this company.
You know what I mean?
But at a big tech company, they give you a computer.
They say you get this Windows computer or you get this Mac computer.
But just a heads up, everything sucks about it because it's an underpowered computer that's loaded up with lots of antivirus stuff.
And also it's loaded up with all these other apps like Microsoft Outlook that takes like, I don't know, three gigabytes of RAM and you only have eight gigabytes of RAM.
What are you going to do about it?
Oh, and not to mention, you have to run VS code and VS code is super slow on Windows for some reason.
All these other things that add up, you know, like trying to emulate bash and all this stuff on a Windows computer, on a Mac.
Well, Mac is different, but all these things add up and they can create a very frustrating experience, I think, when you're working at a big tech company and you're used to a different thing.
I know I'm kind of going on a bit of a tangent here, but but bear with me.
By all means.
Yeah, I like that you're talking about non-technical things, because I think a lot of people that want to get into the tech industry, the first thing they look at is what certifications do I need?
And then they get told that they need a mentor.
They get told they need work experience.
And obviously these things can have a certain degree of value.
I know there's a lot of conversation around certifications, but leaving that aside, like I think we can all agree, you know, a CISSP cert is valuable, right?
A SANS cert is valuable.
Leaving all that aside, though, what I do want to point out is the fact that you're talking about a lot of very much, you know, these are soft skill, human dynamic skills, right?
So working on your communication, working on your assertiveness, working on your interpersonal skills.
And I think it's important to draw attention to the fact that that's a lot of what you're saying here.
I do gravitate towards that a lot, probably more than the average person or something.
I don't know. I'm very introspective about this stuff.
I've spent many years thinking about how each interaction could have gone better.
And I try to improve that where I can.
Right.
Because, yeah, ultimately the stuff you're doing day to day, regardless of what certifications you have, regardless of your education, is just, can you write these functions in Python?
Can you unit test this code that someone wrote?
Can you fix this problem that happened in production?
And a lot of that is just like guessing sometimes, you know, like, trying to understand what happened is not always going to happen quickly.
You need to maintain code more often than not that some random set of people wrote that no longer work at the company.
In a lot of cases, it's just a matter of what your mentality is.
Can you think about it critically enough?
Can you orient your day so that you're able to think about this stuff?
If your life is chaotic and you're unable to just really think about this stuff and find the patience within you to kind of debug things no matter what they are, then this career will be very challenging, I think, for anyone.
OK, fair enough.
And then I do actually have one other question that I am starting to ask everybody.
Just because of the incredible, creative, talented, wonderful individuals we are getting into here.
So are you involved in anything outside of tech, any community organizations, any volunteer work you do, any type of, you know, passion projects, anything like that that you'd want to talk about?
Yes. So I've actually taken a little bit of time recently to work on a project called Stylistic.
This is an app that is intended to sort of protect your privacy in a certain way by allowing you to upload a photo, again, in a privacy-respecting manner, and then have an AI using stable diffusion on the back end.
Sort of generate yourself in a variety of different contexts, just sort of for fun in some cases, sort of looking professional in other cases.
But basically, the idea is I don't like to have my images of myself all over the web indexed by god knows who, right?
Sure.
So I wanted this app to be able to generate professional-looking images of myself or even fun ones for whatever purpose, but have it just be a little bit unrealistic and not actually my face because AI always distorts it slightly.
Just enough to sort of fool whatever indexing face recognition stuff is out there.
At least that's the theory.
But I digress.
So I wrote this app called Stylistic.
You can generate images on there for free and then you can buy an image that you really, really like in full quality for three dollars.
I'm not planning on scaling this thing out to infinity or anything like that.
I just did it as a fun project.
I wrote it in Golang and HTMX, which, you know, I'm sure some people have opinions on that.
But it's using all this hardware that I have at home.
It's running on a Nvidia 4090 GPU.
Had a blast writing it and I can't wait to do something like that again.
But if you try it out, definitely let me know.
There's a contact form on there.
If you have any questions, I'm trying to expand it a little bit more.
But yeah, that's something that I've been involved with.
I hope that answered the question sufficiently for you.
It answered it very well.
So Chuck, thank you so much for coming in.
That was fantastic.
And thanks a lot.
Thanks for having me.
We are recording this at the Advanced Cyber Systems Lab.
That is at Gateway Community College.
It's on the second floor of the MA building.
We do have a number of things that anybody in the public is welcome to come into the lab and use.
That includes a right to repair workshop.
We have anti-static tables.
We have this podcast studio.
It does not have a recording charge and you do not need to be particularly tech savvy to use it.
You're welcome to come in and use that.
Obviously, we have computers.
We have servers you can play with.
So come check out the Advanced Cyber Systems Lab at Gateway Community College.
The Technology Education Collaborative does have a partnership with them as well.