Please navigate to the bottom of the page for Table of Contents

Tuesday, May 10, 2016

Website design, SEO and advertising

If you are interested in learning about website design, SEO and advertising, I recommend that you head over to www.omspark.com/blog and read the detailed articles written by Urmila Singhal.

Some of my favorites are:



One Time SEO Vs Ongoing SEO

One Time SEO Vs Ongoing SEO

Almost everything on the web and virtual world is changing rapidly. Businesses moving towards online marketing, modes of payment are shifted to online payment services and Individuals have become more social than ever.  Focusing one change from the above is online... read more
Online payment options for small businesses

Online payment options for small businesses

Over the past decade the online payment modes have brought innovative change to the business industry. ‘Online payment’ refers to the money exchanged electronically by using internet and digital devices without involving cash. The purpose of the service is to make the... read more
Is your website your new home?

Is your website your new home?

Several years ago, on a sudden whim while all our friends were buying homes in a new neighborhood, we reached early morning to register for a home ourselves. Our top two bids were not accepted as someone ahead in the line picked up the available plots. We immediately... read more
How Om Spark was born

How Om Spark was born

My name is Urmila Singhal and I am the proud owner of Om Spark. Having spent 11 years in engineering at Microsoft, 5 of which were in the Search Advertising space, I am well versed in the mechanics of the Online space. Coming from a family that owned different types... read more



In Page SEO Vs Off Page SEO

In Page SEO Vs Off Page SEO

You might have come across with this question many times that which of both “In page SEO” and “Off page SEO” is better in comparison. Well to be very honest, there is no satisfactory answer. Where, SEO is important for your website, In page and off page SEO is... read more
Top 10 Best Practices For Website Design

Top 10 Best Practices For Website Design

Keep a clear strategy and plan for website design! You have started a business and are planning to have a well-designed and professional website, so you have to follow some basic logical tips. Whenever it comes to a website design, you should keep in mind that you are... read more
Should small businesses invest in SEO?

Should small businesses invest in SEO?

Should small businesses invest in SEO? Have you ever wondered on the importance of SEO to your business and how SEO can help elevate your online business presence, resulting in more traffic/leads for your website? Let us spotlight the role of SEO that is played in... read more
Content is king, keep your content fresh

Content is king, keep your content fresh

If I were to share the same post every single day on Facebook, what would my friends possibly do? Some of them might start ignoring my posts, others might stop following me and the highly impatient ones would un-friend me. Do you like to view new, different and... read more

Monday, November 18, 2013

Overall interview evaluation parameters for a software engineer/architect

When giving technical interviews, either as a software engineer or software architect, you are not only evaluated on technical prowess but also on a bunch of other factors that make a good or not so good hire. Every company and every team has a different set of parameters on which they evaluate candidates, but here is a list that is quite common across most organizations. Note that each of these categories may have a different weight assigned to them to provide emphasis to specific skills that are more important to that team. In addition, the team and company culture have a strong influence on the hiring process and that can be learnt to some degree by reading about the company and their development philosophy.

I have also given a typical question to highlight what I mean by that category. Again, this may vary, but it should give you a good idea on how to present yourself during an interview.

Quality
Question
Energetic
N/A – Based on observation
Ready to learn
N/A – Based on observation
Takes new challenges
What would you do if you happen to finish your assigned task earlier? (Hint: read new tech, fix existing bugs, help teammate, slack off, analyze data, etc.)


Potentially independent
Tell me about a situation that required you to build your knowledge base before solving a complex problem

Results oriented
When do you consider a problem solved? How much time would you spend tweaking a solution to gain more performance? When is the performance good enough and you move to the next problem?

Growth potential
Describe a time when you had to complete a project in which you were provided with very little information or guidance

Adaptability
Describe a time when you presented a proposal or provided a service that was given an unfavorable response by stakeholders
Sincerity
Tell me about a time when you did not meet a planned milestone
Mentoring
Tell me about a time when you mentored others in your area of technical expertise
Provide an example of a time when you had to motivate others to complete a challenging deliverable.


