Interviewing Tips

I have the great privilege of mentoring a high school student for their Programming Independent Study. This student will be graduating early and will then be looking for a programming internship before starting college.

To help this individual and other job seekers, here are interviewing tips based on my experience of interviewing  and being interviewed.

Before Interviewing

The high-level advice here is to know the company, interviewers, and job description in order to be prepared for the interview. Also, have a good online presence because the interviewers and recruiters will dismiss you if they discover any red flags.

  • Research the company. Go to their website, read Glassdoor reviews, speak to any current or former employees ahead of time, and use other sources when possible.
  • Research the interviewers and learn more about them. For example, see if they have LinkedIn profiles. This lets you know more about who you’re interviewing and you may be able to establish a connection with these people. For example, you may discover that you both went to the same school or worked at the same organization in the past. Also, these individuals will see that you’re looking at their LinkedIn profile which shows that you’re doing research and that you’re taking the job seriously.
  • Know the Job Description so you can focus on bringing up relevant examples and experience during the interview.
  • Have a good, presentable online presence. Interviewers and recruiters use your online presence to judge if you’d be a good fit for the organization or not. You may be really qualified but if you will be troublesome to work with, they’ll choose someone else.
    • Ensure that your social media profiles look presentable. For example, if you have a public Facebook account, don’t swear, post inappropriate pictures, and say bad things about former employers.
    • Create a LinkedIn profile so employers can see your professional experience.
    • Showcase your work online. If you’re a coder, use GitHub to showcase various sample work and/or contribute to various open source projects. Another option is to create a blog or website that showcases your work. This demonstrates your writing ability and how well you communicate.
  • After researching, write down a list of relevant questions to ask the interviewers so you can know more about the company. This shows that you’re interested in the position. See below for some sample questions.
  • Do mock interviews to practice, if needed. Many people get nervous and jittery during an interview, including me, so practicing ahead of time with different individuals can help.

During The Interview

  • Dress-To-Impress. Jeans and a T-Shirt are not acceptable and the interviewers will dismiss you for being unprepared. If you can’t show up prepared to the interview, you aren’t prepared to do the job.
  • Show up 5-10 minutes early but not any earlier and don’t be late. If you do show up earlier, stay in your car or the lobby and wait until 5-10 minutes before the scheduled interview time. You’d be surprised how many people inconvenience the interviewers by being too early or late. Don’t do this.
  • Look the interviewers in the eyes and speak to them slowly, concisely, and always try to frame answers around how good you are and how you’ll bring value to the organization.
  • Print Multiple Resumes in case the interviewers need them. I’d say 99% of all the interviews I’ve attended, the interviewers had my resume printed or available on their laptop but there were a couple instances where having them came in handy.
  • Bring relevant sample work. This allows the interviewers to see the work you’ve done so far and lets them have a more fruitful discussion. For example, if you have some code, print out multiple copies of selective code samples so the technical interviewers can see some code. This will set you apart from most of the other candidates who don’t do this and makes you more memorable to the interviewers.
  • Ask Questions. Ask the questions you’ve prepared ahead of time that are still unanswered and ask questions that came up during the interview. Most of the time, you have to wait until the end to ask your questions.
  • Thank the interviewers and tell them you want the job.

After the Interview

Email or write a letter to the interviewers thanking them again, discuss how you’re a good fit, and that you want the job.

Sample Questions For The Interviewers

Typically the end of an interview is reserved for you to ask the interviewers any questions you may have. Usually, this is 5-10 minutes. Use this time to find out more about the organization and job so you can determine if you want to work there or not. Here are some sample questions to get you started.

  • Describe the culture here. This open ended question lets the interviewers describe the organization’s culture and what it’s like to work there.
  • What do you like and dislike about working here? I like to ask this as a follow-up question to the culture question because the interviewer(s) will describe aspects that they like and dislike and you’d be surprised what people share.
  • What will I be doing my first week/month?  The interviewer will be visualizing you at the desk doing the job.
  • What is most pressing? What would you like to have done in the next 6-8 weeks?
  • Questions related to technology, processes, team size, or the project that were not addressed.
  • Last, ask some variant of “How did I do and do you have any concerns?”. This lets the interviewers provide feedback to you that you can respond to and use for the future too.

