How to become an Expert in your Career
In Previous Post we can understand what are the various Paths in Database Career.
Recently we conducted an interview for a SQL Developer with 6-8 years of experience. We could hardly shortlisted 2 members out of 18. These 2 are experts at least in their stage. We can’t say that remaining 16 people are not good, they can manage and deliver the task but still we need experts why?
Experienced people can manage their work and deliver the project on-time.
Experts tackle problems that increase their expertise, approach a task in a way that maximizes their opportunities for growth which can take business to the next level.
We had a discussion with various engineers, architects from different organizations and we have prepared a list of points which can help an experienced / fresher to become an expert.
Key points that make you an Expert in your chosen Path:
-
Know the Internals
-
Expertise Your Profile
-
Performance Tuning
-
Accurate Estimations
-
Never React Always Respond
-
Keep your own best practices and Troubleshooting guide
-
Training, Learning and Knowledge Sharing
Know the Internals
We do work on various items in a typical working day. While working on an activity apply the formula WHW (What-How-Why). Most of the people knows “What” and “How” but ignore “Why” except Experts. Have a look at below examples.
Let’s say you are a fresher and joined in an organization:
Database Administrator:
Your lead asked you to create a database in SQL Server and keep .mdf on X drive and .ldf on Y drive.
WHAT is mdf and ldf? You co-worker can help you or you can google it.
HOW to do this? Again google can help you on this
Your work is actually done. If you wanted to become an expert ask the next question “WHY”?
“Expert Zone”
WHY should we keep mdf and ldf in different drives?
Ans: To improve the accessibility
HOW it improves accessibility?
Ans: Each drive is having a separate set of I/O buses. Since both files are in different drives, more buses will be available to complete the task.
What is the problem if both are in same drive?
Ans: Task has to be completed using the limited I/O buses which delays the execution time.
Database Developer:
Your lead asked to create a procedure. Use a temp table to hold some data and process it etc.
WHAT is a Temp Table?
How to create a Temp Table?
“Expert Zone”
WHY Temp Table? Why not a Table Variable?
WHAT actually happens in database when we use Temp Table?
WHAT is the most optimized way of holding temporary data?
Note: Ask “WHY” if you want to become an expert in your path and know the internals. Since timelines are really matters in IT we can’t always spend some extra time. But remember you just have to know the answer for “WHY”.
Expertise Your Profile
Your profile is the first piece of information that shows what you are. Let’s say Person A and B is having 8 years of experience. If “A” worked on Oracle for 8 years and B worked on SQL Server for 3 Years, on Oracle for 5 Years. Can you guess who are having more chances to get good career opportunities and growth, it’s absolutely person B. Do not stick on a technology and never miss a chance to work on other (Similar) technology.
Database Administration:
A SQL Server DBA Expert should have experience in:
- Database Server Installation and Upgrades
- Database Capacity Planning
- Day to Day Database Monitoring Maintenance
- Backup and Recovery
- High-Availability Solutions
- Disaster Recovery Solutions
- Performance Tuning (Server and Database Level)
- Troubleshooting and providing instant solutions
- Planning, Testing, Implementation and Maintenance of a SQL Server Instance
- Database Maintenance Automations
- ITIL Standards
- Securing Database servers
- Good Contacts with Technology Masters
- Recommended Certifications
- T-SQL
- Powershell Script
- Native Plus Third party Monitoring Tools usage
- Using Version Tools – SVN, TFS
- DBA in other RDBMS (Oracle, My SQL, DB2)
- Able to Work in a Team or Individual
- MSBI (Deploying SSIS packages and SSRS reports)
- Should learn and understand Cloud concepts – AWS / Azure
A DBA should be expertise in one or two areas and should have experience in remaining. Make sure you are good in at least one leading cloud platform either with AWS or Azure.
Database Design and Development:
An Expert SQL Server Database Engineer should have experience in below:
- Requirement Gathering Analysis
- Designing a database
- Good Understand in Basics – Joins, Procedures, Functions, Triggers, Views, Synonyms etc
- Database Level Performance Tuning
- Execution Plan analysis
- Index Tuning
- T-SQL / PL/SQL
- Writing Secure and Optimized database code
- Integrity /Domain / Functional Testing for Database Code
- Using Version Tools – SVN, TFS
- Preventing / Handling SQL Injections
- Good Contacts with Technology Masters
- Recommended Certifications
- Knowledge on Front End Technology (.Net, Java etc)
- Expertise in a Domain (Banking, Financial, Insurance, Healthcare, Media, Law etc)
- At least work in two RDBMS (Oracle PL/SQL, SQL Server T-SQL)
- Should be experienced in Code Reviews
- Able to Work in a Team or Individual
- Familiar with SDLC / Agile
- Learn at least one No-SQL database also never miss an opportunity to work with the latest technology.
- Focus on at least one ETL tool, if you are a T-SQL developer it’s so easy to learn MSBI stack.
- Should aware basics on cloud computing, try Azure / AWS
Performance Tuning
Performance tuning is the key aspect and which is actually tell about you whether you are an expert or just experienced. It’s all about End-User satisfaction who use applications for which you design and maintain database, they won’t bother about the technology rather they just see how application is performing. It applies to all designing, development, maintenance, administration and warehousing. Whenever you design or create in a database you should think of below aspects:
Database Administrator:
Your manager asked you to prepare a new SQL Instance and configure it. What are all the things you should consider to build an optimized and secure instance?
What is the business all about?
Ex: OLTP or OLAP
What is priority – Concurrency or Huge Data Processing?
Ex: DB to support online transactions or it for business reports
What is the Minimum and Maximum Memory required?
Ex: You should predict/determine the future usage based on the existing environment and the requirement
How many processors required?
Ex: You should predict/determine the future usage based on the existing environment and the requirement
What is the data growth expected?
Ex: Based on this we can allocate data and log files to drives also decide on Auto Grow option.
Decide on TempDB usage
Ex: It depends on lot many things. You should be able to predict version store, internal and external objects.
What is the Index fill factor percentage to choose?
Ex: It depends on data modifications. For example when expecting more data modifications it can be 80 to 90 percent, if it is static / archive data it can be 100%.
What is the disk system required?
Ex: You should have command on RAID levels
What is the backup policy required?
Ex: It depends on Service Level Agreement (SLA) between organization and vendor.
What are the disaster recovery / High – Availability options required, if not now in future?
Ex: It again depends on the business and the down time accepted.
Can we have a shared instance on the same machine?
Ex: Decide can business allow us to have more than one instance on a same machine or not
Is that instance is under organization security policy?
Ex: Get clarity if any special permission required as per the business requirement
What exactly basic maintenance required for the new instance?
Ex: Apart from basic maintenance any data feed jobs required etc
What is the cost estimation?
Ex: It’s not a DBA role to decide on cost and license, but still a DBA should know about this as he / she has to suggest the team for a better available choice. Work and give the accurate Time estimation.
A DBA should know answers for all these questions to build an optimized and secure instance.
SQL Developer / Designer:
Now we’ll see what a SQL Developer should know before starting a task. Let’s assume that your manager asked you to create a table and create a stored procedure to insert data. You should be able to answer below questions:
Check if it can be normalized
Ex: Figure out the Key column and make sure all columns are fully dependent on key column. There are some areas where we need not bother about normalization. For example when a table is too small but the table is expected to participate in joins with the tables which are huge. In that case we’ll get the performance gain if we do not normalize this small table. This is just an example we have to predict the table usage in your environment and design it accordingly.
Check any partitions required?
Ex: If that table is going to hold millions of rows and already other tables portioned check with your manager if it needs to be portioned.
Follow the correct naming conventions:
Ex: Always use the schema name with object name. If we do not use a schema name, db engine first search the default schema for this object. Do not use reserved key words.
Use the correct data type for columns
Ex: Always choose the right data type for a column. We have to consider below while assigning a datatype
Data Range – Minimum and Maximum expected values
Data Length – Fixed or Variable
Null value acceptance – Depends on business requirement
Domain value acceptance – Check your requirement document
Determine the null acceptability
Ex: Correctly define the NULL acceptability in a Table. We should predict the future when we are designing NULLABLE columns. Let’s say we have designed a column with CHAR(10) NULL. Can you imagine if the table is having 25 Million Rows and in this column filled for 10 K rows only? Now let’s see how the space is occupied for this column. Total space for this column (25 Million – 10 K ) X 10 Bytes. In that situation we can consider creating other table with Primary Key from this table and this column. Now we can save the space. This is just an example to say that we need to predict / estimate the future while creating any single object in database.
Decide on table usage
Ex: Determine the security level; see if we need to create a view with limited columns
Choose the correct key column
Ex: Follow best practices in choosing key column, usually it should be a numeric.
Determine the index possibilities
Ex: Choose a correct index when it needs to be created.
Choose the right constraints
Ex: Always choose the correct constraint. On employee table there is constraint on Age (>22). This can be implemented using CHECK Constraint and TRIGGER as well. But CHECK is the right constraint here.
Are you following any template for writing procedures?
Ex: Define a master template based on your business requirement and follow the template across the database.
Any specific SET options we need to use?
Ex: Based on your environment enable all SET options. Ex: SET NOCOUNT ON
Any chances that your procedure execution will result into a Deadlock?
Ex: If yes, take the steps to prevent deadlocks.
How you are going to handle errors?
Ex: Are you using any centralized table to capture error information? If not start a framework that suits your environment.
How we are handling datasets inside procedure?
Ex: Choose the best available object based on the requirement and the size of data. Temp Table, Table Variable, CTE, Derived Table etc.
What is the acceptable maximum response time for stored procedure?
Ex: Have you defined maximum response time in your environment, if not determine it and tune all objects which are not under the defined time.
What is the default ISOLATION level as per the business requirement?
Ex: Decide what ISOLATION level your business required.
Are you closing/de-allocating all blocks, temp objects and transaction in procedure?
Ex: It’s always a best practice that deleting / closing temp objects and loops.
These are the various questions for which a Database Developer should know the answers before starting the task.
It is not easy to consider all these aspects when every time you are assigned to a task. An Enterprise practice is designing a template and follow the temple in getting requirements and implementation.
Accurate Estimations
The most common question that you here from your reporting manager / Client is “How long will you take to get it done?”. Here comes the time estimates, this is also a key area which tells about you whether you are an Expert or just an Experienced. Below are the points that you should consider before giving the time estimation for any task / project.
Do you have the Exact Requirement?
Ex: You should have clarity on what is exactly the expected output.
Do you have all required Inputs?
Ex: Once you know answer for the above point then list out all required inputs to finish your task that includes “GAP Analysis in requirement”, “Resources Required” etc. It always depends on the task and the environment.
Do you have priorities with you?
Ex: First break down your task into small chunks and then give the estimates for each task. It calculates the final cost estimation for the complete task. Once you do that prioritize the tasks and do finish the tasks with high priority. It all depends on the criticality of the task and environment.
Always Expect a Delay:
Ex: Make sure you are including some extra buffer time when giving estimates. Below points will give us why we should need buffer time:
- Expect a meeting or discussion
- If any unexpected issues comes in
- Resource and Infrastructure availability
Review the progress:
Ex: Review the task progress and give updates to the customer / task owner periodically. We can put some extra effort if you observe any differences.
Note: Accuracy in cost estimation comes from your experience. Do maintain a template for giving cost estimations thereof accuracy comes when giving estimations for the similar tasks.
Never React always Respond
One of my senior managers taught me how to habituate this. One should think of three points when something wrong happens in your environment.
- Humans do Mistakes – Think of a situation where you did a mistake
- We can’t control the past
- What is the solution?
To be successful in your career this is the first point you should remember “Never React Always Respond”. This is not easy as I said; there is a simple technique to habituate this: ”Separate the Person from the Problem”. Do not blame / point out a person who did a mistake as it doesn’t take you towards the solution. First separate the person from the problem, and then start asking questions to find the possible solutions. Ok, now let’s see some examples as below.
Ex: One of your team members accidentally deleted a Table from production instance and he didn’t notice it until customer complaining that they are getting errors in their application side. How do you deal with this?
“Why did you run that command, I have told you lot many times……etc” will increase the problem density and situation becomes more complex.
Do not concentrate on “WHY” or the person who did the mistake?
Start thinking towards the solution:
“Is there any way that we can stop /rollback that command?”
“Is that happened during implementation of any specific request?”
“If Yes! Did you take any backup or snapshot before running the script?”
“Can someone be able to quickly get the table data into a temp table from the latest bkp?”
“What kind of data, is that a static or transnational data table?”
“If it is static / lookup can we get it from other similar environment?”
Instead of reacting if you start asking questions towards the solution, people around you will start thinking in a positive way and they too work on the same goal.
You can take the proper action once the solution provided and situation comes to normal. Ask your people to provide a complete report with a detailed RCA. And then you can take the proper action to prevent such kind of mistakes in future.
Keep your own best practices and Troubleshooting guide
Maintain your own document / guide, create a template in documenting problems. Whenever you come across with a problem note it down along with the possible solutions and the actual solution worked out for the current situation. You can save your time and energy if the same problem comes again. A personalized knowledge / troubling shooting guide made by an expert can create wonders and can be a reference guide for the next generation DBA / DB Developer.
Training, Learning and Knowledge Sharing
Irrespective of the role that you are working on you should go through some training on monthly / Quarterly / Yearly basis. Learning and training’s should include below.
- Latest Technology (SQL Server 2014, Oracle 12c, Big Data Platform, Cloud Technologies)
- Process Oriented (Six Sigma, Information Security, Agile)
- Personality Development
- Communication
Do share your knowledge, if you are too busy to share things you can choose a way from which suits your role and environment.
- Create a blog / website
- Participate in Technology Forums
- Attend the local Tech-Eds
- Share Key Data Points using e-Mail