You've decided that the time has come to change your job. What do you need to know to land the job that pays well and allows you to further cultivate your career?
The national IT job market has been on the rise the past two years. The hiring statistics over these years have revealed an interesting trend: Companies prefer to hire strong application developers onshore and junior/entry-level developers offshore. Furthermore, hiring managers are looking for "all-around" knowledgeable employees—self-starters, independent, technically proficient, business savvy, and so on.
What does it mean for us, the local developers? It means that the current interviewing process is more vigorous than ever. Technical interviews are only a part of the whole interviewing process. Do not get me wrong; the technical interview is still an essential part, but it is not a sole factor in the ultimate decision making. The contemporary onshore developer is a programmer plus business analyst, designer, architect, DBA, and often, project coordinator. If you are just a programmer, you must re-evaluate your current situation and start evolving with the evolving job market because your job might be at risk.
If you are looking for a new position in IT, here is what hiring managers are looking for:
1. People Skills
During the interviewing process, you must show at least three of the seven traits listed below.
- Self-Discipline: Ability to choose your task, create a plan of attack, and execute the plan.
- Motivational Skills: Ability to stimulate others to action toward a desired goal.
- Organizational Skills: Ability to effectively control resources in the time-constrained environment.
- Communication Skills: Ability to effectively communicate with others by using presentation, writing, and listening skills.
- Strategic Skills: Ability to apply methodology for systematically spotting and exploiting opportunities to improve one's position.
- Conflict Resolution: Ability to control how conflicts are handled and resolved in a group setting.
- Assertiveness: Ability to distinguish yourself as a leader and a person of authority.
If you feel you do not possess any of the traits listed above, you should come up with a plan of action to acquire them. There are a number of great books you can read that will help you acquire these skills. Please consider the following books:
- Cairo, Jim. 2004. Motivation and Goal-Setting - How to Set and Achieve Goals and Inspire Others. New York: Career Press.
- Chandler, Steve and Richardson, Scott. 2005. 100 Ways to Motivate Others. New Jersey: The Career Press.
- Steven W. Flannes and Ginger Levin. 2005. Essential People Skills for Project Managers. New York: Management Concepts.
- Gregg Lee Carter. 1994. How to Manage Conflict in the Organization. New York: AMACOM.
- Stewart Levine. 2002. The Book of Agreement: 10 Essential Elements for Getting the Results You Want. New York: Berrett-Koehler Publishers.
Furthermore, during your interview, you should be ready to discuss your previous professional experience where you had shown your proficiency in the skills above. You also should be prepared to explain what each skill means to you personally.
2. The Basics
When I conduct interviews, I always ask several elementary questions. Why do I do that? I want to make sure that candidates have done their "due-diligence." I want to know if they came prepared. For example, I ask senior Java Developers relatively easy questions such as the following:
- What are reference type variables and primitive type variables?
- How are constants implemented in Java?
- What is an expression?
- Name ten operators in Java.
You should always be ready to answer these questions. Remember, your interviewer cannot assume that you are senior only because you say so; you have to be ready to prove it.
3. Advanced Topics
If you are a senior application developer, you must be ready to discuss advanced topics of the language. The following list highlights advanced topics for Java developers (skip to the next section if you are not a Java developer).
- OO Design Patterns: Application developers must know at least five "design patterns." Every senior developer has come across many design patterns in his/her career. However, he/she might not know how to effectively explain how each pattern works and what the benefits are of one over the other. I recommend you do some reading before you start interviewing. This is a good start: http://en.wikipedia.org/wiki/Design_Patterns.
- UML: Unified Model Language has long ago become a required skill for business analysts, software developers, architects, UI designers, database professionals, testers, and project managers. UML is used as a standard language for specifying, visualizing, constructing, and documenting the artifacts of software systems. UML is also used for business modeling and other non-software systems. There are at least three UML diagrams that a senior Java developer must be familiar with:
Frameworks: Most application development jobs these days require knowledge of multiple frameworks. A Java developer, for example, must possess knowledge of at least several Data Persistence frameworks (JDBC and SQL, Entity Beans, Java Data Objects, Spring, and Third Party persistence framework such as Top Link or CocoBase, Hibernate), Business Logic frameworks (such as EJBs, BC2J), Caching frameworks, Testing frameworks, and Model-View-Controller frameworks (Struts).
XML/XLS: You need to understand the advantages and disadvantages of using XML/XSL to store and pass data. Also, you need to have knowledge of different parsers' implementations.
State Management: State management is a very important consideration when designing new applications. For example, you should understand the difference between stateless applications and applications that maintain state.
Distributed/Non-distributed architecture: You need to have advance understanding of architectural tiers. A perfect candidate must have a pretty good understanding of distributed and non-distributed architectures as well as the strengths and weaknesses of each.
- Use-Case Diagram: Shows interaction between application users and application functions.
- Sequence Diagram: Depicts interactions between objects in the sequential order that those interactions occur.
- Class Diagram: Shows static representation of classes and interfaces along with relationships and collaborations between them.
4. Business Knowledge
There is no doubt that knowledge of the business is a great supplement to your technical skills. No employer would pass up an opportunity to interview a candidate who has previous experienced working in the same business area. Unfortunately for employers (and fortunately for you), it is very hard to find a technically proficient person with good communication skills and with specific business knowledge of the job. Furthermore, employers look for candidates who have general experience in the underlining industry (brokerage, banking, manufacturing, publishing, and so on).
What can you do if you are interviewing for a position that belongs to an industry that you have no previous experience with? One way you can distinguish yourself from the rest of the candidates is by depicting your interest and knowledge of the organization's line of work. Try finding out about the specifics of application development for this particular industry and, more specifically, for the department at which you are interviewing. For example, if you are interviewing at a publishing company, show the interviewer that you understand the challenges of the industry and the rewards of working there. If, for example, the department you are interviewing at is responsible for maintaining client and product data and allowing users to view and modify this data, try to explain that you understand the challenges related to creating and maintaining such applications.
5. Relational Database Knowledge
Name one application that is not connected to a relational database. Let me think ... I can't come up with one. Almost all modern applications work with a relational database. That is why it is essential for a candidate to have advanced database knowledge. What are some of the things you must know? Basics Topics include SQL, Entity Relationships, Data Type, and Table Definition Language. Advanced topics include Optimization, Stored Procedures, PL SQL, Triggers, Tuning, and DBRM Commands. I am not advocating that you should become as proficient as a database administrator, but you should be able to freely discuss advanced topics. If you failed to acquire advanced databases knowledge during your previous work engagements, you can acquire it by reading technical literature on the subject.
6. Area of Expertise
What is your area of expertise? Mine is web-based application development using J2EE. You have to choose your area of expertise in application development and cultivate it—become an expert. I am skeptical when a candidate claims that he is an expert in web-based, asynchronous, and fat-client applications. If a job requires a web-based application developer, I would prefer to find one that has mostly web-based application development experience. If you are a subject matter expert in a given area, you have a far greater chance of getting the job you want.
Forgive me for stating the obvious: Your résumé is the first impression of you. So, beside the fact that your résumé must be neat and informative, it must also have two characteristics:
- Executive Summary. An executive summary must explain, in three to four sentences, the position you are seeking and the most valuable skills you possess for the position.
- Resume Length. I have seen a number of resumes that are more than two pages long; I tend to reject them just because of their length. I attribute long resumes to either the candidate's inability to concisely select the most important aspects of his/her work experience or his/her inadequate word processing skills (double spacing, wrong font and size, or wide margin length).
8. Full Application Development Cycle
Almost every job posting on Monster.com (a popular job posting site) contains this line: "Candidate must have experience with all software development life cycle phases." It means that hiring managers place premium value on full development cycle experience. Let me review the system development phases:
- Project planning, feasibility study: Define the scope and create the project charter.
- Systems analysis, requirements definition: Define project activities, work-breakdown structure, and technical aspects of the project.
- Systems design: Describes desired features and operations in detail, including screen layouts, business rules, process diagrams, pseudo code, and other documentation.
- Implementation: The real code is written during this phase.
- Integration and testing: Brings all the pieces together into a special testing environment. The production is QA tested.
- Acceptance, installation, deployment: The final stage of development, where the completed product is ready for production use.
- Maintenance: What happens during the rest of the software's life: changes, correction, additions, moving to a different computing platform, and more.
What do you take away from actively participating in a full development life cycle? You take away the working knowledge of all the processes of a project—stakeholder relationships, implementation and testing team dynamics, integrated change control processes, business requirements, time/cost/budget constraints, risks, and resource/procurement/communication management. Most of all, you start understanding the success factors of a project.
It took three years of my professional career as an application developer before I could claim that I had completed one application development life-cycle. The odds of successfully completing a project (on time, under budget, according to scope) are not great; in the year 2000, only 28% of all projects were considered a success.
9. Ask Questions
You should ask at least three questions during/at the end of your interview. When you ask questions, you let your interviewer know that you are interested in the position. It also lets you make a more educated decision about whether this job is right for you. Avoid vague questions in favor of specific ones:
- What is the group size and structure?
- What applications are you supporting/developing?
- Are you budgeted for next year?
- Are there opportunities for professional growth?
- What will my regular day look like?
10. Offshore and Onshore
"If you can't beat them, join them." Offshoring and outsourcing plans are in motion in every organization and in every aspect of application development. If the company you are working for is not outsourcing some parts of application development today, it will most definitely do so tomorrow. But there is good news: When it comes to outsourcing, certain equilibrium between onsite and offshore resources exists; an organization can not fully outsource all of its work. In application development, there are processes that are unwise and/or impossible to outsource. Outsourcing is about cost cutting. But, what happens when you cut cost? The project scope and timeline suffer. You have to understand (and sometimes argue) what it is that separates you from an offshore resource. But also, you absolutely must understand (and sometimes argue) the benefits of offshored/outsourced application development.
This article highlighted ten things to know for a successful application development interview. Such interviewing tips as self confidence, proper dress code, eye contact, and being on time are outside of the scope of this publication, but they must not be overlooked. It is the overall impression that will land you a job.
About the Author
Aleksey Shevchenko has been working with object-oriented languages for over seven years. For the past four years, he has served as a technical lead and a project manager. Aleksey has been implementing Enterprise IT solutions for Wall Street and the manufacturing and publishing industries.