View All Jobs

Principal Software Engineer

  • Apply
Job Description

Job Summary

Creates, modifies, and maintains software applications individually or as part of a team.  Provides technical leadership on a team, including training and mentoring of other team members.  Provides technology and architecture direction for the team, department, and organization.

Essential Duties & Responsibilities

·       Develops software applications and supporting infrastructure using established coding standards and methodologies

·       Sets example for software quality through multiple levels of automated tests, including but not limited to unit, API, End to End, and load.

·       Self-starter and self-organized - able to work without supervision

·       Develops tooling, test harnesses and innovative solutions to understand and monitor the quality of the product 

·       Develops infrastructure as code to reliably deploy applications on demand or through automation

·       Understands cloud managed services and builds scalable and secure applications using them

·       Creates proof of concepts for new ideas that answer key questions of feasibility, desirability, and viability  

·       Work with other technical leaders to establish coding standards, development best practices and technology direction

·       Performs thorough code reviews that promote better understanding throughout the team

·       Work with architects, designers, business analysts and others to design and implement high quality software solutions

·       Builds intuitive user interfaces with the end user persona in mind using front end frameworks and styling

·       Assist product owners in backlog grooming, story breakdown and story estimation

·       Collaborate and communicate effectively with team members and other stakeholders throughout the organization

·       Document software changes for use by other engineers, quality assurance and documentation specialists

·       Master the technologies, languages, and practices used by the team and project assigned

·       Train others in the technologies, languages, and practices used by the team

·       Trouble shoot, instrument and debug existing software resolving root causes of defective behavior

·       Other duties as assigned

Skills & Requirements



·       BA/BS in Computer Science, a related field or equivalent work experience

Minimum Qualifications

·       Mastered advanced programming concepts, including object oriented programming

·       Mastered technologies and tools utilized by team and project assigned

·       Able to train others on general programming concepts and specific technologies

·       Minimum 8 years’ experience developing software applications




·       Must be expert in advanced programming skills and database technology

·       Must be expert in at least one technology and/or language and proficient in multiple technologies and languages:

·       (Specific languages needed will vary based on development department or project)

·       .Net Core, C#, Java, SQL, JavaScript, Typescript, Python

·       Additional desired skills: 

o    Single-Page Applications, Angular (v9), Ivy, RXJS, NGRX, HTML5, CSS/SASS, Web Components, Atomic Design

o    Test First approach, Test Driven Development (TDD), Automated testing (Protractor, Jasmine), Newman Postman,

o    Microservices, Terraform, Jenkins, Jupyter Notebook, Docker, NPM, Yarn, Nuget, NodeJS, Git/Gerrit, LaunchDarkly

o    Amazon Web Services (AWS), Lambda, S3, Cognito, Step Functions, SQS, IAM, Cloudwatch, Elasticache

o    Database Design, Optimization, Replication, Partitioning/Sharding, NoSQL, PostgreSQL, MongoDB, DynamoDB, Elastic Search, PySpark, Kafka

o    Agile, Scrum, Kanban, DevSecOps 

·       Strong problem-solving skills

·       Outstanding communications and interpersonal skills

·       Strong organizational skills and ability to multi-task

·       Ability to track software issues to successful resolution

·       Ability to work in a collaborative fast paced environment

·       Ability to learn new development language quickly and apply that knowledge effectively