A computer science education is needed to be a Software Engineer.

I’m extremely biased when it comes to whether a computer science degree needed to become a software engineer. Laying all my cards on the table: I have bachelors and masters degrees in computer science (b-schools). I have hired engineers for my team and for the organizations that I’ve been a part of. I believe coding schools only give you a small, limited subset of a computer science education for an entry level roles. I believe that beyond L2 that a computer science degree or education should be required.

John Arundel shared on Twitter this morning, “Umpopular opinion: you need a degree-level education in computer science to be a really good developer. If you have one from a university, great. If not, it’s time to start educating yourself. The resources are there; all you need is willpower, effort, and time”

I know this is an unpopular opinion—I share this opinion. I know this opinion because this opinion is lamented online. While it’s true that there are good developers without the degree. But the lack of education in development is reflected in the code I see everyday. It’s reflected in the open source code I use everyday. The lack of education only gets you so far. You have to keep learning, keep growing. You are only limited by the knowledge that you have.


I can’t stand to see another black body dead on the ground.

I can’t stand to see another black body lying dead on the ground. It bothers me emotionally; it keeps me awake at night. I don’t know these people who died, but they look like me. I can’t watch the news anymore. I don’t understand why this keeps happening.


Let’s add a little diversity to the mix.

Lack of diversity in tech is a huge problem in tech. There are so many underrepresented groups in most the largest tech firms in the country. As a black engineer I got use to sometimes being the only black candidate, the only black engineer on the team, and the only black employee in the company. While I’m truly grateful for being employed, I truly believe a lot of calls for diversity is just lip service for marketing.

Go read John Boyega’s unfiltered interview about how Disney (and Star Wars) sidelined him

If you hire minority or underrepresented people but have no plans to have them change your company’s culture, plans to have them influence your company’s decision making, plans to have them impact your company’s bottom line in a positive way, then you don’t have a diverse company. You don’t want diverse company. You have or want assimilation.


Moving to Kubernetes too soon

A couple of my friends and I have had several conversations around Kubernetes and team adoption. There’s nothing wrong with Kubernetes–it’s a great tool with a wonderful, rich development ecosystem. There’s a huge diverse development community that advocates for its members by helping anyone that needs advice on whatever issue you could be facing. Kubernetes is great. I love using it. But, is your team or organization ready to use it?

Whether you are on GCP, AWS, or Azure, each offers the ability to run Function As A Service (FAAS) in the cloud without having to run popular software frameworks in the cloud. Each of these cloud providers has its own containers systems to deploy applications/services. By using containers, your team can continue to use popular software framework because the logic is encapsulated. There’s always a way to deploy code to the cloud.

Does your organization have enough resources to support it? Does your infrastructure planning include increasing headcount to support all of your development needs? Does your SRE teams know how to support it and has plans to support your development teams? Do you have a reliable CI/CD processes to deploy your application and manage deployment orchestration?

If you don’t have to these question, maybe you should hold off moving to it.


Deliver quality, not features or enhancements.

Delivering something that works consistently is far more important than delivering more capabilities that work sometimes. If development teams and/or customers are depending on your platform are constantly interrupted by an experience that leaves them with no desire use your platform, services, or components, then you could be losing them forever. It’s a chilling experience to be embarrassed to find that no one wants to use those capabilities or platform. If that happens frequently, you might just find yourself out of business or out of a job.

Can you automate the testing your tools and services on time interval against your QA and Production environments? You can catch more errors this way before your customers have an opportunity to report them. Are bugs and feature defects treated with the same priority as feature enhancements? You can’t build on a house that’s crumbling beneath you. Do you have metrics that report the frequency of those bugs to know how many customers have been impacted? You won’t ever know how bad the problem is until you start tracking irregularities.

