Description:
AEM (Advanced Environmental Monitoring) is the global leader in innovative mission critical weather, wildfire and water monitoring and intelligence solutions. We aim to be the world’s essential source for environmental insights – enabling decisive action and positive outcomes for our customers and their constituents. Our family of innovators offers world-class hydrometeorological technologies and services, including sensors, dataloggers, telemetry, and advanced analytics and software. Our technology and services empower the communities and organizations to survive – and thrive – in the face of escalating environmental risks.
Our engineering teams maintain the creative spirit of a startup, while enjoying the benefits of a somewhat larger organization. We are comprised of fast paced, cross-functional, Agile scrum teams that love to collaborate, encourage curiosity, and continuously ship improvements that create better solutions for our customers around the world. We are looking for people who enjoy the details but that also think big and want to support the future of environmental analysis. This is a rare opportunity to be a core member of a supportive team delivering fascinating mission critical solutions that make a difference in the world. If you are looking for a new challenge and can meet most of the responsibilities and qualifications itemized below, apply today!
Principal Software Engineer is the highest level for a non-supervisory software engineer in AEM. A Principal Software Engineer architects and implements high quality solutions and high-quality code at a very high level of productivity. Understands and applies architectural principles such as durability, scalability, security, and maintainability across multiple frameworks. Maintains deep, broad, and heavily practiced technical skills, often coupled with deep domain knowledge. This combination enables regular creativity and innovation in a timely manner. Our Principal Engineers are highly collaborative and effective communicators with the ability and willingness to mentor other software engineers. They help set the technical direction for our solutions.
Job Responsibilities:
-
Architecture
- Drive and contribute to software architecture, technology selection, and technical roadmap.
- Apply architectural principles such as loose coupling, durability, scalability, security, concurrency, maintainability, reusability, etc.
- Select appropriate data persistence, IPC, and presentation layer technologies.
- Perform or facilitate software architecture reviews.
- Designing, Coding, Testing
- Participate in hands-on full stack software development by designing, implementing, and testing code utilizing languages, development tools, testing tools, and operating systems deemed appropriate by the given requirements.
- Development of software solutions that result in few bugs, and that meet functional and non-functional requirements.
- Contribute to code quality and related standards and tools and the performance of code reviews that utilize those standards and tools.
- In consultation with the Director of Quality Engineering, contribute to test automation tooling and adoption of development test automation.
- Contribute to secure software development processes and standards and tools and the performance of security scans that utilize those processes and tools.
- Dev Ops
- Contribute to the design and implementation of automated build, deployment, and orchestration pipelines.
- Collaboration
- Technical mentoring of other software engineers.
- In keeping with the wider organizational structure and processes, maintain effective working relationship with adjacent technical leaders and organizations to facilitate architectural evaluations and decisions.
- Periodic interaction with customers to facilitate troubleshooting and software integration points.
- Participate in and facilitate urgent troubleshooting activities to address urgent bugs or operational issues.
- Software Development Process
- Contribute to software development process refinements.
- Adherence to processes within an organization that follows Agile Scrum development.
- Facilitate innovation and increasing productivity through continuous learning.
This job description may not be inclusive of all assigned duties, responsibilities, or aspects of the job described, and may be amended at any time at the sole discretion of the Employer.
Requirements:
- 15+ years of hands-on software development experience in the following technical stack:
Programming Languages: C# and .Net and JavaScript
Operating Systems: Linux and Windows
IPC Protocols: TCP/IP, UDP, Kafka, HTTP(s), WebSockets
Persistence: SQL Databases, NoSQL also Preferred
IDEs: Visual Studio or Visual Studio Code
Test Tools: NUnit or Postman or JMeter or TestComplete/Selenium
Source Code Mgmt: Git/GitHub
Build, Packaging, Orchestration: ADO, Docker, Kubernetes, etc.
- Significant exposure to more than 1 AWS service (or Azure equivalent) such as:
S3
EC2/ ECS
Lambda
SES/SQS
- Understanding of secure software development concepts and practices such as:
OWASP Top 10
DAST
SAST
- Expert Coder, often in 2 or more languages. Writes code that is a model of clarity and quality. Understands and appropriately applies advanced coding techniques.
- Worthy of the label "Full Stack Developer" with the proven ability to design and implement server-side business and persistence components and client-side presentation layer components.
- Significant experience with Web presentation layer technologies such as JavaScript, Angular, CSS, HTML, multiple JavaScript libraries, etc.
- Deep, broad, and heavily practiced software engineering technical skills.
- Understands and can apply architectural principles such as real-time streaming, durability, scalability, security, concurrency, maintainability.
- Ability to define quality software architectures.
- Ability to evaluate data persistence needs and select appropriate data persistence technology.
- Experience applying relational and non-relational data bases.
- Highly collaborative and effective communicator with the ability and willingness to mentor other software engineers.
- Self-motivation, passion, commitment, continuous learner, and driven to achieve results and continuously improve.
- Solid oral and written communication. Solid interpersonal skills. Ability to build credibility and trust.
- 5+ years of software architecture experience w/ significant exposure to distributed systems.
- Bachelor’s degree or an equivalent combination of education, experience and/or training.
- 3+ years of experience developing within an Agile Scrum team environment.
- Experience in the weather, meteorological, and environmental domain is a large plus.
Canadian Compensation Range: $95,000-$125,000 CAD/year
AEM is an Equal Opportunity Employer.