What you will do:
The mission of Johnson Controls is to provide solutions for a more comfortable, safe and sustainable world. As part of Johnson Controls Building Efficiency business, the Advanced Development Team applies this mission to buildings, providing solutions for a more comfortable, safe and sustainable building environment for owners and occupants.
This individual will be joining the team that performs advanced development solution implementations of Controls, Building Automation System and Smart Building products used by our customers to run their buildings and manage their energy costs.
Seeking a software engineer for enterprise software solutions with an emphasis on SOA, Data Access and database design and their interactions with other systems. This individual must be an analytical thinker with experience in applying design patterns and best practices, structured and disciplined development processes and engineering principles to develop robust, scalable and maintainable solutions that are user friendly and support business priorities. This individual must be self-motivated and able to perform well in a collaborative team environment.
How you will do it:
- Leading a team of developer and testers to deliver business features and software components according to an established delivery schedules;
- Performs investigation and analysis of project or product requirements and specifications to provide feedback on feasibility, risk and technical challenges;
- Define and derive non-functional requirements from business and functional requirement, such as performance, scalability, availability, redundancy, re-usability, etc.;
- Investigate and analyze new or existing technologies, third party software and development tools and provide input on choice of such technologies and tools that best fit the project or product in terms of their functionality, long term sustainability, level of industry acceptance, ease of adoption, support and cost of use and support;
- Provide estimates following both industry proven engineering and technical principles and practices and established company processes and procedures with deliverables per project or product development timelines;
- Helping the management define development milestones, deliverables, plan development and testing capacities and establish delivery timelines;
- Conduct designs at various stages of the product development cycle including, but not limited to, software design, detailed software design and database design using well known industry accepted collaborative tools, that can effectively implement higher level designs such as conceptual design, high level design and data model and translate business, functional and non-functional requirement to software specifications;
- Investigate, understand and analyze issues with existing and legacy systems and products to provide assessment of risk, technical challenges, quality and testing impact of proposed changes;
- Develop software using industry well known software languages and tools and following company established standard and guidelines, that implement the software designs, follow the industry proven software development best practices, and are testable and maintainable;
- Analyze and implement changes to existing and legacy products and systems, and provide assistance to the testing and documentation of these changes;
- Help team members identify and resolve technical challenges and road blocks, and provide technical feedback, review and consultation at the various stages of the development cycle, from design through testing;
- Work closely with quality assurance to provide assistance in defining test cases, creating, reviewing and executing test plans;
- Prepare or review product documentation, technical instructions or training materials;
- Define, author, communicate, enforce and continuously improve software design, development and quality processes, procedures and guidelines to ensure consistency in design, development and development practice and quality of the software;
- Help the team identify risks and communicate with the management the impact of the risks and provide options to risk mitigation;
- Research, identify or create training programs in a specific technology domain or tool;
- Mentor other engineer staff members in their overall career growth, skills development, and technical competency.
What we look for:
- Bachelor's Degree in Software Engineering, Computer Science, Electrical Engineering or a closely related discipline.
- Minimum of 12 years direct hands-on, industry software development experience and 3 or more years in database implementations.
- Expertise in software development experience with database driven and service oriented design and architecture
- Expertise in relational data modeling and relational database design
- Expertise in Object Oriented, interface driven design and implementation
- Expertise in large scale, multi-threaded and asynchronous design and implementation
- Expertise in Microsoft .NET Framework and related development languages and tools
- Expertise in Microsoft SQL Server database as a programming platform providing data access and related development languages and tools
- Expertise in server based web application design and development utilizing major server side development frameworks such as ASP.NET MVC and WebApi, and related development languages and tools
- Expertise in web based messaging protocols such as SOAP and JSON
- Expertise in modern unit testing practice and major vendor frameworks
- Well versed on web-based communication protocols such as HTTP, HTTPS, Web Socket, UDP etc.
- Well versed on security protocols and models for web-based applications and development framework
- Well versed on Windows operation system, its security model and its interactions with application runtime
- Experience with source control systems and change management tools (e.g. Git, IBM Rational Synergy, etc.)
- Proven leadership experience leading cross functional development teams through entire software development lifecycle
- Excellent oral and written communication skills
- Strong problem solving skills
- Knowledge of other operating systems such as Linux
- Knowledge of mobile operating systems such as iOS and Android
- Knowledge about the cloud based computing concept and existing vendor platforms and their capabilities and pros and cons.
- Experience with other database management systems such as Oracle and DB2
- Knowledge of non-relational data storage technologies such as Hadoop
- Experience with unmanaged development such as C or C++
- Experience with administering a DBMS