What other interviewing tips do you have?

Reflecting on 7 months in Business

7 months in business. 7 months… wow. It feels odd typing that since it feels like it’s been only a few months.

One unexpected thing about writing these reflective posts is they are really enjoyable because:

  • I review the good, the bad, and the ugly and take corrective action as needed.
  • It keeps me accountable to my Goals and Priorities.
  • Acts as a historical log so I can go back and review things.

What’s New

  • Project Workload Rollercoaster. January and February were really busy but now I have more availability for other projects. If you need some Salesforce work done, Contact Me. I completed a quick start Salescloud implementation and completed my primary, full-time 6 month project too. There’s other work but it’s part-time.
  • New prospect. After coming upon this blog, this vendor reached out to me about doing some contract work. We’re in early discussions but I am excited about working with them because they share the same values as me like putting your customers and employees first and giving back to the community. They also have very talented people and a diverse set of projects. There are other prospects of course so here’s to seeing what may be.
  • Turned down renewing my primary contract. For a variety of reasons, it was time to move on despite the client wanting to keep me on. The project is in better shape than I found it and they’re in good hands so I have no doubt they’ll succeed.
  • AutoRabit. It’s a cloud based Salesforce continuous integration and deployment SAAS solution and it’s great for a turn-key solution. It does deployments from various sources such as a source org, from version control, and even from past deployments. It also does version control management where you can specify the changes to commit from your org into a specific branch. These changes can then be collected into a “release” and promoted to various downstream orgs as needed. It also does data migration, UI testing, and static code analysis. Overall, it’s a great solution. Check it out if you haven’t heard of it. It’s better than rolling your own solution using a CI server such as Jenkins or Teamcity with the ANT Migration Toolkit if you can afford it.
  • More Job Offers. It’s reassuring to know that people want to hire you. Each one is attractive but I have to decline for the same reasons mentioned back in Reflecting on 4 months in Business. The most recent offer from this week was very tempting though because I really like working with these guys and the company culture and camaraderie is amazing. If I ever hire others, their culture is what I aspire to make mine like.

What’s Next

  • More Lightning. The basics are behind me and now I am going to do some more involved customizations that require components talking to each other and involve a custom community using the Napili template. There’s definitely more interest in Lightning in the community and I still believe 2017 will be the year it becomes mainstream.
  • Learn other Salesforce technologies such as DX and Einstein.
  • Expand the Network. Of the 4 items to complete from my 4 months in Business post, 2 are completed and the Lightning one is well underway. This one hasn’t started yet but will soon.
  • Lightning Product? I have this idea for a Lightning Product but am reluctant to invest in it. It is high-risk, high-reward. After helping bring a product to the AppExchange, I know what it takes to build one but selling, marketing, and supporting it are very different.

Last but not least, thank you new prospect for helping me realize I didn’t have an easier way to contact me through this website. That was resolved by adding the Contact page and the link to it in the main navigation.

How are your professional aspirations going?

The Lightning Email Grid Component

Challenge

A colleague put out a challenge to me and another colleague asking us to create a Lightning component that allows someone to select one or more records and then click a button to email an internal Salesforce user one email for each selected record.

The colleague was saying this for fun and was not meant to be taken seriously but this sounded like a fun learning opportunity so here’s my rough cut.

Email Grid Overview

Lightning_EmailGrid

This Lightning component is a generic component that lets one define the records to be retrieved and the Salesforce email template used to email a specified user one email per selected record. The component’s configuration is specified at design time when it’s added to a page via attributes.

Benefits

  • Highly configurable to allow someone to specify which fields to display from any queryable object that’s user accessible.
  • Easily reused in different places by using different parameters.

