Skills required for Software Performance Engineering.

3 May

Performance engineering is a vast field and it covers almost all the aspect of the system not limited to software or hardware.Performance engineering could be only branch of the software engineering where the skills required for doing the job is very long.Though as per current market trend demand for Performance engineering is yet to grow.We don’t find more of the performance engineer in the market.We may find a lot of Performance tester but surely performance testing is not a complete performance engineering.Performance testing is a small branch of the Performance engineering.So lets explore some of key skills required for the performance engineer, we will not discuss in for this post any of the soft skills required to do the job,

1.Software Programming Language

A.Its very good to have some basic working knowledge of some programming language like C,C++,java or .net etc.Person should be to read as how the code works and should be able to know what are pointers,how the resources allocated to code,how the resources are freed etc.Person should be familiar with basic packages that comes with most commonly used programming language like java.lang etc.Person should be aware of how objects are created/how they are destroyed etc.

B.Its good to have some scripting working knowledge.Scripting language preferable is JavaScript.Almost all the web sites that uses the Browsers existing today contains the some flavor of JavaScript.Though there are many JavaScript libraries available in the market today,but the overall basics of the language remains the same.

C.Good to have coding experiences in some programming language like C or any other language.Though most of the tools available in the market today has their own inbuilt languages build on the top of these languages,its still recommended to have good coding skills in traditional languages.One should be familiar with Memory allocation techniques/string Manipulation or Simple Moths operation techniques.

D.Its very important to know and understand as what is meant by various primitive data types Resources allocated are dependent on the primitive data types.
Refer Wikipedia “http://en.Wikipedia.org/wiki/Primitive_data_type” for more information on this.Performance Engineering is all about knowing/understanding/resolving these primitives date types.

E. Its very important to know what know about presentation layers,business layers,database layers work.These layers are the core layers on which the application works and as the performance engineer ,you need to know some basic things as how these layers work in coordination with each other.

F.Its very important to know as what makes client side activites and what makes server side activites.Most of the rich internet application does the data validation on the client side and there is difference between interactivity of widgets and fetching the data from the server.Ajax does both client side and server side activities.

2.OSI Layer.

Having information about the OSI Layer will help the engineer to access the complexity of the assignment given to him.There are around 160+ protocols available in the market today.Some of these protocols sits on the top of the TCP Stack.Data what we see in our computer screen passes this 7 layers.If you do not know about OSI Layer, then you are missing the very key part of performance engineering.Performance engineering is all about these Physical ,data link,network,session,transport,application and presentation layers.

3.Application Servers

Its very important to know what goes into the application servers and what application server does.Performance engineer should be familiar with the process as how codes works when deployed in the application servers.He should also be familiar with various setting that affects the performance of the application servers.In short he should be familiar with Administration/some basic of application server and Tuning aspect of the Application servers.

4. Operating System Fundamental Knowledge

Its very important that performance Engineer know the various setting in the OS that can affect the performance of the application when deployed on particular OS.Good example of this is size of the page file,size of RAM or number of processor,Limitation of NIC card etc.Importance of context switches,thread mechanism, process,memory allocation should be known.Performance engineer should know the difference between Multi core/quad core etc systems and how does it affect the performance of the application.Good to have knowledge as how the kernel works etc.

5. Database Servers.

Its very important for the performance engineer to know the importance of the Database systems in the project.The Performance engineer should know purpose of INSERT/DELETE/UPDATE/SET Statements in addition to various system level functions of the database systems.Its also important that Performance engineer know the importance of Stored procedure,trigger,functions and views.Basic knowledge of when/how/why of using these functions can help him troubleshoot billion dollar bugs easily.Its also important for the performance engineer to know about various types of deadlocks encountered in the database,transactional integrity etc.One should also familiar with the various ways of providing the data to the application.JDBC,ADO etc are some the bridges used for connecting the database with the application layers.

6.Network Concepts.

Performance engineer should also know the various basic concepts of network like usage of Ping,trace route,routing table,DNS functions,subnet mask etc.He should also be familiar with the way names are converted to IP addresses i.e DNS fundamentals.

7.Local/WIDE Area network

Performance engineer should know the basic purpose and concepts of the LAN and WAN Networks.

8.Server Farms

Most of the application available in the market consists of the server farms.So Performance engineer should know about how server farms works,what are the limitation of server farms,various methods of achieving load balancing across application like sticky session or via cookies.

9.Virtualization

Basic concepts of virtualization is required as the going forward demand for virtualization is going to increase.This concept will help Performance engineer to make use of the existing resources in most efficient way.Should be familiar with the concepts of Hardware/Network/Software Virtualization concepts,benefits and risks.

10.Cloud Computing

Basic concepts of cloud computing will help performance engineer reduce the cost of the project by exploring the various options that are throw open by cloud computing.Should have basic concepts of SAAS/PAAS/IAAS/HAAS etc.

11.Session Creation techniques.

Performance should know about how the session are created in the application and how does the session impact the performance of the application.Sessions created via View states are costly in terms of performances.There are around 3 types of methods used to create the unique sessions, URL Rewriting,hidden form fields and Cookies.At this point I do not remember but one more method has come up for creating session and this is now been widely used in J2EE applications.It uses the URL Rewriting mode in part.

12. Fundamentals of Web servers.

Basic working knowledge of the Web server is also one of the important skill Performance engineer needs to have.He should be able to know and understand as how various HTTP response codes that are generated by the web servers and importance of the those response codes on the performance of the application.Large number of HTTP 302 impacts the performance of the application.He should also be aware of the process as how web server works /how it serves the requests etc.Most of the web servers available today have process or thread kind of implementation , that is you can set up the web server to run as a process or thread.Performance engineer needs to aware of the impact that can happen when web server is set up as Process or threads.I have seen people neglect this areas most often in production and changing this setting in moment they come across an issue.

13.Caching Fundamental

Performance engineer should be aware of answers for “What is caching” “what are various ways caching can be implemented ” What is software cache” “What is hardware cache” etc.” What are benefits of Cache” etc.

14.Understanding of  Requirement Gathering Process.

The performance engineer should think and analyze business scenario from the end user’s perspectives.He should be able to validate the business requirement given to him and should  be able to build scenario based on that information.

These are some of the core skill sets I believe the performance engineer need to have and and list may be increase according to technology advancement.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: