Professional Deconstruction
How and Why software development pushes against my personal desire for a catechism-driven life.
Warning: I got a little bit technical with the wording in some of these sections. I apologize for it, but I also want to avoid writing an article full of extremely vague language.
Guard Rails
On July 1st of this year, after being a professional software developer some time between 4 and 7.5 years (story for a different time), I was promoted. This wasn’t my first promotion, but it’s only one of two times that my title has changed! I went from Development Engineer” to “Senior Software Development Engineer”. The only other time my title changed, it was to remove the word “Junior”. This time, I’m adding the word “Senior”. Making waves, making waves….
Looking back at my career, I can see a clear difference from 7 years ago to now in how I view problems, as well as the problems I solve. Here’s my breakdown of the three primary roles I’ve had, as well as a real-world plumbing example that attempts to illustrate the size of the problems I’m working in.
Junior Software Developer - I have one small task to add, remove, or fix a piece of functionality. I can’t change the programming language, environment, or access patterns of the system I’m working in, but I can leverage those three things to tweak its behavior and complete my task. The system I’m working in is static and unchanging at a high level, which helps to give me boundaries to work in and, through those boundaries, gives me a better understanding of what the system does, how it does that, and why it was created that way.
TLDR - Given a component, make it do something.
Plumbing Example - Given a bath tub, ensure it doesn’t leak.
Software Developer - I’m tasked with designing a component or components of a system in order to accomplish some business goal. For the most part, I still can’t change the programming language, but I can decide the access pattern and can sometimes change the environment the code is running in (if I have good reasons). The system is a little bit more dynamic, because I can change some boundaries if I prove that it’s worth it. Because I’m working with system-to-system interactions, I’m given a better understanding of how business goals are accomplished and how our software fits into the bigger picture of the company.
TLDR - Given a system, make components interact.
Plumbing Example - Given a bathroom, design the bathtub and the sink, including the pipe connections to the rest of the house.
Senior Software Developer - Individual coding tasks are no longer assigned to me. I’m either given a business problem and asked what software would be needed in order to solve the problem, or I’m supposed to find solutions to different areas in my team’s problem space. Programming language and environment are up to me to decide, and access patterns are decided on by the software developers that end up picking up the task. I have a much better understanding of how all of our systems interact and what they accomplish, and have relative freedom to redesign or completely get rid of a system if it’s not accomplishing its purpose efficiently or accurately.
TLDR - Given a bunch of systems, find and solve problems in those systems.
Plumbing Example - Given a house, ensure that it connects correctly to the city water supply, that water is clean and usage is monitored, and either come up with a rough design that allows room-specific plumbing to be set up correctly (if it’s still being built) or figure out if the current setup is worth tearing out and remaking.
Alright, maybe plumbing was a bad choice, because I know nothing about plumbing. But I tried my best!
A core difference in each of these roles is what I took as fixed, and what can be modified. Each step of my career, a few more things transition from fixed, to changeable. At the current stage of my career, the only boundaries I have are a direct result of decisions that I’ve made about these systems in the past. I coded System A in Java 2 years ago, and now I need to implement a new feature in it. It might be inefficient to implement that feature in Java, but re-writing the entire thing in a different language would be a big effort and likely not turn out as expected…
Here’s the great thing: At each step, the list of “fixed” variables to the problem let me more fully understand the other, changeable pieces of the problem. Fixed variables act as guard-rails, or fences, to what I try to learn about. The senior developers wanted me to develop really strong low-level coding skills, so they said “Ignore all of this bigger stuff, learn about this small component.”. As I continued in my career, those guard-rails gradually fell down (or I was forced to bust through them) and I learned about those bigger components. I really appreciate the incremental approach to development that I was given, because it allows me to approach problems at a high-level, while still having a good understanding of the best way that it should be implemented at a low level.
It also allowed me to question my previous assumptions. Rather than worry about these new, shiny things (serverless architecture was a big one), I was able to question what I thought I already knew. I learned how to write code in school, and then I got a job and suddenly the code looked noticeably different! Same programming language, but it was structured, separated into single-purpose functions or classes instead of the all-in-one-file approach that I took in school. As a junior, all of my “how to code” assumptions from school were up for grabs. When I got promoted, suddenly all of the previous assumptions I had formed from working as a junior were questioned (how to structure a micro-service, how to write a usable API). And now, I’m being forced to question even more things!
You mentioned Catechism…?
I got my current job a year into college. It happened to coincide with a continued period of deconstruction that I’m still somewhat going through with my Christian faith. The scope of my deconstruction also seems to track my career development, in that as I move to higher-scoped roles as a software developer and hold less things as “fixed”, I do the same with my Christian faith. Or maybe my career deconstruction tracks my theological deconstruction… Regardless, I think that this sort of methodical, purposefully guard-railed approach to deconstruction has been a big factor in my growth not only as a software developer but as a Christian. I also think it’s been a necessary push back to what I can only describe as a desire for catechism.
For those unfamiliar, a catechism is a collection of Christian principles, written as a series of question and answer prompts. As an example, the Westminster Catechism starts off with:Q. What is the chief end of man?
A. Man’s chief end is to glorify God, and to enjoy him forever.
The catechism then goes on to ask, and answer, 106 more questions about Christian teachings, including who God is, what the Lord’s Prayer is and why we pray it, what a Sacrament is, what sin is and where it comes from, etc. In short, it’s supposed to act as an introduction for new Christians or a guide for existing Christians for questions they might ask about faith and Christianity. It doesn’t answer everything, but it attempts to give answers to what the writer considers the important questions of Christianity.
I was raised on a catechism. I don’t remember the specific booklet that my parents used, but I remember going through one, and I remember the feeling of safety associated with the questions and answers. Child me thought, “What is there to feel confused or nervous about, when there’s already a list of answers to all of the questions I might ask?”
One problem with that approach, in my opinion, is that it can lead to (and did lead me to, for a time) an approach to life that Christianity is “solved”. The reaction I had when I was younger to a lot of questions that other Christians asked about faith was to tote out the cookie-cutter, catechism-correct answer. Did I think much about the answer? Sometimes, but for the most part, not really. My experience with this sort of approach to life is that I fell into stagnation, letting my spiritual walk turn on auto-pilot, while outwardly I still had the “correct” Christian answers.
It’s a Marathon, not a Math Problem
I want to clarify that I think that catechisms are useful. Without defining what you believe (holding something fixed), you’re not able to have the foundation necessary to understand other aspects of life. I also believe that God, in his nature, has created concrete truths in the world. In other words, correct answers exist. However, it’s the desire to hold as tightly as possible to your given answers that causes problems, without viewing life, and Christianity, as a journey.
So, I find myself on this journey of holding less and less things tightly in my Christian walk. Comparing my beliefs at 26 to my beliefs at 16, the list of “You need to believe X to be a real Christian” has grown remarkably shorter. To list a few things that I no longer consider absolutely essential to a Christian life:
Belief in a literal interpretation of all parts of the Bible, specifically surrounding a literal 7 day creation and Job
Belief that the Bible can be fully understood by just reading the Bible as is, specifically recognizing the importance of language, culture, and history at the time of writing
Belief that women shouldn’t be allowed to teach men in church
And some things that I’m currently thinking about and wrestling with:
The concept of the trinity, and why a lot of denominations consider it absolutely necessary for a Christian.
LGBTQ+ issues and the importance of sexuality
The concept of heaven, hell/eternal judgment, and the afterlife
16 year old me would be horrified at this point in the post. 26 year old me feels stronger in his faith and his understanding of God in that I’ve gone through the process of picking apart beliefs that I was raised with (either implicitly or explicitly) and attempting to come to a conclusion through prayer, discernment, discussion with others, preaching from trusted pastors, and life experience. Rather than view Christianity as a glorified theological look-up table (Have Question X, Get Answer Y), I’ve come to view Christianity as a continual, incremental, daily understanding of the God of the universe, his creation, and what he’s done/continues to do for us.
The fun, but also scary part, is that I believe that I’ll keep going through this process for my whole life. I’m sure there are beliefs I hold now that I’ll absolutely cringe at in a decade, but I’m even more sure that I’ll feel a deeper understanding of God’s character at age 36 than I feel at 26, and at 46 than I felt at 36. I’m excited to see what happens.
Hebrews 12:1-2
1 Therefore, since we are surrounded by so great a cloud of witnesses, let us also lay aside every weight, and sin which clings so closely, and let us run with endurance the race that is set before us, 2 looking to Jesus, the founder and perfecter of our faith, who for the joy that was set before him endured the cross, despising the shame, and is seated at the right hand of the throne of God.