Title Inflation in Tech

Employee churn in tech is a big problem I observe during my career. I believe it was a problem far before I even started working and it will be a problem for the upcoming years. Side note: I choose “churn” over “attrition” as I feel it fits better regarding resources [1] [2].

With the effects of the global pandemic, churn slowed down for a period. When employees did not feel safe to move on, they decided to stay in the safe harbour. Also companies, due to lack of clear vision, decided to stop or slow down hiring. The new setup caused burnouts, physical and psychological stress to employees more than ever. And since summer 2021 the inevitable arrived. Some name it as Great Resignation [3] or Great Reshuffle [4] [5].

Those circumstances drive the situation something I would like to call “title inflation”. Of course, this term was not coined by me. [6]

Photo by Carlos Muza on Unsplash

Title Diversity in Tech

There is no standard career path in tech. Job titles, expectations, salary levels, required experience levels and responsibilities vary hugely between companies. You can see a comparison of FAANG job titles in levels.fyi [7].

Promotion Decisions

I can count three different decision methods for promoting an employee. I will not discuss which method is correct or wrong here as this post does not aim to explain promotions in general. But let me briefly explain the methods I have observed and dive deep into the last one.

Butt Time [8] promotion, this promotion is solely based on years of experience (YoE). It reminds me of the promotion in an army. During my career, in some companies, I saw this method as the only method of promotion. E.g. after graduation one is a junior engineer, two years in the job they become an engineer, after two more years they jump to senior and so on. And for some companies, I saw this in the first steps. For instance, you start as a junior after two years you become an engineer and further promotions will be competence-based.

Competence-based promotion, in this model, companies have “somewhat” clear guidelines for each role level. E.g. a senior engineer should be able to lead a project across multiple teams etc. In theory, this method seems perfect, only the ones who deserve the next step is able to make the jump. But in practice there are gaps. How do you monitor an “ability to lead” for instance? How do you prove that? Some companies have methods like 360 evaluation, some companies put this burden on the engineering managers they prepare a case and ask for approval, some companies require engineers to apply for promotion then a committee evaluates. Still, I believe this is the best method even though the practical difficulties.

Marketing-based promotion, this model is the most elective one for the technically best engineers I saw. Most of the good engineers I met are humble, do not brag or show off. Unfortunately in this promotion model, the ones who show off get the next level. Even if they only achieve smaller things than the others. They have two great skills, business acumen and marketing which leads them to promote themselves in and out of the company finally letting them get to the next level. This can be mixed up with the competency-based model, but the difference in my opinion is the output produced by the engineer.

Promotion as a solution to churn

As Great Reshuffle hits the shores of tech companies, they aim to keep the talent in the company as much as they can. Because hiring is too expensive. Hiring means engineering time spent in the interviews, opportunity cost due to lost productivity etc.

Companies started to increase the salaries and benefits of tech employees, but hey they can not give XX,XXX€ salary to a senior engineer, that bar is too high for this level. Then they decided to give out promotions Senior Engineers are becoming leads, architects or principals. So the company can match the monetary expectations.

And this resulted in what I meant with “title inflation”. In some interviews or in some companies we see Senior Engineers who can not draw a solution, Principal Engineers who can not design a system or leads who can not communicate with their team.

Also, we see this method as a way to speed up talent acquisition lately. Due to the Great Reshuffle, some companies just throw in title and compensation packages [9] to convince candidates.

Conclusion

On one hand, I don’t want to lose any colleagues due to the fact they want more money. On the other hand, I don’t find it correct to promote incapable engineers to the next step until they collect the necessary experience.

This brings me to a solution offering, which is raising the salary bands for the existing roles. This solution highly depends on my belief that most engineers do not really care about titles. As I said titles vary hugely in different companies so being a Senior in Company A or being a Principal in Company B may not have any difference as long as they earn the same.

In contrast, I can understand the employer. When it comes to “competitive salary levels” the sky is the limit and there is a border where the value provided by an engineer becomes less than their cost. So they can not keep raising the bands.

I really wonder what will the future bring in sense of titles and their expectations? What do you think?

References

