Description You are an Agile Team Member Job #1 is to be part of a self-organizing team – a team that solves complex challenges and builds working software. Being a good team member means you contribute to its success by:
Collaborating with your PO to groom backlog and break down stories into small functional slices
Maintaining an attitude of commitment through outward display of willingness.
Impressing responsibility on others by displaying ownership in tasks.
Practicing positive interactions – lean on encouragement in place of judgment.
Being open to new ideas and encouraging innovative practices amongst peers
Actively working on broadening or adding a skill
Asking for assistance when problems become challenging
Balancing best practice decisions with delivering high business value (right vs right now
Delivers stories/tasks that are committed” within a timebox
You are also the Principal Engineer The Principal Engineer is considered the premier developer on the team. It is therefore your responsibility to engineer large-scale solutions that enable the business while supporting the strategic architectural vision of quality, scalability, performance and function. Principal Accountability | Technical Sprint Planning
Owns technical design for a sprint including high-level flow diagrams, ERD, service contracts
Ensures the whole team understands the technical plan, reasons for it, and adherence to it.
Considers testability in design with focus on code determinism, abstraction, and modularity
Commands a broad awareness of dependent projects and considers them in design
Helps team members define clear, small, and testable tasks
Frequently thinks out loud about design with the team and a higher level design committee
Works with Enterprise Architects to ensure a team’s direction is in line with the enterprise vision
Defines technical acceptance criteria (where necessary for each story
Owns/manages the technical backlog and works with PO to schedule those efforts Principal Accountability | Software Development
Communicates important details of the solution design to everyone on the team
Encourages collective code ownership through CI and promotes frequent code check-ins (daily
Practices and teaches unit test development to achieve at least 80% code coverage
Addresses technical debt constantly - escalating when it becomes risky to time or quality
Develops with an awareness for team needs and acts as resource/mentor for junior members
Oversees the merge up/down process
Carries out root cause analysis on defects to ensure fixes are happening in the right way
Keeps an up-to-date local development environment to reduce risk Principal Accountability | Software Inspection
Ensures daily code check-ins (through spot checks are happening by each member of the team
Employs static code analysis to identify code readability, anti-patterns, vulnerabilities & defects
Monitors unit level test results after code is committed and holds team to account on quality
Considers cyclomatic complexity of code and drives project refactors where necessary
Enforces transparency of the inspection process via Continuous Integration and reporting
Enforces the team’s Definition of Done
Reviews QA test plans for technical coverage
Conducts cross team and inter-team code reviews Principal Accountability | Release Planning
Drives and adheres to a well-defined code promotion process
Supports and is accountable for timely releases and adherence to release activities
Resolves defects in a timely and effective manner
Identifies tactical risks and raises/resolves issues effectively
Ensures that operational teams are effective during deployment (dry-run or production
Follows up with infrastructure to create service accounts, permissions, access rights, etc
Creates deployment documentation which outlines WHERE & WHAT? Principal Accountability | Community
Collaborates outside of the product team to encourage a development community
Establishes and carries out formal and informal educational sessions (lunch & learn, etc
Liaises between the team and management to assure needed skills are represented on the team
Encourages self-study by promoting best practices and bringing in external perspective
Requirements
5+ years of experience using C#/.NET core
Experience creating Blazor components and using components libraries eg: Dev Express
Tailwind CSS / MUI components - desired
Entity Framework or any other ORM experience
Experience building integrations with 3rd party services is a must
Experience building solutions following the MVVM architecture pattern
Experience with Continuous Integration and Delivery (CI/CD, preferably with Azure DevOps
Excellent interpersonal and teamwork skills to facilitate collaborative problem solving amongst team members
Professional software engineering experience applying best practice software engineering including separation of concerns, high cohesion, low coupling, modularization, encapsulation and information hiding, interfaces, and dependency injection
Professional software engineering experience applying object-oriented programming (OOP principles such as SOLID, DDD and TDD
Experience with MS SQL
Proven experience delivering solutions for complex distributed systems in Azure
Docker and containerization
Nice To Have: Understanding of Visual Basic for applications code
Experience with small teams that move fast - all members are expected to achieve maximum results with minimal direction
Proven experience meeting software deliverable deadlines
Tools and Tech Stack
C#, .NET Core 8+, Azure DevOps, Dev Express or other grid controls, Active Directory authentication, Nuget packages. Blazor (highly desirable
5 years