As a Senior Software Engineer, you are more than just a coder. In addition to your software engineering responsibilities, you are also expected to guide a small to medium-sized team to deliver in a product area by helping identify dependencies and risks for the group, being a planning consultant to the project managers, recommending improvements to our engineering practices and helping other engineers become more proficient in solving specific problems.
A Typical Day in Your World:
- Meet with your team and tell them the awesome things you did yesterday and what unspeakably incredible things you will complete by this time tomorrow.
- Create new features using our development technologies that will delight and inspire marketers, IT professionals, and other knowledge workers worldwide.
- Create engineering designs that solve complex problems.
- Fix occasional bugs in our SaaS platform - when your day was only somewhat less than awesome and unspeakably incredible.
- Debate the optimal design and ideal user experience for a variety of unrealized features identified by our Product friends. Or propose some ideas of your own!
- Help QA and other software engineers find the best way to test your work to ensure that, not only does it work as advertised, but will continue to work and perform at mass scale when thousands upon thousands of people are using it at the same time.
- Lead discussions with your team about what emerging tools, technologies and processes are coming that may impact how we improve our products and our SaaS platform in the future.
- Provide your well-considered opinions to the creation and modification of our technology roadmaps.
- Have a fabulous lunch with people you respect and admire. Enjoy a free soda. Or 10 because, hey, they’re free!
- At the end of a release, as the rest of the company is validating that, in fact, you and your team’s work is indeed awesome and unspeakably incredible, take some time to do some research, train in a new technology or even play a game – em, we mean participate in a team-building exercise – with your team.
To Land This Job You’ll Need:
- Bachelor’s degree in Computer Science, Computer Engineering (or equivalent education) or equivalent work experience.
- Demonstrate sound knowledge of Database basics such as joins, constraints, stored procedures, triggers and schema design.
- Be able to prove that you can take a problem and represent it in an Object-Oriented Design while calling out assumptions, discussing design alternatives and considering non-functional aspects of the system (e.g. Performance, Maintainability, etc.).
- Experience optimizing software to run fast, be reliable and fail safely – O(n) analysis should not be new to you.
- Be able to design features that require coordination of multiple threads using various communication/coordination mechanisms.
- Have a story to tell about how you have utilized threads, mutexes, semaphores, critical sections or debugged complex issues in a distributed environment.
Now, Blow Our Minds:
- Have a unique experience in real-time or massively distributed systems, public cloud or PaaS systems like AWS, GCP or Azure, databases or big data.
- Demonstrate extraordinary communication skills to the point where we feel that, not only can you talk to engineers, but to the CEO and everyone in between and do credit to our organization.
- Convince us that you have successfully led measurable and, preferably, dramatic improvements in the engineering practices of a software team and that you have the passion and drive to do it again.
- Show that you are a person who, upon seeing a problem, moves quickly to solve it instead of waiting for permission and specific instructions from others.