[1] https://lattice.com/library/turnover-vs-attrition-decoding-two-of-hrs-most-important-metrics
[2] https://sprigghr.com/blog/hr-professionals/employee-attrition-vs-employee-turnover/
[3] https://en.wikipedia.org/wiki/Great_Resignation
[4] https://www.forbes.com/sites/markcperna/2021/11/09/4-ways-the-great-reshuffle-can-help-us-reimagine-the-employer-employee-dynamic/
[5] https://www.businessinsider.com/ceos-burning-out-joining-great-reshuffle-2021-11
[6] https://en.wikipedia.org/wiki/Job_title_inflation
[7] https://www.levels.fyi/?compare=Netflix,Google,Apple,Amazon,Facebook&track=Software%20Engineer
[8] https://linearb.io/blog/improve-developer-productivity-with-brain-time/
[9] https://twitter.com/rakyll/status/1456673672849068039

Personal 2021 Summary and 2022 Expectations

Photo by engin akyurt on Unsplash

I usually have a master plan for the upcoming year and visit my status from time to time to review my goals. Unfortunately, 2019 and 2020 were not planned at all. I had to start my life in a new country with a new job in a different domain than my expertise. So I was not able to decide on any goals.

SMART Goals

There are different camps while setting goals. I know about the SMART and OKR, and I believe on a personal level setting SMART goals are sustainable and the OKR method is more suitable for groups or organizations.

Let’s shortly recap what SMART means,

  • Specific
  • Measurable
  • Achievable
  • Relevant
  • Time bound

My goals for 2021 and 2022 perfectly fit into the SMART framework, as they are clearly described, they have a numeric target to measure, they are not impossible, they are relevant to the categories I will mention shortly, and they have a deadline of 31st of December.

2021 Status

Around the end of the first quarter of 2021, I revisited my notes and my expectations from the year. It was still under a pandemic’s shadow yet I felt the need for a more concrete plan and goals for the year.

I can categorize my goals into different buckets I have career goals, personal branding goals, financial goals, personal development goals. I will not share my exact goals for the year, but until November 2021 I had 9 goals. In November I added 2 more to the list thinking that I may achieve. All in all, I had 11 goals for 2021 and 5 of them are failed.

Still, I am happy with the outcome. I learned my capacity, shortcomings and development points. Looking at the success fail ratio it may seem otherwise but the successful ones were way over the target. Which let me rediscover my interests and strengths.

Looking forward to 2022

As I said I reviewed my outcome for 2021, and I am happy to see that content creation becomes a habit for me again. I really love to think, write and share my learnings or findings. So I can add some small things into the global knowledge hub, the internet. I have also seen that after a long day at work, I am usually exhausted to create a technical tool or script. Actually, I want to stay away from the keyboard after work some days. Reading and learning is always a great asset for me and I am happy to grab a physical book to read after a long day.

In the light of those discoveries, I decreased my tech creation goals and increased the content creation goals. I also increased my reading and learning goals to the next level. Since I changed my professional path to management, I have lots of new things to learn and there are a lot of good books to read about becoming an engineering manager.

So in 2022, I have 11 goals from start. These goals may evolve, new goals can be added during the year. Categorywise my goals are

  • Career development: 3 goals
  • Personal development: 1 goal
  • Personal brand / content creation: 5 goals
  • Financial: 2 goals

Of course, numbers are just quantitative, qualitative properties of those goals differ e.g. I strongly believe 3 goals of career development is much harder than 5 goals of content creation. Hence numbers above are not meaningful without knowing the goals themselves yet I would like to keep my goals personal.

Thanks for reading so far! If you want to share your goals feel free to comment if you wonder about my goals’ status. Let’s wait for the end of 2022 post 🙂

Remote Work is Different with Pandemic

Before covid started my current and past employees were provided remote days as benefits. Usually, there is a weekly or monthly quota that an employee can work out of the office per week or per month. To be honest, these days were good, staying away from the disturbing effect of an open plane office to do some focus work. Or meet a colleague in a coworking space to work on a shared project.

Then the covid hit, all work shifted from offices to homes, working hours blended into resting hours, social interactions stopped, some were able to stay healthy some unfortunately caught covid. In the end, all our lives changed and I can not say all the change was good.

Photo by Alexas_Fotos on Unsplash