Does your system or services report system telemetry so that you can build usage patterns to alert off when irregular usage occurs? You can build machine learning off of this data to scale up or down to meet that demand. Does your team have have SLAs that they’ve committed? What are the consequences of frequently missing that SLA? How is service interruption evaluated? Does everything pause when those SLAs aren’t met. Finally, does your team have a culture of accountability where bugs and outages are treated as opportunity killers? No one suggesting building an ivory tower, but the teams have to understand that your reputation as an organization matters.


Embrace devops culture, not just tooling.

I might be dating myself, but I remember when there wasn’t a public cloud to deploy to. No AWS, Azure, or GCP. Most of the organizations that I worked in Chicago had their own data centers. These companies rarely had a disaster data center(s) because it was too costly, deployments took hours/days, and run or playbooks were meticulously kept to ensure the smallest down times. Nevertheless, some issue(s), some glitch(es) happened during a deployment(s) that required both developers and administrators to get on the phone to figure it out, often on the weekends or middle of the night. After action reports rarely lead to any meaningful changes because the need for some features or pressing initiatives took our attention away until the next incident.

Development and system administration teams were seperate groups/teams, and, depending on the organization’s culture, things were contentious between the two. Different philosophies, goals, and a tinge of us vs them seemed to simmer beneath any poor interaction. Any hope for some type of melding of the minds to resolve this tension would come much later when tooling that enabled developers to deploy their own code and resources to a private intranet or public cloud,

Fast forward to 2008/2009, I deployed my first Google App Engine code to the cloud with python! What an exciting time! I could define my own deployment, database migration (big table, i think), and push to the public cloud. No assistance needed. No one to confront, other than myself, when things failed to roll out. I felt a true ownership over what I developed. Tools like GAE and Amazon SQS were game changers in terms of developer ownership.

At lot of time has past then. Concepts like CICD, pipelines, and scripting hold the attention of most business and engineering teams for the last five years. Every business now cries for faster results for getting services and resources to customers in a reliable, dependable way. Most teams have their tool(s) that performs n-actions to delivers functionality to deploy; however, I no longer see the meticulous care taken by system administrators, now developers, to ensure proper care for managing cloud resources.  It really begs the question: have we just embraced tooling and the culture of devops? Have system administration teams been disbanded and integrated into development teams as devops teams without context of actually maintaining these systems like our salt and peppers did?

Career Advice Career Path

What’s it like to be a Staff Engineer?

Tell us a little about your current role: where do you work, your title and generally the sort of work do you and your team do.

I’m a Staff Software Engineer at ActiveCampaign. ActiveCampaign is a category-defining Customer Experience Automation Platform that helps over 100,000 businesses in 161+ countries meaningfully connect and engage with their customers. It creates optimized customer experiences by automating many behind-the-scenes marketing, sales, and support processes. Businesses of all sizes have access to hundreds of pre-built automations that combine email marketing, marketing automation, CRM, and machine learning for powerful cross-channel orchestration, segmentation and personalization.We are based in Chicago.

I currently work on the streaming team (3 people) where we are integrating Apache Kafka and related software tooling into our stack to begin decoupling our monolith. At its core, my job is to work across many teams to ensure the future of our platform is both scalable and maintainable. I get to work closely with our teams to not only learn from their experiences, but also to guide decisions and ensure we are all developing fault tolerant, resilient systems/services. Through collaboration, empowering others and staying focused on customer value, we deliver systems/services that support both the growth of ActiveCampaign and our customers!

What does a “normal” Staff-plus engineer do at your company? Does your role look that way or does it differ?

There are days where we are writing code with developers to help drive projects forward as an individual contributor. There are days where we are writing terraform configuration for deployments and helping to develop/write SLA/SLO/SLIs. We jump in with our SRE teams in the trenches when there are significant issues that cause outages. We frequently meet with our directors, VP, and our CTO to give presentations to advocate for the creation of new engineering teams, strategies, and frequently make recommendations on how we move forward with the platform.  We manage and run projects. We mentor and train developers in our organization. We advocate for our developers to have the tools we need. Every day is different. We are given a lot of latitude to choose what problems to tackle within reason.

