this post was submitted on 14 Sep 2024
12 points (92.9% liked)
CS Career Questions
354 readers
1 users here now
Rules:
- Be welcoming - Not everyone is a 10 YOE senior engineer. Let's all help each other.
- No memes - Refer to the Programmer Humor community.
founded 2 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
Never heard the term API Integration before but guess I've been doing it for years including building them from scratch after looking up the term.
Internally we've always called it API Orchestration.
No idea what these companies are looking for, but I do most of the technical vetting for hiring, so maybe my advise will be helpful.
We always start at the model. We create models that act as parsers/validators for any external data entering our system (database, APIs, files). We never trust data that hasn't been parsed. We are a TypeScript shop and I don't allow any hard assertions / type casting.
We wrap every API call with a client library hiding the fact an API call is happening. It makes the API call and passes it to our parser.
When we need to transform data between two or more systems we create bidirectional transformers. These are "pure" transformation with no side effects.
We then connect it all together with controllers which house our business logic. They call our client libraries, make decisions, transform data with our transformers, read/write to the database, etc.
We use functional programming techniques so a controller is just a set of functions. We typically have specialised controllers focused on a specific resource / use case.
We lightly follow CQRS paradigms.
The same resource may have multiple models/controllers. We have a model for the client, the database, internal runtime, and view. One controller is usually focused on a single resource that maps between our clients, the database, and internal runtime model. This abstracts it away from the orchestration layer.
Our orchestration controllers only deal with connecting multiple resources, only seeing the runtime models and converting to the view model. Our handlers typically just call one function in these orchestration controllers.
The resource specific controllers are not aware of each other. This helps with cyclic dependencies. They can see each other's (runtime) models, but the orchestration layer is the only one that can fetch resource A from its non-orchestration controller to pass to a non-orchestration controller focused on resource B that needs it.
This sort of dependency inversion makes it super easy to test.
Edit: Summary...
This information is helpful. How do you usually test potential hires? This is a bit interesting because a lot of this I'm unfamiliar with and seems like information that the clients I would work with would implement. Basically, I work with a software company helping others to integrate with our API. That can range from just ensuring they understand what information to expect from certain calls, down to sitting with the customer's engineers to determining why certain calls aren't returning information as expected. Regardless, this information is nice to read more about. Thank you
I don't work at a FAANG, so no leet code or tests. We also don't have the best pay. Not horrid, but probably 2/3s what a FAANG engineer makes. In addition, I don't work at a company known for software development. Our primary business is networks and connectivity.
That all said, it can be a pain to find candidates. Our functional programming tech stack is pretty niche to make matters worse just for perspective.
Interviews are typically:
Technical interviews are mostly just talking shop. I have a list of topics and sample questions, but just as conversation starters:
What I'm looking for is someone who understands the technology they work with. Great candidates will relate the question to their experience, not give a text book response. I'll drill into more nuanced questions if I suspect someone just power studied and doesn't understand the tech.
For a junior, 10-20% familiarity with the questions is typical. For my level, 70% is ideal. I also don't ask all of them. If you have 5 years experience with databases I may spend 1-2min with some harder concepts to test the claim and move on.
The more you talk about your knowledge that's applicable to the role, the more likely my questions will be geared towards your experience.
Personal projects and a public repo will vastly boost your preinterview appearance. I will look at your code, your commit history, tooling you use, etc. This usually tells me more than any interview. I'm not looking for the perfect repo with 100% code coverage, greats docs and comments, etc. I'm looking to see how the code evolved from inception.
I look for contributions to other projects big and small. It tells me you had a problem or needed a feature and had the problem solving skills to make it happen. A big +1.
We also offer APIs which customers integrate against. We don't want our customers to have to reach out. So in that specific domain I'll ask about what can be done to avoid those calls. Great docs, FAQ, tutorials, code examples, reference implementations of a client using our APIs, tutorials to build those reference implementations step by step, etc.
Our entire back end has a simulator implementation. Clients get the source. They can test against it locally, look at the source to see what its doing, etc.
We try to provide really good error messages. If a client sends a bad request, we send back exactly where it failed to parse. Clients, through the simulator implementation, can look at the exact parser we use to work it out.
Linux experience is a huge plus. Public dotfiles gives me good insight ahead of the interview.
Personal projects don't need to be all code. I've hired bootcamp programmers who were previously a musician, a baker, and a carpenter. Attention to detail, problem solving, and passion towards achieving a goal are great personality traits.
I ask some pointed questions about AI. I love GPT, but more as a search engine replacement and not an answer book. I have a couple juniors who are really smart, but rely on it way to much. Its output never fits our style guidelines so it stands out. Its vastly hampered their ability to read code. They've improved with some interventions, but I try to sus out how dependant a candidate is on it.
Hopefully some of this word soup is of assistance!
Yeah this is great information I appreciate it!