First, we lost the human touch, although I strongly believe that our job requires being in the flow and harmed by any disturbance (I love this Monkey User comic btw. to the point.), human beings are still “social creatures”. We can get highly motivated by some small talk, getting updates about a peer’s project, having a coffee chat over the new technology, drinks over a successful project etc. And these were all stayed back in the office, it is a quite low possibility that you bump into a colleague in your home.

Meetups and conferences were stopped. So not only the colleagues but also network touch was lost. Visiting a co-working space became an old memory, the only place to see other people was a supermarket for some time, which was kind of a post-apocalyptic movie scene and it still is.

Then arrived a series of meetings, all the companies I worked for had the same problem: there were never enough meeting rooms. During the pandemic setup, we finally acquired an unlimited number of meeting rooms. There were no limits, all you have to do is create a virtual space and share the link. Also, experts were suggesting to “overcommunicate” to be able to succeed in this new setup. So we created more meetings, we tried to simulate “bumping in the corridor”, we set meetings back-to-back as there was no walking distance from one Google Meet link to another Zoom link. And finally, that caused “Zoom Fatigue” for some of us.

Then the border became blurry between work and rest, I will be honest here some did a good job to keep the boundaries in place. They simulated commuting via some routines like walking around the block before and after work. I personally, tried to track my time and not work overtime also splitter my work environment from the rest of the home by moving my desk into the storage room. Still sometimes when an idea appeared, a notification chimed on mobile I went into “my office” to work some more, or some friends / colleagues did not realize the time and worked more than they anticipated.

Office ergonomics has been lost. Initial reaction to pandemic WFH was quick and mostly unplanned for. Employees were at home working on a dining table, working from the couch, having meetings from the closet as their partner was also in a meeting in the living room. And those places are bad for the health. Some of us got lucky, our companies spent enough resources to let us have a decent setup at home. And I will be honest again, my current company is one of them which provides a good selection of office equipment to us.

And burnout arrived for some, due to the accumulation of all topics above. Unfortunately, some arrived into a burnout state. Again I will talk personally, there had been days where I was not feeling productive and there were days where I was doing a good job. So although I am not a health professional, I suppose I didn’t hit the burnout levels luckily. I do not believe that people who burned out were the weak ones and others are stronger. We, all, have different circumstances and different environments so the effect and reaction differ from person to person of course. I only say I was lucky.

Next steps as far as I can see companies are starting to announce their post-pandemic work models. Some of them already called employees into the offices, some announced they are moving to a fully remote model, and some offer a hybrid work model. In my opinion hybrid model is the one to combine the best and the worst of the other two options. With some days spent in the office, colleagues can regain the human touch and collaboration opportunities, while doing focus work at home. There won’t be a need to redefine the borders between the work and the rest, and the home can be a home again.

What do you think about the future? Do you prefer a 100% remote work or a hybrid one? Share with us in the comments if you like.

My takes from System Design Interview by Alex Xu

System Design Interview by Alex Xu

Since 2015, I am attending interviews as an interviewer for recruiting new talents, for the selection of new partner companies etc. And since 2019 I am conducting interviews for my current company. The topics I interview for are usually General Tech and Culture Fit. I enjoy also system design and thought I can also help our company by taking over a few System Design Interviews hence I started to prepare myself for the next step. I saw “System Desing Interview: An Insider’s Guide” by Alex Xu is suggested for interviewees to prepare for upcoming challenges so I thought I should give it a shot to sharpen my skills and understanding of the system design domain.

The book starts with the basics like designing for scaling, back of the envelope calculations then suggests a framework for system design and provides 12 different system design examples. I took some notes and also recorded some resources to read further.

Let’s look into the suggested framework for system design. It’s a four-step framework and actually, I found it quite useful to have such a structure.

  1. Understand the problem and establish design scope
  2. Propose a high-level design and get buy-in
  3. Design deep dive
  4. Wrap-up

Time allocation suggested by the author per step is

  1. 3 – 10 minutes
  2. 10 – 15 minutes
  3. 10 – 25 minutes
  4. 3 – 5 minutes

This time allocation would allow a candidate to complete a design in around 50 minutes and would provide some additional time for Q&A in a 60 minutes interview. From my perspective suggested framework and time allocations would work in an interview setup.

Let me summarize each step with one paragraph, then I can provide my thoughts, notes and feedback about the book.