Team Fit
Describe your most recent experience working with a virtual team.
What were the challenges you faced and how did you work through them?
Describe a situation when you led a project with a geographically or functionally diverse team
Describe how you have collaborated with others outside of your immediate team to resolve a critical issue
Tell me about a time when you experienced a major organizational change (for example, a reorganization, a new supervisor or a new procedure) that created stress. 

Company Fit
Why would you join our team and not another competitor?
What are 3 words that describe you?
What experience do you have that qualifies you for the job?
What do you consider your strengths?
What are your short term and long term goals



Technical
Given an array of numbers, write a function to remove duplicates and sort the output
In an org, given two employees, find their common manager
SQL: Given an employee table with salaries, find the employees that make more than their manager

Design: Consider an API management system. There is an API portal (say NB) that has managed services that point to a variety of backend systems (let’s call them SB). The Developer apps call the NB system which checks for quotas, throttling, authentication, access, etc and if everything is good, massages the request to call the appropriate SB system. The SB response is then returned to the client. Some requests may be stateless (e.g. GetJobs()) and some may be more stateful (e.g. async call to translate speech to text). Design me a transactionID/conversationIDsystem that allows me to keep track of different requests for purposes of monitoring, measuring latency, failures, etc.

Data driven
Describe a long-term project or assignment of which you took ownership. How did you make sure each milestone was achieved in a timely manner?
You wanted to make a change on the website, but your product manager was not in favor. How would you handle this?
Tell me about a situation when you had multiple alternatives from which to choose. What steps did you take to determine the most appropriate alternative?


This should give you a good idea on what many interviewers gauge a candidate. There are of course many more factors and qualities that guide the hiring process. 

How to answer software design interview questions

In the previous post on How to answer algorithmic programming interview questions, we discussed a templated approach on how to solve algorithmic questions. In this post, we will explore similar steps that will help you think in the correct direction while solving design questions.

To set some context, design questions differ from their algorithmic counterparts in how you approach them. Design questions, as the name implies, focus more on how to architect a larger system than just writing an algorithm to solve a specific aspect of the problem. Some examples of design questions may include:
1. Design a transaction ID/conversation ID for an API system
OR
2. Design a cloud based employee performance management system that can support over 100,000 employers.

Here the approach you would take would focus more on component/system design with performance, throughput, stability, scale and redundancy in mind. Let's review some of these buckets that you should keep in mind when designing large scale software systems.

Design principles and philosophy: Before you even start your broader system design, talk about your design philosophy. That is, what are your guiding principles for a good design. For example, simple, robust, scalable, resilient to failures, etc.

Product requirements: To design a good system, you need to understand what the requirements are; UI, interactions, Middle tier, backend, etc. What are the different entry/exit points, metrics that matter, etc.

System requirements: Once you have articulated the different product requirements, it is important to think and list down system requirements such as availability, scale, perf, geo-redundancy, etc. This and the product requirements will help you design a system that meets both functional and system requirements.

Which features would be Pri-0 versus Pri-1 and why: This is an optional part and you might give this more attention if the interview is more focused on product design than a system design.

Architecture: This is the meat of the interview. Here you would define various components of the system, how they interact and the data flows. You would also talk about data redundancy, database backups, load balancing, etc.

Measurement and logging: All good designs should talk about how you would measure performance, key metrics and do your logging and analysis.

Performance characteristics: You should also spend some time discussing the performance characteristics of your proposed architecture. Pay special attention to key operations and high traffic sections. 

Geo-redundancy: Designing systems that serve traffic all across the globe and allow failures and fall-backs are strong characteristics of a good design. 

Define how the solution would scale: Scale is something that every company, product design looks for. How would you handle increased traffic across the globe while keeping your performance relatively constant should be thought through from the very start.

Security: Most non-trivial products today have security from start. User info, financial information need to be properly secured and steps defined on how to mitigate breaches.

Talk about stability/health checks: A highly performant system that is unstable does not help. Focus on aspects that help build a stable system. Local redundancy, failovers, uptime are important factors.