Considerations

  • This is a proof-of-concept component and is bare bones. It doesn’t have the bells and whistles of a production grade component like paging, searching, filtering, sorting, or better styling.
  • It uses standard Salesforce emailing capabilities to email a specific Salesforce user using email templates.
  • Use only for a reasonable number of records say 100 or less.
  • Success and Error Messaging needs to be added.

Component Markup

The component uses the “EmailGridController” apex class for retrieving its records and emailing the specified individual using the selected records. It invokes the component controller’s init method to query the desired records. The records are then rendered dynamically using the table markup given. The table styling came from the Lightning Design System Data Table Styling Guide.

Attributes

  • objectName – The API name of the standard or custom object to query records from. This is bound to from the design attribute.
  • fieldSet – The API name of the fieldset on the specified object that’s used to allow one to specify which fields to show in the table.  This is bound to from the design attribute.
  • whereClause – The where clause to use in the SOQL query so one can easily show the desired records.  This is bound to from the design attribute.
  • emailButtonLabel – The button text to show on the “Email” button.  This is bound to from the design attribute.
  • emailTemplate – The name of the email template to use to email the specified Salesforce user. This allows an admin to use different email templates that they configure.  This is bound to from the design attribute.
  • recipientUserId – The Salesforce record id of the Salesforce user to email.  This is bound to from the design attribute.
  • records – These are the typeless wrapper objects that represent the records queried and each record’s fields. This is used internally by the component.
  • columnNames – The list of column names to show as specified from the fieldset. This is used internally by the component.
  • columnAPINames – Unused at this time. May be useful for future enhancements. This would be used internally by the component.

Design Attributes

The design attributes bind to the component’s attributes with the same name. See the attributes above for more information about usage.

Component Controller

Init Method

The Init method takes the objectName, fieldSet, and whereClause, builds the request parameter object from it, and then invokes the getRecords apex method asynchronously. On success, the records aand column names are bound to the component’s records, columnNames, and columnAPINames attributes for rendering the records in the component.

doEmailRecords Method

The doEmailRecords method identifies the selected records, if any, and builds an email request to invoke the emailRecords function on the apex controller to email the specified user one email for each selected record using the email template specified.

Note the use of JSON.stringify to build a JSON string for the request parameter object. The framework isn’t smart enough to deserialize the request object into its corresponding Apex Request object so it has to be passed in its JSON string representation and then manually deserialized server side.

Apex EmailGridController Class

getRecords Function

The getRecords function takes in a RecordsRequest parameter that is used to dynamically query Salesforce records and return them using a list of typeless records using a record wrapper.

Debug statements were intentionally left in to make troubleshooting easier.

emailRecords Function

The emailRecords function emails the specified Salesforce user one email for each Salesforce record selected using the email template chosen. The records, emailtemplate and id of the user to email are located in the EmailRecordsRequest.

There’s pending work to pass the email results back in the response.

Record Subclass

This class is a wrapper class that represents a row in the table in the component. The Record property isn’t actually used at this time because the Lightning component framework doesn’t allow subscripting into it dynamically like you could with Visualforce. To get around that, a simple list<String> contains the values for each field on the record. Since the order of them corresponds to the order of the column names, they’re easily traversed using the Aura:Iterator to show the record’s values.

Other Thoughts

  • The component can be genericized further to allow one to specify any desired action to be done with a set of selected records after clicking the button.
  • The formatting of dates and datetimes may look undesirable in the table since String.valueOf is being used to convert the value to an SObject field value to a string.
  • It took about 5 hours to get this basic sample working. The two main challenges were 1) trying to figure out why my object requests weren’t invoking the server side functions and that’s because the Lightning component framework doesn’t support automatically serializing and deserializing complex parameter types. 2) Figuring out how to dynamically show the columns and their values since the Lightning component framework doesn’t support direct SObject field access like Visualforce does at this time.

What did you think of this solution? What other features would you implement? How did you implement generating a dynamic list of records and columns to be shown in a component?