Understand the problem and establish design scope

Nobody would expect you to design the new Facebook or Netflix in the short time of an interview. So asking clarifying questions, setting up the boundaries of design and noting down the assumptions are the way to start the design. All those steps should be discussed with the interviewer, get their ideas about the important parts of the system to design and get their approval on the assumptions.

Propose a high-level design and get buy-in

This is the step where the interviewee should lay the foundations of the system and provide a blueprint with the collaboration of the interviewer. Doing some back of the envelope calculations and depending on those calculations system size and components should appear on the design. This step should not include details like data format yet but should have a storage layer for example.

Design deep dive

This is the time to think about handling the load, choosing the correct data store, scaling the API servers etc. Depending on the discussion with the interviewer, you should focus on a few key areas and deliver a detailed design and even a few implementation details if required.

Wrap up

In this last step, you should go the extra mile and tell about the flaws in your design and how it may be improved, what can be expected to change in the business in the future and how the design can evolve to cope with those changes.

My notes and thoughts about the book

  • There are some mistakes or not so best-practices in the book e.g.
    • Author claims NoSQL should be chosen to store massive amount of data, this is open for discussion. A technology selection should not be justified only by data size but also use cases and requirements.
    • In one of the API design sections, author does not follow the REST best practices and uses verb in the URL
    • Author claims a scale-up would not help with the load, in my experience it helps.
  • Back of the envelope numbers are great shortcuts during the design time.
  • There is an unfortunate use of magic number in the book while calculating peak system load. There is no explanation of why we use this factor to multiply our assumption.
  • 12 different system design examples backed by real life resources are really handy and informative.
  • There are some missing information, for example author says “token bucket is memory efficient” but does not explain why and how. Or while discussing quorum of a distributed system author overlooks possibility of a Byzantine Fault.
  • Reference materials are useful, almost every section I noted down some of the reference materials to read further.
  • In some designs there are security flaws which may cause data leak, which have been overseen. Though this can be defended as security is not in the scope and time is short. Still I believe security should start in the design phase.
  • Also in some designs sections, author does not follow the framework they suggested.

All in all, I got some fresh ideas and a good framework for system design interviews from the book. I would consider recommending this book to mid-level engineers who are looking for different aspects of system design and would use a few real-life examples. For me, a 10+ year engineer, the advantages of reading this book was limited.

Thanks to Alex Xu for putting all the effort and collecting those examples in a well-structured format. And thank you for reading this blog post, feel free to comment or share this post if you find it useful.

Coming Back…

It has been more than 5 years since my last blog post in here.

A few years ago I moved my writing habits into another website, which was medium.com. Now I decided to come back to my own web site to post my thoughts.

I can not promise about the intervals for new posts, it can be bi-weekly or monthly. But it will be about my personal career growth including but not limited to technical thoughts and demos, learnings about management, book reviews and maybe some whisky tasting notes. (People need their hobbies ☺)

Let’s start slow today and close this “Welcome back home” post. See you in the future posts and feel free to comment and share.

Featured Image Photo by Danielle MacInnes on Unsplash

ODI 12c: Renaming a Project

Hello all,

Working as a consultant has its own challenges which makes me try things at home, which drives me to play more with Oracle and ODI and learn new things. Today a new challenge appeared in front of me. I am working in an upgrade project, where the upgrade from ODI 10g to ODI 12c is already completed and my task is to test the codes in ODI 12c to see if they are still good. (There are some problems but they will be topic of another post.)

So today, our client admitted that they do not have only ODI 10g to upgrade, they also have an ODI 12c repository other than the upgraded one. And they want to merge two 12c repositories together. But there are some problems.

  1. Projects have the same name
  2. Some variables have the same name
  3. Some custom KMs have the same name but different codes.

So we thought of some methods and their possible outcomes. One option was to change the Project Name (and Code off course) but we could not decide how will ODI react to this change. So I decided to give it a try in my training VM tonight.

What I was expecting?

  1. ODI will recognize and change codes of variables in mappings
  2. ODI will recognize and change codes of variables in packages (refresh, evaluate, set, declare variable components)
  3. ODI may recognize the variable usage in procedure options
  4. ODI will not recognize and change variables in procedures

Let’s see what happened together:

First I created a new project and I created a variable called MY_VAR and put some refresh code in it, which does not matter since I am not going to run any of the objects for this demo.

Project Creation
Project Creation

Second I created MY_PROC with one task TASK 1 and one option MY_OPT. Task has one line of code, which is the MY_VAR itself, just to see if it will change.

MY_VAR
MY_PROC

Then I created a mapping called MY_MAP, put two random datastores in it. Made a link between them and mapped a column with MY_VAR.

MY_MAP
MY_MAP

Then I created a package MY_PACK which includes a Refresh Variable, MY_PROC with MY_OPT set to MY_VAR, and finally MY_MAP.

MY_PACK
MY_PACK

Finally I proceed to change Project Name and Project Code. ODI warns user in this step, that errors in objects may occur especially with project variables.

Rename
Rename

After I accepted the changing the name and the code, let’s see what happened. Refresh Variable in the pack is changed as I expected. You can see its new path in the lower right corner of the image. (click on image to see it bigger)

Refresh MY_VAR
Refresh MY_VAR

Option MY_OPT of MY_PROC did not change.

MY_OPT
MY_OPT

Code in MY_PROC stays the same after change.

MY_PROC
MY_PROC

Column mapping in MY_MAP did not change also which is a disappointment for me.

MY_MAP
MY_MAP

After seeing the results let’s check how many guesses I’ve done right. I will copy/paste the list from above.

  1. ODI will recognize and change codes of variables in mappings DID NOT HAPPEN
  2. ODI will recognize and change codes of variables in packages (refresh, evaluate, set, declare variable components) HAPPENED
  3. ODI may recognize the variable usage in procedure options DID NOT HAPPEN
  4. ODI will not recognize and change variables in procedures HAPPENED

So I achieved a score of 2 out of 4 in my guesses. And unfortunately ODI achieved to detect only 1 of the four scenarios. So be cautious about changing the name and the code of a project in ODI, actually be careful about changing the code of any othe objects too. (such as models, contexts etc.)

This demo has been done using ODI 12.1.2.0.0 and results may vary depending on the version.

Version
Version

Thanks for reading and please do not hesitate to write your comments or ask questions in section below.

ODI 11g : Results of Deleting a User

One of my customers had a high turnover rate. Sometimes we ran into some ODI objects which are locked by a developer who has gone. That triggered a question. What if I delete an ODI user while it has locks on objects. So I gave it a try, and while trying this other cases also pop-up. I also tried them on my VM.

Case 1: Deleting a user with locked objects

My expectation was being unable to delete a user. I was expecting there should be a FK between user and lock tables in repository. But I was able to delete. Then I thought about two scenarios,
a) object will be unlocked
b) object will stay locked and when I try to visualize lock, ODI will crash since there will be nothing returned from lock query.

I was wrong. You may find the screenshot about how ODI responds to deleting a user with locks.

Locked Object by deleted user
Locked Object by deleted user

 

I can open object, ODI will pop-up “This object is locked by DEVELOPER. You can not edit” dialog. You can view everything in the object. But to begin using object again, you need supervisor to unlock it.

Case 2: Deleting a user who created some objects

In that case I was expecting to find “Created By:” text box in object’s version tab to be empty. But I was wrong again. ODI just worked fine. When I checked the repository, I saw that ODI holds usernames for these text box not the user ID’s.

Case 3: Deleting an online user

 

After first two cases and failures of my expectations, now I had nothing to expect. I would just try and see. I created a user, open another ODI instance, connect with new user and deleted the user. Then I tried to take some actions in ODI. Some I was able to, some I was not.

 

 

Create Scenario
Create Scenario

Things I was able to:

  • View operator logs
  • View topology definitions
  • View models
  • Create scenarios

View interface
Save an open interface

Things I was not able to :

  • View interfaces
  • Run interfaces or scenarios
  • Selective Reverse Engineering a model
  • Edit topology definitions.

 

 

Exevute scenario
Exevute scenario

View interface
View interface

 

 

If you have some other cases for me to try please write in the comments area.

Thanks for reading, dont forget to share & comment.

Monthly Challenges : July ’15

So another month is over. My challenges and statuses are listed below.

On Going Challenges