Deployments/Zero downtime: Think and define how zero downtime and rolling deployments will happen. 

Proposed enhancements/improvements: Since this is a first pass on design, talk about alternate design and different technologies.For example, RabbitMQ versus QPID, PostgresSQL versus Cassandra. etc.

Of course, a good system design has a strong architectural component. Focus on building a strong foundation and rest everything should be a guiding factor towards that goal.

How to answer algorithmic programming interview questions

Most technical programming interviews have at least one or more programming whiteboard exercise. These generally include questions like
1. Write an algorithm to reverse a linked list.
OR
2. Write a function to sort a binary tree.
OR
3. Write an algorithm to remove duplicates and sort an arbitrary long input string comprised of single digit numbers.

Almost all of such questions require you to explain your thinking on whiteboard and then design and explain your algorithm or function on the whiteboard in real time. So how do you answer algorithmic questions and make sure that your thinking and direction covers various different aspects that an interviewer is looking for.

Here is one such list that you can keep at the back of your mind when attempting to solve such questions. Some of them may not be valid for some questions, but you should try to model your answer around these tenets.

Understand the question: Make sure you repeat the question. The goal is to understand exactly what the interviewer is looking for in your answer. 

Asks clarifying questions to understand what the interviewer is looking for: This is an extension of the first point. You need to ask as many clarification questions as necessary to make sure you are solving the right problem. Most questions will have ambiguity built into them and it is your job to make sure you get them clarified.


Paraphrase the problem: Once you have clearly understood the question, paraphrase it. This helps make sure to the interviewer that you really get the question and the subtleties associated with it. 


Call out assumptions: Before and as you are designing the algorithm, make sure to clearly spell out any assumptions that you are making. For example, array index starts at 0, the input is assumed to be made only of numbers, etc. Unsaid assumptions have a bad habit of coming back and biting you later in the exercise.


Articulate at least one or two acceptable input and output: If possible, it is always good to show one or two possible input cases and the desired output from your solution. This helps both you and interviewer to make sure that you are on track to understanding the question.


Define broad solution: Once you have reached this stage, define a broad outline of the solution. No code, just the big ticket steps. For example, Sort the input, find the most common elements, use hashmaps, clean output to remove duplicates, etc.


Define possible other solutions (using hashtags, linked lists, trees, etc): Once you have a broad solution, make sure that you discuss or highlight some alternative approaches. This shows that you can think from a higher perspective and evaluate alternate approaches.


Draw a “manual run” on the whiteboard for input/output: To make sure that your high level solution really works, manually run your input through that to make sure you get the desired output.


Define the high level design: Now is the time to start hashing out your high level design components. Basic functions, data structures, core logic. A lot of your time would be spent here understanding and building your design.


Define the basic algorithm: Here you would be defining the core logic and algorithm for your problem. Make sure you keep talking about your approach.


Discuss time taken by algorithm (1, log(n), etc): Once you have the detailed design in place, discuss the performance characteristics of your solution. Think about minor tweaks or improvements you can do here to improve the performance. 


Talk about error handling: This is very important. You should at least talk about different error conditions and how your algorithm would handle it. You can keep the whiteboard clean by not writing every possible case, but make sure you talk about them.


Handle edge cases: Any good algorithm handles edge cases without going through the entire process very fast. Make sure you spend a few minutes thinking and articulating about them.

Testing: Once you think you have the final design ready, force yourself to turn-off your brain and run a couple of inputs through the algorithm. Follow exact steps there and do not use your brain. Basically, be the computer and test. Test. Test again. You will surely uncover a few things here that you might have missed (e.g. <= instead of ==).


Regularly check in to see if the interviewer is on the same page as you: This is a very important step and needs to be done through out the interview. You need to keep the interviewer engaged and focused. Speak clearly, slowly, think aloud and make sure interviewer is following you.


Hopefully this will help you answer algorithmic programming interview questions in a much better cleaner way using a templated approach.

In the next post we will look at such a templated approach to solving design interview questions.