Expectations and Responsibilities for Software Engineers at CTG

Expectations and Responsibilities for Software Engineers at CTG
Photo by Marvin Meyer / Unsplash

As CTG continues to grow, we are working carefully to ensure we maintain our culture and values as we scale. We also want to ensure our team has a clear understanding of our available career trajectories, and how we anticipate expectations and responsibilities grow as our team members progress along their career path. For the purposes of this initial post, we will focus on the career ladder for software engineers (and we will follow up with separate posts for other roles as well).

Baseline Professional Expectations

Our five core values shape our company culture, and influence our expectations.  No matter what role or level of experience, there are several core expectations that we have for our team:

  • Be respectful. Whether it's dealing with customers, colleagues, partners, or anyone else we interact with, we expect our team to treat everyone with respect.
  • Be willing to learn. Learning requires some level of humility, as it involves identifying and resolving knowledge gaps.  Adapting a mindset of continuous learning and improvement is crucial to long term success in an ever-evolving field.
  • Be an effective communicator. Keep your colleagues and stakeholders informed with clear, concise, and frequent communication.
  • Be excellent. We hold ourselves and our colleagues accountable for the quality of our work. We deliver high quality work that makes us proud to be associated with.
  • Be honest. What we say is what we do. We deeply value the trust of our colleagues, clients, and partners.

Professional Expectations by Level

For the purposes of this discussion, we will focus on the levels available throughout a software engineering career at CTG, along with the associated responsibilities and required skills.

Associate Software Engineer (E1)

An Associate Software Engineer is typically a recent college graduate with a degree in computer science or a professional with less than three years of relevant professional experience. The overall expectation in this role is to learn new skills and contribute to your team in meaningful ways as you grow.

  • Basic software development experience
  • Familiar with software development fundamentals
  • Competence in at least one programming language
  • Competence with at least one framework related to web development
  • Basic git knowledge

Software Engineer (E2)

A Software Engineer is typically an experienced professional with a computer science degree and at least 3 years of relevant experience. The expectations for this role grow wider in breadth, with expected knowledge of SQL, Cloud, containerization, and more. We also hope to see deeper knowledge of programming languages and improved git proficiency.

  • Professional experience developing software
  • Proficient in multiple core languages
  • Basic SQL skills
  • Basic Docker skills
  • Basic Kubernetes skills
  • Basic AWS/Cloud experience
  • Basic scripting knowledge (e.g. bash)
  • Basic React/Angular
  • Basic CI/CD skills (e.g. GitHub Actions/Jenkins)
  • Basic prototyping & wireframing skills (e.g. with Balsamiq/Figma)
  • Basic regular expression skills
  • Intermediate git skills
  • Independently able to solve well-defined problems

Senior Software Engineer (E3)

A Senior Software Engineer is a member of the team with proven execution experience and advanced knowledge in multiple core areas. Typically, a Senior Software Engineer will have a computer science degree and at least 5 years of relevant professional professional experience.

  • Advanced knowledge of at least one programming language, with at least basic knowledge of Java, and basic knowledge of Python
  • Advanced knowledge of one language framework
  • Intermediate AWS/Cloud skills
  • Intermediate Docker skills
  • Intermediate regular expression skills
  • Basic DataFrame experience (e.g. Spark/R/Pandas)
  • Basic understanding of networking concepts
  • Ability to independently engineer viable solution architectures

Principal Software Engineer (E4)

A Principal Software Engineer represents an experienced engineer with well-rounded knowledge of a wide variety of technologies. This engineer can independently design and develop robust technical solutions, serves as a technical resource for other team members, and mentors other developers along the way. Typically, a Principal Software Engineer will have a computer science degree and at least 7 years of relevant experience.

  • Capable of independently leading a team
  • Intermediate scripting skills
  • Intermediate prototyping & wireframing skills (e.g. with Balsamiq/Figma)
  • Intermediate knowledge of JavaScript
  • Intermediate knowledge of Kubernetes
  • Intermediate knowledge of Linux
  • Intermediate knowledge of SQL & Relational Databases
  • Ability to independently engineer robust solution architectures
  • Ability to mentor and advise other developers
  • Strong knowledge sharing capabilities (e.g. can lead technical presentations and develop technical blog posts)

Engineering Director (E5)

An Engineering Director is a technical leader with proven experience delivering large and complex technical solutions.  This engineer can serve as an independent technical lead for a new program. Consequently, the role requires advanced technical breadth and depth, as well as strong leadership, communication, and problem-solving skills.

Unlike other roles, advancement to Engineering Director requires both an application package demonstrating technical excellence & leadership as well as the sponsorship and recommendation of an Engineering Director for promotion. An Engineering Director will typically have at least 9 years of professional experience.

Requirements

  • Sponsorship from an Engineering Director
  • Application package demonstrating technical excellence & leadership

Expectations

  • Capable of leading large scale technical efforts (e.g. multiple teams)
  • Proven success leading substantial technical efforts
  • Ability to independently engineer, manage, and deliver complex solution architectures
  • Ability to lead rapid prototyping efforts, e.g., responses to customer proposal technical challenges
  • Capable of leading new product development
  • Capable of conducting and leading technical interviews and evaluations of prospective hires
  • Serve as manager and mentor for developers across the organization
  • Advanced technical skills in multiple areas

Summary

We have setup this progressive career framework to provide equitable clarity and awareness for our team in terms of expectations for career growth. This effort marks the beginning of an evolving and iterative process. We will continue to update and hone the skill requirements and expectations to ensure our company and our people are best situated to succeed in our constantly evolving industry.

An incomplete list of skills senior engineers need, beyond coding | by Camille Fournier | Jun, 2021 | Medium