How do you spend your time day-to-day?

Because of COVID-19, our entire company is remote, like most of the world. At 8am I log into slack, say hello to my friends and coworkers. I check JIRA to track the progress of my projects I’m responsible for. I’ll check in with the engineers working on those projects. Depending on the day, I’ll have “coffee/beer” over Zoom / Google Hangouts with engineers I’m mentoring. Or, I’ll meet with my manager, director, VP, or CTO so they can mentor me and get updates on the org related projects. We have a great working relationship where I can be vulnerable and honest. I’ll meet with our engineering managers and plan projects or give status updates. If I’m assigned coding proof of concepts that need to be completed, then I’ll work on them.

I’m a part of an employee resource group for black employees. When I have time, I’ll check in with my teammates in that slack-channel.  I’m passionate about diversity, equity, and inclusion (DEI), so I’m always sharing and learning in our DEI slack-channel.

My manager manages other teams, so we have stand-up at the end of the day.

Where do you feel most impactful as a Staff-plus Engineer?

I feel most impactful when I see projects getting completed and engineers growing in their crafts. I love seeing other engineers grow. It’s a really cool feeling when I see engineers learn new technologies and become “rock stars” in the organization and industry. My aim is to be a skills multiplier. I’m extremely goal-oriented so anything that gets us closer to helping our customers meet their specific business needs is always a reward for me.

Can you think of anything you’ve done as a Staff-plus engineer that you weren’t able to or wouldn’t have done before reaching that title?

I have had the opportunity to work with multiple teams and a greater impact on the team’s success. Being a leader counts for everything—something that I’ve learned from my director. I am able to have a seat at the table and influence decisions on technology. I have a close working relationship with leadership that allows me to have greater influence on outcomes.

Do you spend time advocating for technology, practice, process or architectural change? What’s something you’ve advocated for?

Yes, often! For example, last year we advocated for the usage of Apache Kafka within our stack to begin decoupling our monolith. We made several presentations on how our current stack decoupled from a specific cloud provider could make us nimble and ease deployment management, allowing us to eventually move to a multi-region cloud strategy. We wrote fit-gap analysis documents detailing how to separate the stack. We found vendors, and we did all the cost analysis. We pushed to where we are now, in the middle of multiple Kafka implementations.

How do you keep in touch with how things really work as you spend less time on hands-on development?

Our organization is small, so I’m always coding (polyglot environment). We aren’t big enough where Staff Engineers aren’t coding. I suspect a day will come where we are large enough this won’t be the case. A lot of friends and colleagues at small/mid sized  startups in Chicago with the same title are still coding. That said, I am always reading books, blogs, attending conferences, and watching presentations on the web to learn new things, so I’m always coding. I attend meetups in the city, too. Chicago has become a huge talent hub for technology over the last couple of years, so there’s always a meetup some night of the week to attend.

How do you maintain empathy and awareness of the realities of developing at your company when you do less development yourself?

I meet frequently with my VP and another engineering manager. Both of them excel in empathy, so I’m learning from them. I also meet with developers on our teams. Communication is vital to success beyond technology. Coffee / Beer with others is always a cool way to get to know others and grow. Technology is the vehicle to get you to your destination, but good communication and relationships are why the journey is there in the first place. 

How have you sponsored other engineers? Is sponsoring other engineers an important aspect of your role?

Yes, I speak to members of our team as well as developers within the organization. The team of staff engineers all frequently interact with our developers to get the “word on the street”. We mentor and build relationships with them; it’s critical to our success.

You first got the title Staff Engineer at your current company. What was the process of getting promoted to Staff?\

I was hired as a Senior Engineer because at the time we didn’t hire into the Staff title. I was told that the title was being created but wasn’t approved. During the year they created the title, and I was promoted six months later.

I helped a new product go live on our platform. Then, I led and architected components for a team of two to a team of five implementing a new data segmentation framework to replace existing data segmentation. I worked with multiple teams and projects. Being able to maximize my skills as a skill multiplier to other developers helped my promotion. 