– Work another month with Standing Desk, checked. I believe I won’t return to a sedentary work life, I really got used to my desk and working without a seat.
– Lose three more kilograms, failed. I’ve only lost around 600-700 grams.

New Challenges

– Tidy up my house, checked. Since we are having a really hot summer, I didn’t want to do anything but resting when I got home. So it got really untidy, but with this month’s challenge now I have a tidy house and it effects my life also.
– Exercise for at least 19 days (which is 2/3 of challenge range), failed. I only exercised 4 or 5 days.
– Publish two drafts, checked. You can find them on :
http://www.canburaktumer.com/blog/odi-11g-odi-12c-whats-agent/
http://www.canburaktumer.com/blog/x-things-graduation/
– Publish two Vlogs about extreme sports, checked.

Most of the challenges completed for July ’15. See you on the 7th of September for August Challenge Report.

ODI 11g, ODI 12c : What’s an Agent?

What is an agent?

An agent is a java process which usually located on server and listens to a port for incoming requests. It runs the requested scenario, reverse engineers requested datastores etc.

When a job submitted through ODI Studio GUI or through startscen.sh agent gets scenario from work repository and topology definitions from master repository, combines and converts them into a runnable job, usually consisting more than one code block. Then it sends code blocks to destination environments, which may be DB servers, file servers, hadoop name node etc. Finally agent gets job statuses from these environments and writes into work repository tables for us to see from Operator tab of ODI Studio.

Agent diagram from Oracle A-Team Blog

Agent Types

Standalone Agent

It is the basic agent of ODI. It does not require an application server like JEE Agent. It is easy to configure/start/stop this agent from shell. Since today I’ve always used this agent and never tried other versions. A-Team article says this is the most light weight and low footprint choice.

JEE Agent

“Java Enterprise Edition” agent, which requires an application server, in most documentation you can see the name of WebLogic Server since it’s another Oracle product. (Some search results: depending on this CertMatrix of Oracle http://www.oracle.com/technetwork/middleware/data-integration/odi-11gr1certmatrix-ps6-1928216.xls ODI 11.1.1.7.0 only supports WLS and does not support Tomcat or other application servers. You may -or may not- configure them to run together but it is not supported.) This agent is first delivered with ODI 11g. And still exists in ODI 12c.

Some pros of JEE agent which are written in A-Team blog are:

  • High availability : Through Web Logic Server’s cluster architecture, even a node is down agents may run on other nodes.
  • Configurable connection pooling : Connection pool can be configured through WLS.
  • Monitoring : Oracle Enterprise Manager can monitor, configure, alert, manage ODI JEE Agents. But I believe, there is a plug-in to be installed to achieve this tasks from OEM.

Colocated Agent

The newest agent type which has arrived with ODI 12c. This type is like a combo of other two types. Agent is a standalone agent, but can be monitored and configured through WLS. Unfortunately it does not take advantage of connection pooling, high availability. Our agent will be in WLS domain, can be managed through WLS and that’s all. It is lighter than JEE Agent. In my opinion companies which prefers JEE Agent as production agents can choose colocated agent as their DEV/TEST agent.

Agent Types diagram from Gerard Nico's website
Agent Types diagram from Gerard Nico’s website

Where to locate an agent?

To decrease network I/O it is better to locate agent to target DB server. Since agent submits code to DB Engine, it is better for them to be on same machine. Don’t forget that ODI is an E-LT tool. Which means it will load data into target server, then it will transform your data. So most of the load will be on target server. Which also means most of the codes will be submitted to target server.

Also since an agent is a local java process, agent will write files to the machine, which it is set-up on. If you have a file server seperate than DB server, then it is better to have another agent on file server to handle read/write file processes. Or to mount file servers directory to DB server as a directory and setting up only one agent is another solution.

Also these solutions will prevent any firewall related problems.

 

Thanks for reading, don’t forget to share & comment.

 

 

Resources I’ve read before writing this post:
http://www.ateam-oracle.com/odi-agents-standalone-jee-and-colocated/
http://www.ateam-oracle.com/understanding-where-to-install-the-odi-standalone-agent/
http://odibeginnertutorials.blogspot.com.tr/2013/11/2-introduction-to-odi-agents-and.html
http://www.odigurus.com/2011/10/defining-odi-agents.html
http://gerardnico.com/wiki/dit/odi/agent