Software Development Engineer

Job Description

Summary:

The Software Development Engineer (SDE) is a member of an Agile-oriented cross-functional team of software engineers, business systems analysts, software testers, technical writers, and graphic designers who leverage software to solve real-world problems in the Container Handling industry. The SDE actively develops new software code and maintains existing code with a high degree of quality, leveraging strong software design principles, ingenuity and creativity, attention to detail, and analytical skills to devise unique and innovative software solutions. The SDE is responsible for coding across all tiers of an N-tier architecture, including client-tier, middle-tiers, and back-end (data/database), for integrating software systems with third parties, developing and maintaining robust test automation suites, building and leveraging configuration and deployment automation tools.

The SDE works with Business Systems Analysts to determine feasibility and efficacy of customer requirements and product specifications; with Quality Assurance personnel (manual and automated testers) to build and maintain automation test suites and to debug and resolve issues found during test initiatives; with Application Support personnel to understand, debug, and resolve issues found by customers in production or UAT environments; and with Product Engineering Management to deliver and track status on team, product, customer, and company initiatives.

Essential Responsibilities:

  • Code – Implement high-quality, fault-tolerant, clean, scalable, reusable, and maintainable GUIs, middleware business logic, company-generic APIs, tools and test automation suites in alignment with customer and product requirements and specifications.
  • Design – Work with Business Systems Analysts to turn customer- or product-driven functional requirements into well-designed, sustainable software solutions.
  • Debug – Resolve difficult issues, often times with little information, spanning across large, and distributed systems.
  • Triage – Efficiently reproduce reported software problems, analyzing logs, data, and system results to quickly resolve issues.
  • Document – Ensure development activities always lead towards the growth of our Client’s collective knowledge through strong code-level and knowledge base documentation, including capturing software design details, configuration and deployment notes.
  • Develop Expertise – Build a deep understanding of our Client’s products, customers, product configurations, and data. Thoroughly understand the state changes the products undergo as end users exercise the system across product boundaries.
  • Support – Be available to help with critical customer issues that are reported to the Application Support personnel. This includes reproducing and documenting production issues, analyzing logs, or clarifying intended functionality.
  • Empathize – Develop a strong empathy for our Client’s customers and their needs.
  • Report – Track status on development activities accurately and in a timely fashion. Provide intuitive and organized reports to the team through regular SDLC activities and updating of SDLC tools.
  • Learn – Display a passion for constant learning of new product features, technologies, and customer operational practices. Seek out information from peers about changes and document findings.
  • Collaborate – Work extensively with cross-functional development teams, other company personnel, and customers.

Qualifications:

  • Education and Experience –
    • B.S. in Computer Science, Computer Engineering, or Software Engineering with 5 years’ work experience.
    • M.S. in Computer Science, Computer Engineering, or Software Engineering preferred 3 years’ work experience.
  • Programming Languages – Knowledge of and experience working in at least two (2) (or deep expertise in at least one) of the following high-level languages: Java, C++, C# (.NET Framework), Scala. In web-development oriented roles, JavaScript. SDEs should be comfortable working across multiple programming languages given reasonable opportunity to adapt.
  • Middleware Frameworks – Working knowledge of service oriented architecture (SOA), web services (SOAP), RESTful services, Microservices, API development, Message Brokers and/or Message Stream Processing technologies including higher level language-specific frameworks, such as Spring, WCF, Lightbend, Messaging (JMS, NMS, MQTT), JBoss, or other leading frameworks.
  • Software Architecture – Working knowledge of modern software architecture principles, including application of caching, micro- and mini-services, modern data storage constructs and principles (caching, RDBMS, NoSQL), distributed development and modern software integration practices.
  • Client-Side Development – Working knowledge of client-side development frameworks, including at least one area of expertise in either web-oriented frameworks (HTML, JavaScript), thick client application development (Windows or Mac, for example), or native mobile application client development (iOS/Swift, Android).
  • Design Patterns – Demonstrable understanding of Object Oriented design patterns and real-world application of design patterns leveraging modern software frameworks. Deep understanding of software design pertaining to separation of responsibilities, MVC, encapsulation, pragmatic usage of inheritance versus compositional logic, and intelligent application of polymorphism are critical.
  • Automation Testing – Working knowledge of white-box language-specific Automation Test frameworks (such as JUnit or NUnit), and ability to code test automation successfully to exercise unit, integration, and regression testing scenarios are required.
  • Scripting – Working knowledge of platform-specific scripting platforms (Linux/Mac BASH/KSH or Windows Powershell) and associated coding skills, and working knowledge of at least one scripting language (Python, Perl, AWK, Groovy, Lua, Ruby, or other).
  • Data Storage & Access – Working knowledge of modern data storage and access technologies, including caching, application of NoSQL, Key/Value, and RDBMS datastores. Deep understanding of SQL, including understanding of views and stored procedures. Experience in PL/SQL and Oracle a plus.
  • Logging – Working knowledge of at least one key language-specific logging framework (log4j, logback, slf4j, NLog, log4net, Boost, or other) and demonstrable understanding of the purpose and value of logging.
  • Concurrency – Working knowledge of multi-threaded software development, including management of threads, thread pooling, deadlock avoidance, executors, and other fundamental concurrency concepts.
  • Build and Deployment – Working knowledge of at least one language-specific build framework (ability to set up, execute, and script the framework) as well as familiarity with at least one automated deployment framework (Ansible, Chef, Puppet).
  • IDEs, SCM, & Tools – Detailed knowledge of at least one Integrated Development Environment (IDE), including hotkeys and efficiency mechanisms of that IDE, along with a detailed understanding of the workings of an SCM tool (Perforce, Subversion, Git).
  • SDLC – Experience working in an Agile SDLC environment and working knowledge of at least one Agile SDLC tool to manage workload (i.e. VersionOne, JIRA, Rally).
  • Communication – Excellent written and verbal communication skills.
  • Culture – Must be able to work in a dynamic, varied, and fast paced environment. Flexibility, tolerance to change, adaptation, pragmatism, and commitment are a necessity.

Reference Number: 5255