Early on in my career I was taught that it’s helpful that you should be doing the job that you want to be promoted to. I have found that to be true in every single promotion in my career.

What two or three factors were most important in you reaching Staff? How have the companies you joined, your location, or your education impacted your path?

I have a bachelor’s and master’s degrees and 20 years of experience. My education and experience in computer science gave me a foundation to get interviewed; however, my hard work, consistency, and caring about the mission and our team played a huge factor in reaching the title of Staff Engineer.

Being African-American in the tech industry is really hard. Sometimes you are the only one that looks like you. You have to be relentless about your goals, never giving up. Some organizations may not be a good fit, others might try to hold you back. Find the right organization that fits you and fight to be seen, heard, and contribute. You will work hard to break down stereotypes. You will work harder than your other colleagues for the same achievements and receive less recognition. But the victory comes when someone who looks like you doesn’t have to fight as hard to be a developer at your company. Fight for the man or woman coming after you.

Do you think some companies are particularly good at growing Staff engineers?

Some companies don’t provide career paths for developers who don’t want to tackle people management. I’m very blessed where I told my director and VP I wasn’t ready for people managing yet, and had the opportunity to move into this role. So far it’s been a good fit. 

More companies should create a path for leadership roles that doesn’t include people management of developers. Mentoring and coaching are often missing for folks that are just technical.

Advice for navigating uncertainty and ambiguity that comes with more senior roles?

To be honest, I struggle with this at times. But as time goes by, you will learn that leadership is just as much as a skillset like coding. You’ll quickly find ways to provide value to an organization by the relationships you keep and advocating for your team(s). Focus on being a good leader and caring for those around you. Embracing empathy and radical candor helps.

Uncertainty is a part of the role, and it can vary minute by minute depending on what’s going on. Ambiguity will either drive your curiosity to learn something new or drive you mad.  You can’t worry. You have to carry out your mission and care for your team as you go.  The higher you go in any organization, the more uncertain and ambiguous life gets.

What are some resources (books, blogs, people, etc) you’ve learned from? Who are your role models in the field?

Anything Martin Fowler–I love his books and talks. Robert “Uncle Bob” Martin is pretty huge in the Chicago tech scene–I love his technical content. Rob Pike is a hero mine. His work with golang has been an inspiration to me around minimalism. 

I follow Brian Liles, Erica Baker, Angie Jones, and Kelsey Hightower on social media. They are my heroes that are African-American in the tech industry. Baker and Jones have challenged my perceived perceptions of what it’s like to be women of color in tech. There aren’t that many women of color in tech so I appreciate their insights. Hightower is an inspiration to me because the platform he has–career goals! He gives great talks. Liles is a good leader.

My friends: Zach Bright, Benjamin Doherty, Alex King, John Walsh, Robert Boxall, Joel Vasallo, Nick Petrovits, Matt Jones, Pepi Manieson, Olivia Wong, Drew Wilson, Nathan Keyes, Mark Nuzzo, and Anthony Andras are my role models. I admire each of these people. They are giants in my world and in the Chicago tech scene. Each of these people are awesome leaders and developers. They’ve had a huge impact on my career.


Why diversity is important?

“When you only learn from and are only led by people like you, it’s easy to form and perpetuate a perspective that only benefits and works for people like you. This is a medium-sized problem. But when you’re in power and have been for centuries, and your perspective is cast not as yours but as the best for everyone, you end up with our current situation: a system built for one group but sold as the system for all.” -Matt Stauffer

This is why we need DEI in every context of our society. This is why diversity is so important. Women, Men, Asian, Black, Latino, LBGTQ, etc need to be have leadership positions everywhere.

Career Advice

What does it mean to be a Staff Engineer?

A friend from work recommend these blog posts:

It was a good read. I’ll be contributing soon.


Cool: Thread-local state availability in reactive services Store with Mono/Flux.

I am a huge fan of Spring Boot Webflux. This is cool!