
Sign up to save your podcasts
Or


When Maxime worked at Facebook, his role started evolving. He was developing new skills, new ways of doing things, and new tools. And — more often than not — he was turning his back on traditional methods. He was a pioneer. He was a data engineer! In this podcast, you'll learn about the rise of the data engineer and what it takes to be one.
Written by Maxime Beauchemin: https://twitter.com/mistercrunch
Read by Abbey Rennemeyer: https://twitter.com/abbeyrenn
Original article: https://fcc.im/2tHLCST
Learn to code for free at: https://www.freecodecamp.org
Intro music by Vangough: https://fcc.im/2APOG02
Transcript:
I joined Facebook in 2011 as a business intelligence engineer. By the time I left in 2013, I was a data engineer.
I wasn’t promoted or assigned to this new role. Instead, Facebook came to realize that the work we were doing transcended classic business intelligence. The role we’d created for ourselves was a new discipline entirely.
My team was at forefront of this transformation. We were developing new skills, new ways of doing things, new tools, and — more often than not — turning our backs to traditional methods.
We were pioneers. We were data engineers!
Data Engineering?
Data science as a discipline was going through its adolescence of self-affirming and defining itself. At the same time, data engineering was the slightly younger sibling, but it was going through something similar. The data engineering discipline took cues from its sibling, while also defining itself in opposition, and finding its own identity.
Like data scientists, data engineers write code. They’re highly analytical, and are interested in data visualization.
Unlike data scientists — and inspired by our more mature parent, software engineering — data engineers build tools, infrastructure, frameworks, and services. In fact, it’s arguable that data engineering is much closer to software engineering than it is to a data science.
In relation to previously existing roles, the data engineering field could be thought of as a superset of business intelligence and data warehousing that brings more elements from software engineering. This discipline also integrates specialization around the operation of so called “big data” distributed systems, along with concepts around the extended Hadoop ecosystem, stream processing, and in computation at scale.
In smaller companies — where no data infrastructure team has yet been formalized — the data engineering role may also cover the workload around setting up and operating the organization’s data infrastructure. This includes tasks like setting up and operating platforms like Hadoop/Hive/HBase, Spark, and the like.
In smaller environments people tend to use hosted services offered by Amazon or Databricks, or get support from companies like Cloudera or Hortonworks — which essentially subcontracts the data engineering role to other companies.
In larger environments, there tends to be specialization and the creation of a formal role to manage this workload, as the need for a data infrastructure team grows. In those organizations, the role of automating some of the data engineering processes falls under the hand of both the data engineering and data infrastructure teams, and it’s common for these teams to collaborate to solve higher level problems.
While the engineering aspect of the role is growing in scope, other aspects of the original business engineering role are becoming secondary. Areas like crafting and maintaining portfolios of reports and dashboards are not a data engineer’s primary focus.
We now have better self-service tooling where analysts, data scientist and the general “information worker” is becoming more data-savvy and can take care of data consumption autonomously.
ETL is changing
We’ve also observed a general shift away from drag-and-drop ETL (Extract Transform and Load) tools towards a more programmatic approach. Product know-how on platforms like Informatica, IBM Datastage, Cognos, AbInitio or Microsoft SSIS isn’t common amongst modern data engineers, and being replaced by more generic software engineering skills along with understanding of programmatic or configuration driven platforms like Airflow, Oozie, Azkabhan or Luigi. It’s also fairly common for engineers to develop and manage their own job orchestrator/scheduler.
There’s a multitude of reasons why complex pieces of software are not developed using drag and drop tools: it’s that ultimately code is the best abstraction there is for software. While it’s beyond the scope of this article to argue on this topic, it’s easy to infer that these same reasons apply to writing ETL as it applies to any other software. Code allows for arbitrary levels of abstractions, allows for all logical operation in a familiar way, integrates well with source control, is easy to version and to collaborate on. The fact that ETL tools evolved to expose graphical interfaces seems like a detour in the history of data processing, and would certainly make for an interesting blog post of its own.
Let’s highlight the fact that the abstractions exposed by traditional ETL tools are off-target. Sure, there’s a need to abstract the complexity of data processing, computation and storage. But I would argue that the solution is not to expose ETL primitives (like source/target, aggregations, filtering) into a drag-and-drop fashion. The abstractions needed are of a higher level.
For example, an example of a needed abstraction in a modern data environment is the configuration for the experiments in an A/B testing framework: what are all the experiment? what are the related treatments? what percentage of users should be exposed? what are the metrics that each experiment expects to affect? when is the experiment taking effect? In this example, we have a framework that receives precise, high level input, performs complex statistical computation and delivers computed results. We expect that adding an entry for a new experiment will result in extra computation and results being delivered. What is important to note in this example is that the input parameters of this abstraction are not the one offered by a traditional ETL tool, and that a building such an abstraction in a drag and drop interface would not be manageable.
To a modern data engineer, traditional ETL tools are largely obsolete because logic cannot be expressed using code. As a result, the abstractions needed cannot be expressed intuitively in those tools. Now knowing that the data engineer’s role consist largely of defining ETL, and knowing that a completely new set of tools and methodology is needed, one can argue that this forces the discipline to rebuild itself from the ground up. New stack, new tools, a new set of constraints, and in many cases, a new generation of individuals.
Data modeling is changing
Typical data modeling techniques — like the star schema — which defined our approach to data modeling for the analytics workloads typically associated with data warehouses, are less relevant than they once were. The traditional best practices of data warehousing are loosing ground on a shifting stack. Storage and compute is cheaper than ever, and with the advent of distributed databases that scale out linearly, the scarcer resource is engineering time.
Here are some changes observed in data modeling techniques:
further denormalization: maintaining surrogate keys in dimensions can be tricky, and it makes fact tables less readable. The use of natural, human readable keys and dimension attributes in fact tables is becoming more common, reducing the need for costly joins that can be heavy on distributed databases. Also note that support for encoding and compression in serialization formats like Parquet or ORC, or in database engines like Vertica, address most of the performance loss that would normally be associated with denormalization. Those systems have been taught to normalize the data for storage on their own.
blobs: modern databases have a growing support for blobs through native types and functions. This opens new moves in the data modeler’s playbook, and can allow for fact tables to store multiple grains at once when needed
dynamic schemas: since the advent of map reduce, with the growing popularity of document stores and with support for blobs in databases, it’s becoming easier to evolve database schemas without executing DML. This makes it easier to have an iterative approach to warehousing, and removes the need to get full consensus and buy-in prior to development.
systematically snapshoting dimensions (storing a full copy of the dimension for each ETL schedule cycle, usually in distinct table partitions) as a generic way to handle slowly changing dimension (SCD) is a simple generic approach that requires little engineering effort, and that unlike the classical approach, is easy to grasp when writing ETL and queries alike. It’s also easy and relatively cheap to denormalize the dimension’s attribute into the fact table to keep track of its value at the moment of the transaction. In retrospect, complex SCD modeling techniques are not intuitive and reduce accessibility.
conformance, as in conformed dimensions and metrics is still extremely important in modern data environment, but with the need for data warehouses to move fast, and with more team and roles invited to contribute to this effort, it’s less imperative and more of a tradeoff. Consensus and convergence can happen as a background process in the areas where the pain point of divergence become out-of-hand.
Also, more generally, it’s arguable to say that with the commoditization of compute cycles and with more people being data-savvy then before, there’s less need to precompute and store results in the warehouse. For instance you can have complex Spark job that can compute complex analysis on-demand only, and not be scheduled to be part of the warehouse.
Roles & responsibilities
The data warehouse
A data warehouse is a copy of transaction data specifically structured for query and analysis. — Ralph Kimball
A data warehouse is a subject-oriented, integrated, time-variant and non-volatile collection of data in support of management’s decision making process. — Bill Inmon
The data warehouse is just as relevant as it ever was, and data engineers are in charge of many aspects of its construction and operation. The data engineer’s focal point is the data warehouse and gravitates around it.
The modern data warehouse is a more public institution than it was historically, welcoming data scientists, analysts, and software engineers to partake in its construction and operation. Data is simply too centric to the company’s activity to have limitation around what roles can manage its flow. While this allows scaling to match the organization’s data needs, it often results in a much more chaotic, shape-shifting, imperfect piece of infrastructure.
The data engineering team will often own pockets of certified, high quality areas in the data warehouse. At Airbnb for instance, there’s a set of “core” schemas that are managed by the data engineering team, where service level agreement (SLAs) are clearly defined and measured, naming conventions are strictly followed, business metadata and documentation is of the highest quality, and the related pipeline code follows a set of well defined best practices.
It also becomes the role of the data engineering team to be a “center of excellence” through the definitions of standards, best practices and certification processes for data objects. The team can evolve to partake or lead an education program sharing its core competencies to help other teams become better citizens of the data warehouse. For instance, Facebook has a “data camp” education program and Airbnb is developing a similar “Data University” program where data engineers lead session that teach people how to be proficient with data.
Data engineers are also the “librarians” of the data warehouse, cataloging and organizing metadata, defining the processes by which one files or extract data from the warehouse. In a fast growing, rapidly evolving, slightly chaotic data ecosystem, metadata management and tooling become a vital component of a modern data platform.
Performance tuning and optimization
With data becoming more strategic than ever, companies are growing impressive budgets for their data infrastructure. This makes it increasingly rational for data engineers to spend cycles on performance tuning and optimization of data processing and storage. Since the budgets are rarely shrinking in this area, optimization is often coming from the perspective of achieving more with the same amount of resources or trying to linearize exponential growth in resource utilization and costs.
Knowing that the complexity of the data engineering stack is exploding we can assume that the complexity of optimizing such stack and processes can be just as challenging. Where it can be easy to get huge wins with little effort, diminishing returns laws typically apply.
It’s definitely in the interest of the data engineer to build [on] infrastructure that scales with the company, and to be resource conscious at all times.
Data Integration
Data integration, the practice behind integrating businesses and systems through the exchange of data, is as important and as challenging as its ever been. As Software as a Service (SaaS) becomes the new standard way for companies to operate, the need to synchronize referential data across these systems becomes increasingly critical. Not only SaaS needs up-to-date data to function, we often want to bring the data generated on their side into our data warehouse so that it can be analyzed along the rest of our data. Sure SaaS often have their own analytics offering, but are systematically lacking the perspective that the rest of you company’s data offer, so more often than not it’s necessary to pull some of this data back.
Letting these SaaS offering redefine referential data without integrating and sharing a common primary key is a disaster that should be avoided at all costs. No one wants to manually maintain two employee or customer lists in 2 different systems, and even worse: having to do fuzzy matching when bringing their HR data back into their warehouse.
Worse, company executive often sign deal with SaaS providers without really considering the data integration challenges. The integration workload is systematically downplayed by vendors to facilitate their sales, and leaves data engineers stuck doing unaccounted, under appreciated work to do. Let alone the fact that typical SaaS APIs are often poorly designed, unclearly documented and “agile”: meaning that you can expect them to change without notice.
Services
Data engineers are operating at a higher level of abstraction and in some cases that means providing services and tooling to automate the type of work that data engineers, data scientists or analysts may do manually.
Here are a few examples of services that data engineers and data infrastructure engineer may build and operate.
data ingestion: services and tooling around “scraping” databases, loading logs, fetching data from external stores or APIs, … metric computation: frameworks to compute and summarize engagement, growth or segmentation related metrics
anomaly detection: automating data consumption to alert people anomalous events occur or when trends are changing significantly metadata management: tooling around allowing generation and consumption of metadata, making it easy to find information in and around the data warehouse
experimentation: A/B testing and experimentation frameworks is often a critical piece of company’s analytics with a significant data engineering component to it
instrumentation: analytics starts with logging events and attributes related to those events, data engineers have vested interests in making sure that high quality data is captured upstream
sessionization: pipelines that are specialized in understand series of actions in time, allowing analysts to understand user behaviors Just like software engineers, data engineers should be constantly looking to automate their workloads and building abstraction that allow them to climb the complexity ladder. While the nature of the workflows that can be automated differs depending on the environment, the need to automate them is common across the board.
Required Skills
SQL mastery: if english is the language of business, SQL is the language of data. How successful of a business man can you be if you don’t speak good english? While generations of technologies age and fade, SQL is still standing strong as the lingua franca of data. A data engineer should be able to express any degree of complexity in SQL using techniques like “correlated subqueries” and window functions. SQL/DML/DDL primitives are simple enough that it should hold no secrets to a data engineer. Beyond the declarative nature of SQL, she/he should be able to read and understand database execution plans, and have an understanding of what all the steps are, how indices work, the different join algorithm and the distributed dimension within the plan.
Data modeling techniques: for a data engineer, entity-relationship modeling should be a cognitive reflex, along with a clear understanding of normalization, and have a sharp intuition around denormalization tradeoffs. The data engineer should be familiar with dimensional modeling and the related concepts and lexical field.
ETL design: writing efficient, resilient and “evolvable” ETL is key. I’m planning on expanding on this topic on an upcoming blog post.
Architectural projections: like any professional in any given field of expertise, the data engineer needs to have a high level understanding of most of the tools, platforms, libraries and other resources at its disposal. The properties, use-cases and subtleties behind the different flavors of databases, computation engines, stream processors, message queues, workflow orchestrators, serialization formats and other related technologies. When designing solutions, she/he should be able to make good choices as to which technologies to use and have a vision as to how to make them work together.
All in all
Over the past 5 years working in Silicon Valley at Airbnb, Facebook and Yahoo!, and having interacted profusely with data teams of all kinds working for companies like Google, Netflix, Amazon, Uber, Lyft and dozens of companies of all sizes, I’m observing a growing consensus on what “data engineering” is evolving into, and felt a need to share some of my findings.
I’m hoping that this article can serve as some sort of manifesto for data engineering, and I’m hoping to spark reactions from the community operating in the related fields!
You've probably heard a lot about bitcoin over the last few years. But do you truly understand how it works? This article explains the concepts in straightforward language (like you were 5) so you'll never be out of the loop again.
Written by Nik Custodio: https://twitter.com/nik5ter
Read by Abbey Rennemeyer: https://twitter.com/abbeyrenn
Original article: https://fcc.im/2tzvh1E
Learn to code for free at: https://www.freecodecamp.org
Intro music by Vangough: https://fcc.im/2APOG02
Transcript:
We’re sitting on a park bench. It’s a great day.
I have one apple with me. I give it to you.
You now have one apple and I have zero.
That was simple, right?
Let’s look closely at what happened:
My apple was physically put into your hand.
You know it happened. I was there. You were there. You touched it.
We didn’t need a third person there to help us make the transfer. We didn’t need to pull in Uncle Tommy (who’s a famous judge) to sit with us on the bench and confirm that the apple went from me to you.
The apple’s yours! I can’t give you another apple because I don’t have any left. I can’t control it anymore. The apple left my possession completely. You have full control over that apple now. You can give it to your friend if you want, and then that friend can give it to his friend. And so on.
So that’s what an in-person exchange looks like. I guess it’s really the same, whether I’m giving you a banana, a book, or say a quarter, or a dollar bill….
But I’m getting ahead of myself.
Back to apples!
Now say, I have one digital apple. Here, I’ll give you my digital apple.
Ah! Now it gets interesting.
How do you know that that digital apple that used to be mine, is now yours, and only yours? Think about it for a second.
It’s more complicated, right? How do you know that I didn’t send that apple to Uncle Tommy as an email attachment first? Or your friend Joe? Or my friend Lisa too?
Maybe I made a couple of copies of that digital apple on my computer. Maybe I put it up on the internet and one million people downloaded it.
As you see, this digital exchange is a bit of a problem. Sending digital apples doesn’t look like sending physical apples.
Some brainy computer scientists actually have a name for this problem: it’s called the double-spending problem. But don’t worry about it. All you need to know is that, it’s confused them for quite some time and they’ve never solved it.
Until now.
But let’s try to think of a solution on our own.
Ledgers
Maybe these digital apples need to be tracked in a ledger. It’s basically a book where you track all transactions — an accounting book.
This ledger, since it’s digital, needs to live in its own world and have someone in charge of it.
Say, just like World of Warcraft. Blizzard, the guys who created the online game, have a “digital ledger” of all the rare flaming fire swords that exist in their system. So, cool, someone like them could keep track of our digital apples. Awesome — we solved it!
Problems
There’s a bit of a problem though:
1) What if some guy over at Blizzard created more? He could just add a couple of digital apples to his balance whenever he wants!
2) It’s not exactly like when we were on the bench that one day. It was just you and me then. Going through Blizzard is like pulling in Uncle Tommy(a third-party) out of court(did I mention he’s a famous judge?) for all our park bench transactions. How can I just hand over my digital apple to you, like, you know— the usual way?
Is there any way to closely replicate our park bench, just you-and-me, transaction digitally? Seems kinda tough… The Solution
What if we gave this ledger — to everybody? Instead of the ledger living on a Blizzard computer, it’ll live in everybody’s computers. All the transactions that have ever happened, from all time, in digital apples will be recorded in it.
You can’t cheat it. I can’t send you digital apples I don’t have, because then it wouldn’t sync up with everybody in the system. It’d be a tough system to beat. Especially if it got really big.
Plus it’s not controlled by one person, so I know there’s no one that can just decide to give himself more digital apples. The rules of the system were already defined at the beginning. And the code and rules are open-source. It’s there for the smart people to contribute to, maintain, secure, improve on, and check on.
You could participate in this network too and update the ledger and make sure it all checks out. For the trouble, you could get like 25 digital apples as a reward. In fact, that’s the only way to create more digital apples in the system.
I simplified quite a bit
…but that system I explained exists. It’s called the Bitcoin protocol. And those digital apples are the “bitcoins” within the system. Fancy!
So, did you see what happened? What does the public ledger enable?
1) It’s open source remember? The total number of apples was defined in the public ledger at the beginning. I know the exact amount that exists. Within the system, I know they are limited(scarce).
2) When I make an exchange I now know that digital apple certifiably left my possession and is now completely yours. I used to not be able to say that about digital things. It will be updated and verified by the public ledger.
3) Because it’s a public ledger, I didn’t need Uncle Tommy(third-party) to make sure I didn’t cheat, or make extra copies for myself, or send apples twice, or thrice…
Within the system, the exchange of a digital apple is now just like the exchange of a physical one. It’s now as good as seeing a physical apple leave my hand and drop into your pocket. And just like on the park bench, the exchange involved two people only. You and me — we didn’t need Uncle Tommy there to make it valid.
In other words, it behaves like a physical object.
But you know what’s cool? It’s still digital. We can now deal with 1,000 apples, or 1 million apples, or even .0000001 apples. I can send it with a click of a button, and I can still drop it in your digital pocket if I was in Nicaragua and you were all the way in New York.
I can even make other digital things ride on top of these digital apples! It’s digital after-all. Maybe I can attach some text on it — a digital note. Or maybe I can attach more important things; like say a contract, or a stock certificate, or an ID card…
So this is great! How should we treat or value these “digital apples”? They’re quite useful aren’t they?
Well, a lot of people are arguing over it now. There’s debate between this and that economic school. Between politicians. Between programmers. Don’t listen to all of them though. Some people are smart. Some are misinformed. Some say the system is worth a lot, some say it’s actually worth zero. Some guy actually put a hard number: $1,300 per apple. Some say it’s digital gold, some a currency. Other say they’re just like tulips. Some people say it’ll change the world, some say it’s just a fad.
I have my own opinion about it (and you can check out the link in the original article).
That’s a story for another time though. But kid, you now know more about Bitcoin than most.
One day, Sean was working as a route setter at a rock climbing gym in Tennessee. The next, he was driving to San Francisco, without a plan, to start his career in tech. This is the story of his challenging, winding, but ultimately successful path to his first job as a software engineer.
Written by Sean Smith: https://twitter.com/bonham_000
Read by Abbey Rennemeyer: https://twitter.com/abbeyrenn
Original article: https://fcc.im/2JQwSXI
Learn to code for free at: https://www.freecodecamp.org
Intro music by Vangough: https://fcc.im/2APOG02
Transcript:
One year ago, I was working part-time as a route setter at a rock climbing gym in Tennessee. Today I’m working as a software engineer at a cyber-security startup in San Francisco.
My journey to this point has been unforgettable and life-changing. And yet as challenging as everything was, I think that any sufficiently-motivated person could do the same.
Knowledge has become democratized. All you need to reach a competitive level in your field is time and dedication. This is especially true for the field of software engineering.
In 2016, my life was falling apart
When I started learning to code in 2016, I guess you could say my life was falling apart.
I’d gone to college as a pre-med student, with degrees in biochemistry and anthropology. But I quickly became disenchanted with science and medicine, and left college with no clear path.
I started working as a routesetter at rock climbing gyms for almost 2 years, but things were not going so well. I knew I was in need of a big change.
I had been putting off learning to code for a long time, but I knew this was what I wanted to do. Finally, on my birthday in 2016, I committed to learning to code. I didn’t look back.
At this point in time, I was vaguely familiar with the coding bootcamps that have become quite ubiquitous over the last few years. Luckily, I quickly discovered freeCodeCamp. When I realized that finishing their curriculum entailed writing software for non-profit organizations, I promptly joined and resolved that I would finish freeCodeCamp’s open-source curriculum before even considering a bootcamp.
freeCodeCamp rapidly became the core of my education. I supplemented it with many other resources, such as podcasts, tutorials, open-courseware, and healthy doses of documentation and Stack Overflow when needed.
Typical days involved me working through freeCodeCamp challenges and projects, which allowed me to progressively improve my skills.
When sitting and writing code became unproductive, I would absorb material through other channels: audio, video, and so on. I moved back and forth between different learning methods, which was very useful in maintaining a strong level of engagement and focus. This was basically my process, and it allowed me to dedicate many hours to learning.
Here it is by the numbers (roughly estimated):
Total duration learning: less than 12 months Total hours: ~2,500 Total projects completed: 70+ Total CS courses watched: ~10 Total GitHub commits: 1,500+ Total lines of JavaScript written: 20,000+
Most of this learning took place in Knoxville, Tennessee, where I was living at the time. I had a strong desire to move to one of the major tech cities, so one day I woke up and naturally decided it was time to drive to San Francisco. That’s about exactly how it happened.
That night I left, and about 3 weeks later arrived in the Bay Area. Plenty of time to listen to podcasts on the road.
Arriving in San Francisco for my first real job search
After arriving in San Francisco and completing the core freeCodeCamp curriculum (front-end, data visualization, and back-end certifications) I had a brief go at job applications. Around 65 or so. Literally no response.
Remember, I had just driven into the Bay Area from across the country. I had no idea how competitive it would be, nor how much my skills were even worth to employers at their current level. Did freeCodeCamp actually measure up to the education of an in-person coding bootcamp?
These feeler applications gave me a clear reading: I had to do more. The market is pretty competitive. So I rapidly revised my plans, extended my time horizon, and reached out to freeCodeCamp to begin a non-profit project, since I was now eligible to start one.
Meanwhile, I began networking in the city as much as possible. The networking came easily enough, as freeCodeCamp has many self-organized campsites throughout the world’s cities.
I got a quick response from freeCodeCamp’s team about the nonprofit projects. Some of my React projects had caught the eye of Michael D. Johnson and Quincy Larson, and they asked me whether I’d be interested in helping write their React curriculum. (freeCodeCamp itself is a nonprofit.) I also helped build a conference management tool for the Conference on Crimes Against Women.
I was very excited about the opportunity to give back to this awesome community, so I quickly accepted the challenge. My React and Redux challenges are being incorporated into their newly expanded curriculum, which is now live in beta form live here.
In addition, I chose to advance my timeline to 2017. I would continue studying on my own for the remainder of 2016 before applying for jobs again. I left San Francisco, droving north through Portland and Seattle to Bellingham, Washington.
It was during these weeks in the Pacific Northwest that I worked non-stop to complete the React and Redux challenges. I collaborated with another freeCodeCamp contributor from New York, Peter Weinberg, and built around 80 coding challenges in total.
This was probably one of the key moves that helped set my resume apart, because it represented a significant project that served a real-world organization’s needs.
In late December, we finished the initial draft of the challenges and moved them into an official alpha release which is still generating feedback from the community.
My triumphant return to San Francisco
Back in San Francisco, I was almost ready to dive into job applications again. I had decided to join Outco, a crash course in interview preparation for software engineers. I had always been pretty opposed to spending money at a coding bootcamp (partly because I didn’t have the money), but I chose to join Outco because in my view they are trying to serve a different purpose. Outco is specifically targeting the interview process for software engineers, a process which causes friction for many, even experienced and skilled engineers.
Although I could write JavaScript pretty well at this point, I definitely was not prepared to solve arbitrary algorithm questions on a whiteboard. That’s one of the key areas Outco tries to prepare students for, because, for better or worse, whiteboarding remains a favorite interview tactic of tech companies. In addition, I could defer payment to Outco until after I got a job.
And, a reality check: I had been going many months now at a strong pace of probably 50+ hours a week of coding and learning, and I was now literally risking it all on my ability to get a job in one of the most expensive and competitive cities in the US.
I had already made a sincere effort to apply to companies and failed miserably! The pressure and stress were definitely bearing down on me at this point.
I knew success was going to depend heavily on my performance of the next few months. I joined Outco because I expected that their structured program and support would prove indispensable in this last miles of my journey, and it did.
2017 arrived and I started Outco. I began to work even harder than before. Tons of algorithms and data structures practice, whiteboarding questions, technical questions, pair programming, mock phone screens, systems-design questions—you name it, and lots of it. Not to mention applying to jobs again, and a lot more than I did the first time.
And, of course, once you begin to get responses from companies it becomes very time-consuming (not to mention very stressful) to begin juggling all of these interviews at once.
Practicing for interviews everyday is hard enough. Standing in front of a whiteboard in a real interview as they ask you about binary trees is much harder (and yes, interviewers asked me about binary trees).
Again, the numbers tell the story more eloquently:
Total applications: 192 (including the 65 from 2016) Total phone interviews: 17 Total take-home code challenges: 6 Total technical screens: 5 Total onsites: 3 Total offers: 1 Total time to offer: 6 weeks Success Rate: 0.52%
That one offer was from TruSTAR Technology, and I have been so happy to join their team! TruSTAR is building a platform that allows companies to share cyberintelligence data in order to prevent and mitigate cyberattacks.
I’m working on the frontend side of their application and putting to use the JavaScript skills I gained through freeCodeCamp. The experience has been incredible so far, and I have been honestly surprised by how well prepared I have been to begin making meaningful contributions to their codebase.
Lessons I learned over the past 12 months
Now, finally, here is some advice I would have for anyone looking to do something like this:
You need real-world skills and you have to learn a lot. That means a lot of hours of work, there’s no way around it. Passion helps.
Building projects is an excellent way to learn, and once you know enough it is not very hard to find open-source projects or other high impact projects to work on.
JavaScript and React are great to learn and in high demand! But learn what interests you.
It’s critical that you cultivate a community of others who are learning to code or working as engineers. Network in your city. Network online. Find collaborative projects to work on. Ask for help.
If you can afford it, try to have some patience. This is what I struggled with the most.
There you have it — the journey that led me across the US to begin a career as a software engineer! I’m sure everyone’s path will look different, that’s part of the fun.
Find your own path and don’t be afraid to disregard other people’s views if you believe strongly enough in your own. That includes my views.
The opportunities in the tech industry are real, and if you want them badly enough, you can find a way there.
As an engineer, your job will be to solve problems, and if you are self-taught, the first problem you must solve is how do you teach yourself?
Cheers everyone, and happy coding!
P.S. A huge shoutout and thank you to the entire freeCodeCamp community and everyone I mentioned in this article (and a few others: Archie, Christian, Susan, Beemer Girl and all my friends from home). You have all proven invaluable in helping me accomplish this goal.
In this episode, Oh My Zsh founder Robby Russell tells the story of how he unexpectedly launched one of the most popular zsh configuration frameworks out there. He shares his process, some mean tweets, and his advice for people starting open source projects.
Written and read by Robby Russell: https://twitter.com/robbyrussell
Original article: https://fcc.im/2HzyjYN
Learn to code for free at: https://www.freecodecamp.org
Intro music by Vangough: https://fcc.im/2APOG02
Transcript:
How I unexpectedly built a monster of an open source project
It was the summer of 2009. I found myself helping a coworker debug something in their terminal. As I attempted to type in a few command lines, I noticed that the prompt wasn’t responding to the shortcuts that my brain had grown accustomed to. Frustrated, I exclaimed, “when are you finally going to switch over to Zsh?!”
(yeah, I was the type of annoying coworker that would constantly point out that X was better than Y when given the chance. In hindsight, I don’t know how they put up with me…but between you and me, I had a point.)
At that point in time, I had been a daily Zsh user for a little over three years.
Some of my #caboose friends shared a few of their .zshrc configurations within our IRC channel. After a few years, my .zshrc file grew into a tangled rat's nest. Honestly, I didn’t know what ~30% of the configuration did. I trusted my friends enough to run with it, though. What I did know was that I had some git branch and status details, color highlighting for a few tools (i.e., grep), autocompleting file paths over SSH connections, and a handful of shortcuts for Rake and Capistrano. Working on a machine with a default Bash profile felt remarkably archaic; I’d become dependent on these shortcuts.
A few coworkers were happy to copy/paste the .zshrc file that I shared and begin using it. A few others wouldn’t because they knew that I didn’t know what some of it did. Fair enough.
After a few attempts to convert them and getting nowhere, I opted for a different approach.
First, I reorganized my .zshrc configuration, which involved breaking it up into a collection of smaller files. My thinking here was that this would a) help me better understand how all of these bits worked while b) helping educate my peers when they went to read the code.
Pre-empting their next question, “how do I get this to work on my machine?”, I drafted the first setup instructions.
Most importantly, I packaged all these files into a shiny new git repository. I figured that if I tossed it up on Github, my peers would be able to collaborate with me on improving it.
While not a huge leap, it was a step above inviting people to copy/paste a text file from Pastie.
On Aug. 28th, 2009, Oh My Zsh was born.
…but, wait a minute!! Where are the themes? Where are the plugins? Installation scripts? Logo?
This might come to a surprise to most of the Oh My Zsh user base, but none of those were features that I had considered. My goal with the project was not to build a framework for maintaining Zsh configurations but to share my own config with my coworkers so that they’d use Zsh.
Within a day of sharing it with all of my coworkers, everyone at Planet Argon had migrated from Bash to Zsh.
Victory! …or so I thought.
The first feature request came in the next day.
“How do I customize MY prompt?”
Two coworkers asked me how they could customize their prompt. They wanted to change the colors and the information that was displayed.
What the hell!? Wasn’t my prompt compelling enough for them? So nitpicky. ;-)
I pointed to the prompt.zsh file and said they could modify that.
Quickly, this became an issue as they now had their own version of that file. As a result, this would add some complexity if we all wanted to share some of our shortcuts and features as we’d have conflicts to deal with.
Hmm…
So, a day after first announcing Oh My Zsh on my blog, I began introducing the initial concept of themes.
Meanwhile, I got my first external pull-request from Geoff Garside to add a few aliases for TextMate. (Notice how that went straight into a catch-all aliases.zsh file)
A day later, another theme was sent over. Groovy, I better add a link on the README to see some screenshots on the wiki.
Within a month, we had a dozen themes contributed to the project.
This began to be a really popular aspect to Oh My Zsh and we had to start hitting the brakes on accepting themes once we passed 100. (we’re currently at ~140 and rarely accept new ones)
Simplifying setup with an installer
It occurred to me that the initial setup was requiring people to run a handful of commands. Rather than asking people to re-type and/or copy/paste a handful of commands, I felt that it would be more efficient for both parties (as it’d reduce the questions my coworkers would have when they hit a problem and/or skipped a step).
An installer was born.
My initial thoughts were to handle save folks a few steps by automating the installer. If everyone ran the same commands, then we could cut down on human error (skipping a command, typos, etc.). I also wanted to be mindful that people might be switching from either Bash or an existing cobbled-together Zsh configuration. To help them with a possible switch back to the previous shell, we made a backup of their original configuration file. Finally, we’d switch their default shell to Zsh.
“Hooray! Oh My Zsh has been installed.”
Oh, right. How will people be able to stay updated with the new changes to the project?
The next day, I added an upgrade script that strolls over to the Oh My Zsh directory, fetch updates from the git repository, and returns you to your previous working directory.
Far from rocket science.
About three weeks later, it became obvious that my coworkers weren’t manually keeping up with all of the new updates to the project. Rather than reminding them to do that from time-to-time, I added functionality that would periodically prompt the user to check for updates.
Up until this point, this felt like the most complicated piece of code in the project. I wish that I could remember who gave me the great idea to use an epoch value here.
In my opinion, it was also the turning point for the project.
While a handful of people were using it, this functionality would allow nearly every user to stay up-to-date on project changes and more importantly, stay engaged. When they would run the updater, they’d see a list of files changed and that would, subtly, introduce them to new features… a la, “I wonder what that theme looks like..”
Sadly, not everyone has been a fan.
Despite a few vocal opponents over the years, I’ve stood by my decision to keep this as a default setting.
Back in 2012, we made a change to reduce the frequency of auto-update prompts by 50%.
The auto-update has allowed us to ship new features, performance improvements, and bug fixes without relying on everyone manually doing it. I’m convinced that this feature has helped keep the community engaged.
This Muffin Needs Candy
While the project was attracting a lot of themes, I really felt like the project could benefit from branding.
My solution? Ascii art.
I have no idea what prompted the git commit message.
My thought process here was… sure, you get a bunch of useful shortcuts and themes when you begin using Oh My Zsh, but I really felt like the first impression after the installer would run was an opportunity to delight new users.
People have been asking me to print shirts with the ascii art for quite some time. (we’ll likely do that this summer — follow us on twitter)
Plugins
Ten months after open sourcing the project, users had begun to request the ability to not have everything get loaded up. For example, a Python developer might not need the Rake and Capistrano related aliases to get loaded like a Ruby developer would.
So, we implemented a basic plugin system that would allow folks to decide which to load on initialization by changing a value in .zshrc.
When this feature was released, there were five plugins bundled.
Within a few months, I started to get pull requests for new plugin ideas.
Within a year, I had accepted over 40 plugins.
Within two years? Over 70 plugins.
Currently, we have plugins for adb, ant, apache2-macports, archlinux, autoenv, autojump, autopep8, aws, battery, bbedit, bgnotify, boot2docker, bower, branch, brew, brew-cask, bundler, bwana, cabal, cake, cakephp3, capistrano, cask, catimg, celery, chruby, chucknorris, cloudapp, codeclimate, coffee, colemak, colored-man-pages, colorize, command-not-found, common-aliases, compleat, composer, copydir, copyfile, cp, cpanm, debian, dircycle, dirhistory, dirpersist, django, dnf, docker, docker-compose, emacs, ember-cli, emoji, emoji-clock, emotty, encode64, extract, fabric, fancy-ctrl-z, fasd, fastfile, fbterm, fedora, forklift, frontend-search, gas, gem, git, git-extras, git-flow, git-flow-avh, git-hubflow, git-prompt, git-remote-branch, gitfast, github, gitignore, glassfish, gnu-utils, go, golang, gpg-agent, gradle, grails, grunt, gulp, heroku, history, history-substring-search, httpie, iwhois, jake-node, jhbuild, jira, jruby, jsontools, jump, kate, kitchen, knife, knife_ssh, laravel, laravel4, laravel5, last-working-dir, lein, lighthouse, lol, macports, man, marked2, mercurial, meteor, mix, mix-fast, mosh, mvn, mysql-macports, n98-magerun, nanoc, nmap, node, npm, nvm, nyan, osx, pass, paver, pep8, per-directory-history, perl, phing, pip, pj, pod, postgres, pow, powder, powify, profiles, pyenv, pylint, python, rails, rake, rake-fast, rand-quote, rbenv, rbfu, rebar, redis-cli, repo, rsync, ruby, rvm, safe-paste, sbt, scala, scd, screen, scw, sfffe, singlechar, spring, sprunge, ssh-agent, stack, sublime, sudo, supervisor, suse, svn, svn-fast-info, symfony, symfony2, systemadmin, systemd, taskwarrior, terminalapp, terminitor, terraform, textastic, textmate, thefuck, themes, thor, tmux, tmux-cssh, tmuxinator, torrent, tugboat, ubuntu, urltools, vagrant, vault, vi-mode, vim-interaction, virtualenv, virtualenvwrapper, vundle, wakeonlan, wd, web-search, wp-cli, xcode, yii, yii2, yum, z, zeus, zsh-navigation-tools, zsh_reload.
In total… 214 plugins. Admittedly, not everyone has been impressed by this.
I do agree that could be drastically improved.
The few times that I considered it, I found the proposed approaches to be too complicated for folks who aren’t yet familiar and/or comfortable with the terminal. Perhaps a more sophisticated approach for version 2 of the framework. (more on this later)
There has, also, been a part of me that has felt like this project would only be of interest to people for a few years. As users gained more experience and/or as technology evolved, the framework would be left behind by shiny new projects that solved problems far better than we had.
I never thought Oh My Zsh would still be building momentum nearly seven years later.
Where do all these new users keep coming from? I ❤ you people!
While I have many stories to share (and intend to write more on this topic), I wanted to speak to those who have been debating the idea of open sourcing a project.
Eight Considerations For Your Open Source Project
Don’t start with a wildly ambitious goal. Start your project with a simple, attainable goal. What does success look like? In my scenario, I wanted 1–2 people on my team to use my scripts. The project was a success in under 24 hours.
Everything since has been extra-credit.
Don’t try to account for every scenario. If I had gotten hung up on some long-term details for the project, Oh My Zsh would never have happened. Nearly everything that has been added to the project has come organically post-initial release.
One of the beautiful aspects of an open source project is that your user base can help shape it.
Don’t try to make it perfect. Worrying how other people are going to react about your code shouldn’t be your biggest concern. Does it work? How do they feel when they’re interacting with it should be a higher concern. In my case, I’ve had some great contributors over the years who have helped tidy up and improve the quality of the code that I originally released.
Rarely has anyone said anything critical about my old code — maybe they should have, though. ;-)
Don’t try to be everything to everyone. There have been a few points in the history of the project where we hit a crossroads. In particular, there was a time when a huge rebuild was proposed, which I was quite excited about until I was able to wrap my head around some of the changes.
As a result, a fork was rebranded and we agreed to follow different paths. Not everyone was happy with my decision here, but it was during this period that it became clear (to me) that I wanted to focus my attention on folks who weren’t too comfortable with the terminal and/or git.
Don’t stop thanking contributors. If anybody helps your project out, please let them know how much you appreciate their effort. I can’t thank my contributors enough. One of my biggest self-critiques related to this project is that I’ve not been consistent enough in being vocal about my appreciation.
There are 910 people from all over the world who have their code accepted into the master branch of Oh My Zsh at the time of writing this.
It’s such a long list that Github can’t even list them all.
In particular, thank you. (you know who you are)
Don’t forget the documentation. Over the years, documentation of plugins and functionality has been vital to helping inform users on how to take advantage of the framework.
I wish we had adopted this convention several years before.
The README file is going to be seen the most…so make it count. In my case, I opted to introduce people to my personality and dry sense of humor.
Honestly, seeing tweets like this means the world to me.
Don’t forget about the rest of your life. Again, I never anticipated the project turning into what it is today.
Are you familiar with the anecdote about the frog in a pot of boiling water?
It took me 3–4 years, too many, to finally bring in another person to help maintain the project. I kept thinking that I could catch up with all the open pull requests and issues. What I kept telling myself was that folks who know how to fork the project can make their desired changes and work off of that, so reviewing and approving pull requests is a nice-to-happen versus a need-to-happen.
In practice, it’s somewhere in between. I do feel a bit bad for old pull requests lingering, but I also don’t keep Oh My Zsh as one of the top few projects on my plate.
Outside of Oh My Zsh, I run a 19-person agency, play guitar in an instrumental post-rock band, sit on the board of directors of a local homeless shelter non-profit, travel with my camera a lot, ride my motorcycle, ride my bicycle, and try to keep a social life with my friends. Oh My Zsh fits somewhere in amongst all of these.
It’s not at the top of my priority list. It’s not at the bottom. It’s somewhere between. This isn’t an excuse to not being able to keep up with the community, but more of a reminder that those other things should matter to you, too, if you’re about to start your own project.
(I will write more on the topic of leading an open source project w/maintainers in another story… ❤ are you following me? ❤) Don’t forget to have some fun. When you start your project, decide if this is going to be serious work time or play time. Perhaps it can be somewhere in the middle.
Oh My Zsh has, always, been a play time activity project for me.
Knowing that one of my playful projects has been and continues to be enjoyed by people is such a wonderful feeling.
Some might call it a passion project. I call it playtime.
Interested in my fun open source project?
You can learn more at http://ohmyz.sh.
Have you built your app on someone else's code? And beyond that, does the "secret sauce" of your product depend on external libraries or frameworks? While it's tempting to use the latest and greatest tech as soon as it comes out, that's not always a great idea. In this episode, Bill explains why, and what to do to protect your code.
Written by Bill Sourour: https://twitter.com/BillSourour
Read by Abbey Rennemeyer: https://twitter.com/abbeyrenn
Original article: https://fcc.im/2HerXO5
Learn to code for free at: https://www.freecodecamp.org
Intro music by Vangough: https://fcc.im/2APOG02
Transcript:
“Change is the only constant…” – Heraclitus (Philosopher)
The tools, libraries, and frameworks we use to build our web applications today are drastically different from the ones we used just a few short years ago.
In a few short years from now, most of these technologies will have changed dramatically again. Yet, many of us make these a central, inextricable part of our apps.
We import, use, and inherit from the flavor-of-the-month frameworks as if they’re all going to be around and unchanged forever. Well… they’re not. And that’s a problem.
After 20+ years of developing, designing, and architecting web applications, I’ve come to appreciate two important truths:
External dependencies pose a great threat to the long term stability and viability of any application.
It’s increasingly difficult — if not impossible — to build any kind of non-trivial app without leveraging external dependencies.
This article is about reconciling these two truths so that our apps have the greatest chance of long-term survival.
The rabbit hole is very deep indeed.
If we start thinking of all the things our web apps depend upon it’s easy to think of a dozen or more before we even get to the code:
Power Connectivity Firewall DNS Server Hardware (CPU, Disk, Ram, …) Cooling Virtualization Platform Container Platform Operating System Web Server Platform App Server Platform Web Browser
As developers, it’s good to be aware of these things, but there’s often not much we can do about them. So, let’s ignore them for now and talk only about the code.
In code, there are three kinds of dependencies:
1. Dependencies we control This is code written and owned by us or our organization.
2. Dependencies we don’t control This is code written by a third party vendor or open-source software community.
3. Dependencies once removed These are the code dependencies our third-party code dependencies depend upon. (Say that three times fast!)
We’re going to talk mainly about dependencies we don’t control.
Dependencies we control and dependencies once removed can still cause headaches, but in the case of dependencies we control, we should be able to directly intervene and mitigate any problems.
In the case of dependencies once removed, we can usually rely on a third-party to take care of it for us, since they are dependent on these, too.
Why third-party code dependencies are good
A large portion of your web application exists to solve common problems: authentication, authorization, data access, error handling, navigation, logging, encryption, displaying a list of items, validating form inputs, and so on...
Regardless of which technology stack you use, there’s a good chance that common solutions to these problems exist, and are available as libraries that you can easily acquire and plug-in to your codebase. Writing any of this stuff completely from scratch is generally a waste of time.
You want to concentrate on code that either solves an uncommon problem or solves a common problem in an uncommon way. That’s what makes your application valuable: the code that implements the business rules that are unique to your app alone — the “secret sauce.”
Google’s search and page ranking algorithm, Facebook’s timeline filtering, Netflix’s “recommended for you” section and data compression algorithms— the code behind all of these features is “secret sauce.”
Third-party code — in the form of libraries — allows you to quickly implement those commoditized features of your app, so you can stay focused on your “secret sauce.”
Why third-party code dependencies are bad
Take a look at any non-trivial web-app built in the last couple of years and you’ll be absolutely astounded by the amount of code that actually comes from a third-party library. What if one or more of those third-party libraries changes drastically, or disappears, or breaks?
If it’s open-source, perhaps you can fix it yourself. But how well do you understand all the code in that library you don’t own? A big reason why you use a library in the first place is to get the benefits of the code without having to worry about all the details. But now you’re stuck. You’ve completely tied your fortune to these dependencies that you don’t own and don’t control.
Perhaps you think I’m exaggerating, or speaking from a purely academic point of view. Let me assure you — I have dozens of examples of clients who completely snookered themselves by embedding third-party code too tightly into their app. Here‘s just one recent example…
A former client of mine built their app using a Backend-as-a-Service provider owned by Facebook, called Parse. They used a JavaScript client library provided by Parse to consume the Parse service. In the process, they tightly coupled all of their code — including the “secret sauce” code — to this library.
Three months after my client’s initial product launch — just as they started getting some good traction with real, paying customers — Parse announced it was shutting down.
Now instead of focusing on iterating on their product and growing their customer base, my client had to figure out how to either migrate to a self-hosted, open-source version of Parse, or replace Parse completely.
The disruption this caused for a young, fledgling application was so huge that my client eventually scrapped the app entirely.
Balancing the good and the bad
Several years ago, my go-to solution for overcoming the risks while retaining the benefits of third-party-libraries was to wrap them using the Adapter Pattern.
Essentially, you wrap the third party code in an adapter class or module that you’ve written. This then works to expose the functions of the third party libraries in a manner that you control.
Using this pattern, if a third-party library or framework changes, or goes away, you only have to fix a bit of adapter code. The rest of your app stays intact.
This sounds good on paper. When you have self-contained dependencies that only provide a few functions, this will do the trick. But things can get ugly fast.
Can you imagine having to wrap the entire React library (including JSX) before using any of it? How about wrapping jQuery, or Angular, or the Spring framework in Java? This quickly becomes a nightmare.
These days I recommend a more nuanced approach…
For each dependency you want to add to your codebase, evaluate the level of risk it will introduce by multiplying two factors:
The likelihood that the dependency will change in a material way.
The amount of damage a material change to the dependency would do to your application.
A third-party library or framework is less likely to change when some or all of the following things are true:
It has been around for several years and has had several major releases.
It is widely used by many commercial applications.
It has the active support of a large organization — preferably a household name company or institution.
A third-party library or framework will do less damage to your application when some or all of the following things are true:
It’s only used by a small portion of your application, rather than being used throughout.
The code that depends upon it is not part of that “secret sauce” I talked about earlier.
Removing it requires minimal changes to your codebase.
Your entire application is very small and can be rewritten quickly. (Be careful with this one — it’s rarely true for very long.) The riskier something is, the more likely you should be to wrap it or avoid it altogether.
When it comes to the code that is really central to the value proposition of your application —your “secret sauce” — you need to be extremely protective of it. Make that code as independent as possible. If you absolutely need to use a dependency, consider injecting it rather than directly referencing it. Even then, be careful.
Sometimes this means saying “no” to a third-party library you think is really cool, or that you really want to use for one reason or another. Be strong. Trust me, it will pay off. Just ask all those people who invested heavily in the very first release of Angular, or my former client who used Parse everywhere. It’s no fun. Believe me.
Speaking of fun, take a look at this…
The image above is the dependency graph for an application called TinyTag Explorer.
Generating a dependency graph for your existing apps is a great way to understand the level of risk being introduced by your dependencies. I’ve put together a list of free tools for generating graphs similar to the above in a variety of languages including JavaScript, C#, Java, PHP, and Python. You can get it here.
Help me help others
I want to help as many developers as I can by sharing my knowledge and experience with them. Please help me by clicking the ❤ recommend button (green heart) below.
Finally, don’t forget to grab your list of free dependency graph generators here (link in original article).
Austin had a biology degree, a poor GPA, and a job in the medical field, but he wanted to transition into tech. He had no experience, but he figured out how to gain it quickly and landed offers from his dream companies. In this episode, he shares his advice and methods so that you can do the same.
Written and read by Austin Belcak: https://cultivatedculture.com
Original article: https://fcc.im/2LydTlZ
Learn to code for free at: https://www.freecodecamp.org
Intro music by Vangough: https://fcc.im/2APOG02
Transcript:
In this episode I’ll show you how to quickly gain experience in any field, as well as how you can leverage that new experience to land job offers in that field.
I personally used this strategy to transition from the medical field — where I was working in hospital operating rooms — to the tech industry, where I received offers from Google and other tech companies (along with a 200% raise).
Myths about things you DON’T need when switching fields
Before we dive in, I think it’s important to address a few “myths” about changing industries:
You don’t need an extensive network of contacts. In fact, you don’t need any contacts at all — you can make them all on your own.
You don’t need a degree in the field you want to switch to. Perception is reality, and results speak volumes when it comes to perception. They are worth more than any degree or previous job title. More on that later.
You don’t need money. Everything you need to know can be learned for free. In fact, I’m going to show you how this process can actually help you generate a second stream of income.
Next, I’m going to outline the exact steps I used to land a job in a totally different industry so you can make it happen for yourself.
Part 1: Painting a picture of the perfect candidate
The good news about entering a completely different field is that you are a blank canvas. You can choose your skills and mold yourself into the perfect candidate.
What does perfection look like?
In order to become the ideal candidate, we must first understand what “ideal” looks like in the eyes of the people who will be hiring you. There are two ways to accomplish this:
Job descriptions
Job descriptions are essentially resumes in reverse. They spell out the exact skills you need in order to be successful in that particular role. That sounds obvious, but we are going to be looking at this from an atypical lens.
Let’s take a look at this Growth Marketing Analyst role that I grabbed from Facebook’s site:
Responsibilities
- Leverage data to understand our products in depth, identify areas of opportunity, and execute projects to drive growth and engagement of Facebook users. - Drive projects focusing on new user growth, mobile usage, and revenue — working closely with design, product, engineering, and data teams. - Work both on core Facebook products like news feed, notifications, and mobile, and offsite marketing channels like SEO, SEM, and email. - Use tools like Hadoop/Hive, Oracle, ETL, R, PHP, Python, Excel, MicroStrategy, and many other internal tools to work efficiently at scale.
Minimum Qualifications
- BS or MS in Engineering, Computer Science, Math, Physics, Statistics. - 1+ years experience with SQL. - 2+ years of quantitative or statistical analysis experience. - 1+ years of experience managing a project. - 1+ years of experience in marketing, advertising or growth. - Ability to process and analyze data sets, and interpret them to make business decisions. - Communication skills and ability to manage a project or product.
Preferred Qualifications
- Software development experience. - Internet Marketing experience. What do you see here? What does the ideal candidate look like? What do they need to get hired?
My guess is that you’re thinking, “Ok, they need a degree in computers or math. Then they need at least two years of experience coding and managing projects at a company.”
Well, here’s what I see:
Facebook is looking for someone who understands how to identify trends/patterns within big data that will have a direct impact on revenue. That person also has enough knowledge of programming to efficiently make those discoveries and present them in a simple, concise fashion.
The main issue a lot of people have is that they think the only way to get “experience” is to work at company or have fancy degrees. This is one of the biggest myths when it comes to job searching.
In order to understand it, let’s take a step back and think about why companies hire.
They want someone who will come in and have a large, positive impact on their bottom line.
Someone could have a PhD in Computer Science and be fluent in all of the programming languages mentioned above, but if they lack the ability to clearly convey results, the company isn’t going to benefit.
On the other hand, someone who may not have a degree or total fluency but understands how to find impactful insights and presents them in a concise, actionable manner is extremely valuable.
Your goal is to become that second person.
Informational interviews
In addition to combing through job descriptions, it’s equally important to get in touch with people who work in the industry.
They will be able to help you prioritize the skills you found in those job applications, as well as give you some inside info on the intangibles (nuances of the hiring process, putting you in touch with their contacts, etc.).
I’ve found that the best way to make this happen is by leveraging LinkedIn’s advanced search filters.
You can search for people at specific companies, with specific titles. If you have LinkedIn Premium, you can even search for people who used to work in your industry and now work in your target industry — or even at your target company.
Then you can use this email script to reach out:
Subject: Quick Question
Hi [Name],
My name is Austin and I currently work at Cultivated Culture. I was browsing through LinkedIn and came across your information — I hope you don’t mind me reaching out of the blue here.
I saw that you have extensive experience in Facebook’s Growth Analytics vertical and I’m very interested in learning more about that space. I would love to have the opportunity to run some questions by you, as well as tap into any advice you may have given your knowledge of the industry.
I know that your time is extremely valuable so please don’t feel to need to respond in depth. If you do have 5 minutes to chat, I would really appreciate it.
Best,
Austin
When they agree to a meeting, you’ll want to prepare some questions. They should focus on:
Identifying which skills are the most crucial for performing daily activities (this will allow you to prioritize)
Providing some background on how that person got to where they are (you’d be surprised at how many people came from other industries)
What they would do if they were in your shoes — trying to get this job with little to no experience in the field
Here are those bullets in question form to help get you started:
I’ve been doing some research and it seems like [Skill 1] — [Skill 3] are common in the space. Which of these do you think is the most crucial to success?
I was looking through your LinkedIn and saw that you came from [Previous Role/Company]. How did you initially get involved in this industry and how did you end up at [Current Role]?
Let’s say you were in my shoes — you’re new to the industry and don’t have too much experience. How would you go about getting your current job? What specific steps would you take?
Bringing It All Together
Now you have an understanding of the skills that you need, where they stand in terms of priority, and a roadmap from someone who has/had the role you want.
Next, you need to build a foundation with those skills and use them to generate results that directly align with the company’s goals for that role.
Part 2: Nailing The Basics (On The Cheap)
Over the next month or two we’re going to focus on building a rock solid understanding of the basics needed for the skills you identified above.
For now, the best ways to do this are by reading books, taking courses, and creating a sandbox you can use to test your knew knowledge.
Reading Up (For Free)
Books are a fantastic way to understand the basic concepts of a specific subject. They also happen to be very easy to get for free.
Remember that public library your parents wanted you to check out when you were a kid? It’s actually still there! Amazing, right?
The good news for you is that even public libraries have caught up with the times and now carry ebooks. You can borrow them for free like any other book, but they will be sent directly to your phone so you can read them anywhere, anytime. All you need to do is install the Kindle app (which you can get for free for iOS and Android).
In order figure out which books to read, I would Google “best books on [subject]” or go ask some folks on Quora.
Taking Courses (For Free-ish)
While books are giving you the 30,000 foot view of your topics, courses will help you figure out the nitty gritty. They are a better way to learn the actual skills because they tend to be interactive and are updated regularly.
One of the best resources for our purposes is Coursera. Coursera aggregates courses from the best professors at the best schools in the country (I’m talking Princeton, Stanford, Harvard — they don’t mess around).
These courses are fantastic because they are structured like an actual course you would take in college. They have videos, but they also have tests, projects, and forums where students can collaborate. This is key because it helps make the course “sticky” due to the fact that you are committing to all the above rather than just watching a few videos.
Best of all, at the end of the course, you can receive a certificate stating that you passed the course. It will even have the seal from that university on it! It does cost ~$49 but it’s well worth it because you can put that right on your resume:
Subscribing To Industry Blogs & Newsletters
Next, you’re going to want to sign up for some newsletters.
Blogs stay in business by having the highest quality, most up-to-date information and getting it out there as quickly as possible. This is the easiest way for you to stay on top of current events in the industry while picking up tons of knowledge along the way.
You can find them using the same method you used to find the books — Googling and hitting up Quora.
Additionally, try to find a niche blog as they tend to have highly detailed information on your topic. Here are some examples:
SEO: The 10 Chapter Beginner’s Guide To SEO
Content Marketing: The Advanced Guide To Content Marketing
Facebook Ads: The Ultimate Guide To Making Money With Facebook Ads
Free Resources (Where Applicable)
Many industries and fields have a ton of free resources out there to help your learn. For example, if you’re an analytics person — Google Analytics is completely free to set up. Additionally, Google offers an entire course on the platform for free.
If your plan is to break into the development field, you’re already in the right place. Free Code Camp is one of many great resources that will help you learn the basics of programming for free.
Be sure to do a thorough search on your industry. Chances are good that free training resources exist.
Bonus Pro Tip: Google Alerts
Google Alerts are an awesome way to save yourself hours that you would have spent searching for articles on specific topics or companies.
You can set them up for anything that you could feasibly search for in Google, but probably want to stick with the salient points like a specific industry, certain skills, the company you want to work for and Beyonce.
Then, every day, Google will crawl the web and find the most relevant (and worthy) articles on your specific subjects and deliver them straight to your inbox.
You can sign up for Google alerts here.
Part 3: Getting Paid To Hone Your Skills
Yup, you read that right. We’re going learn how to have someone pay you to learn the skills you need to change industries.
Building Credibility & Real-World Results
Now that you understand the basics of these skills, it’s time to really develop them.
I’ve found that the best way to truly learn something is by doing it. I can’t think of a better way of “doing” than selling your skills for some cold hard cash.
Rapidly Develop Your Skills By Freelancing
While it may seem like a daunting task, it’s fairly easy to get started in the freelance world even if you have no prior “experience.”
As Tim Ferriss says, the definition of an expert is someone who knows more than the person they are dealing with.
There are two ways of going about finding clients when you’re starting out — freelance aggregator sites and traditional cold outreach:
Upwork (A Freelance Aggregator)
Upwork is a community where business owners come to find freelancers for everything under the sun.
The beauty of Upwork is that it removes the need for you to invest a lot of time in marketing yourself. It is an inbound site meaning your services will show up to people who are already looking for that particular service, making them more likely to hire. That may also be attractive to someone who is uncomfortable with a traditional sales process.
The trade off is that, while you save time, Upwork charges a hefty fee for saving you that time. For our purposes, that’s not too terrible because you’re mostly in it for the learning while the money is icing on the cake.
I recommend using Upwork if you’re having trouble managing the sales process on your own, or if you’re just starting out and need to build up a few success stories.
If you really want to expand your initial reach, check out Hubstaff’s comprehensive rundown of Upwork alternatives and get yourself on multiple platforms.
Cold Outreach
The second option, and the path that I recommend, is handling the sales process on your own. That way you get to keep 100% of the revenue and remove the middle man.
This can be a bit tougher initially because those businesses may not be actively looking for your services and if you don’t have much sales experience, the learning curve can be steep.
In this section we’ll through the steps that I used to land my initial clients, build success stories and then use those results to expand my portfolio (and increase my revenue).
Define Your Niche
Our first step on our freelancing journey is defining our target prospect. Most articles out there tell you that when you start a business your niche should be laser-focused, like Male Golfers, Ages 47–54 who suffer from back pain.
While I agree that it should be targeted, it’s not reasonable to expect that you’re going to know your target audience in that level of detail before you’ve even worked with a single client.
You’ll begin to hone in on your ideal niche as you go, but for now we’re going to use the following process to determine our target audience (actually, we’re going to choose 3).
Defining Your Initial Target Prospect
Start by making a list of 50 people that you know. It can include everyone from your best friend’s parents to a connection on LinkedIn you met at a conference last year. The only criteria they need to meet is that you must feel comfortable reaching out to that person.
Add these people into this spreadsheet I created for you along with their company type and industry (ignore the email column for now, we’ll get to that later):
Now that we have our people, let’s take a look at their company type and industry. Which industries and company types match up best with your knowledge and skill set?
If we take my list, I know that my marketing skills could benefit a tech company, but they could also benefit a health & wellness startup looking to build an audience. Additionally, know that it’s much easier to sell into startups than corporations when you’re first starting out. With that in mind, my ideal mix is:
Company Type: Startup
Industry: Advertising, Tech, Web Development & Health/Wellness
Now we have one “niche,” but my list here is only 10 people. I want you to try and find 3 different niches where one or more of your skills apply. Then I want you to assign each niche a number and label your spreadsheet (you can also highlight too if that helps):
Awesome! You just defined 3 areas that you can sell into and you have your first set of prospects.
Key Takeaway: Don’t get caught up in finding a super-specific niche before you’ve ever booked a client. Keep things broad, take on a few initial clients and your niche will narrow over time.
Create Time & Be Consistent
I have spent a lot of time reading about success. I’ve also spent a lot of time building businesses in hopes of chasing it. After sifting through the thousands of pages and lessons, I found that one thing had the greatest influence on whether I was successful or not:
Consistency
The ability to work on something every single day — regardless of how you feel, how crazy your job is or how many friends tell you to go to happy hour — is the difference between succeeding and failing when you start a business.
In order to be consistent, you have to create time. Time that you know is not going to be interrupted. For me, that means waking up at 5:30am. For you, early may work, or maybe late at night is your thing. Whatever you do, make sure that it’s a natural fit for you. You don’t want to feel like you have to drag yourself to do this, otherwise it will never work.
Put It In Your Calendar
Start by opening up your Google calendar and finding a 1.5 hour block of time that works for you at least 5 days every week (yes, that includes weekends).
Create an event and set reminders for 1 hour before and 15 minutes before. Mark that time as “busy” on your calendar:
Hold Yourself Accountable
Now it’s real — ink on paper. However, your calendar invite isn’t going to get you out of bed the day after you went out a little too hard or help you say no to those free concert tickets to see Kanye. If we truly want to stick with this, we’re going to need a little outside help.
I personally recommend StickK because I’m a competitive person who doesn’t like losing. StickK basically lets you bet yourself that you will start your business.
You put down a dollar amount (I recommend $100) and you set a goal. Then you’ll be assigned a “referee” who will hold you accountable. If you complete your goal, you get your $100 back. If you don’t, that money is donated to the charity of your choice.
I can personally tell you that the thought of $100 being yanked out of my wallet has helped me push through many hangovers.
Getting Your First Client
Now that we’ve got our service and our niches nailed down, it’s time to get some paying customers.
Since we don’t have much in the way of a portfolio, we’re going to want to start by aiming for a prospect where we have a personal connection. Then we’re going to leverage the current experience that you have to land the deal.
Let’s head back to our spreadsheet and look through the list of names that we highlighted in each niche. I want you to go ahead and rank each of these people in the order of how likely they are to help you. Then we’re going to reach out to each from top to bottom.
Finding Emails
If you don’t already have their email, you can easily find it by using VoilaNorbert or FindAnyEmail.net. Once you have it, go ahead and plug it into your spreadsheet for future reference.
Reaching Out
Now we’re going to reach out to our contact and ask them if they can help us set up a meeting. Here is the exact email template you can use for that:
Subject: Quick Question
Hi [Name],
Hope you’re doing well! I wanted to let you know about a business I’m starting up called [Company Name]. It’s aimed at helping companies [Insert Value Prop].
Most recently we were able to [Insert Success Story]. I did a quick audit of [Prospect’s Company] and I have some ideas that I’d love to share with you. Could you help me get in touch with the correct person? Either way, would love to catch up soon!
Best,
[Your Name]
All you need to do is fill in their name, your skills and press send.
I would also highly recommend getting an email tracker such as Hubspot (free) or Yesware (better, but costs $). These will allow you to see if your prospect read your message and help you determine whether or not to follow up.
If they open your email once, that trail is dead. However, if they open it multiple times across multiple days, feel free to follow up with them after 4–5 business days. I have personally followed up with people 8–10 times before eventually getting a response that led to a deal.
Preparing For The Meeting
Once the meeting is set, we want to make a compelling case for why this company needs your services. The best way to do that is using what I like to call The Audit Technique.
It’s extremely simple and effective:
Carefully review our prospect’s current set up (website, social media, content, copy, health — whatever fits your service)
Identify as many issues/improvements as we possibly can
Determine the measurable impact of fixing these issues
Share specific strategies for solving 2–3 of the issues and then showcase the potential result of fixing all of them
Tell them that, regardless of whether or not they hire you, they can keep the audit report
Boom! Easy.
Closing The Deal
In the beginning, most of your prospects aren’t going to be seeking you out. That means that you have to convince them that your services will be worth their time and money. The best way to do that is via the following framework:
1. Address
We’re going to start off the meeting by addressing the issues that you found with their site. Don’t be too critical. The goal here is to make them feel good about their business while also letting them know that there is a lot of untapped potential out there.
Hand them your Audit Report and walk them through each of the issues. Explain what is happening, why it’s hurting their business, and what the solution is.
2. Illustrate Potential
Once you’ve explained the issues, you want to clarify what the prospect is missing out on. The more quantifiable this is, the better. For example:
Your call to action on the site isn’t strong enough. Your conversion rate is probably 5% lower than where it should be. If your site gets 30,000 visitors a month, that’s 1,500 people we’re not capturing!
Instagram accounts like yours typically see 100–300 followers every day, but you are only netting 20–30. If you implement the strategy I laid out here you should see an immediate boost within a few days. That could mean an additional 2,400 followers each month!
Show them how this is impacting their bottom line. Walk them through the math:
You: What is your typical sales conversion rate from your email list?
Prospect: Hmmm, it’s around 3%
You: Wow, that’s pretty good! And how much profit do you make from each sale?
Prospect: Typically we net around $150 per sale.
You: Awesome. Based on my audit, I’m seeing that we’re missing out capturing an additional 3–5% of your site’s traffic due to poor copy and CTA placement. I poked around and saw that your site gets ~30,000 visitors per month which means that we could be capturing an additional 1,500 people every month. Based on the numbers you just gave me, that’s $6,750 per month!
If you charge $2,000 per month, that’s a no brainer for your prospect. Any business owner would pay $2,000 if they knew it would result in an incremental profit of $4,750 — and you just made $24k this year!
Ask Them For The Sale
Now that you’ve proven out the value — ask them for the sale:
Tell them that the Audit Report is theirs to keep regardless
Reiterate the potential opportunity they have to gain
Outline what next steps look like for hiring you
Ask them if they want to move forward
Chances are good that they’ll want some time to think about it. No worries at all — drop note on your calendar to follow up with them 72 hours later.
You just booked your first client!
Now I want you to rinse and repeat this process for everyone on your spreadsheet. If you can get your foot in the door, you can expect about a 5%-10% close rate.
Consolation: Offering Your Services For Free
Since we’re mostly in this for the learning, this is great option to consider if the above process isn’t initially working out.
I found that it was much easier to land clients when I had success stories I could speak to. It’s important to figure out a way to get some results before you go all-in on pitching for money.
You can reach out to businesses, same as above, and offer your services for free. This takes away all of the risk for the company, making them much more likely to agree, while allowing you to get right to the learning and create real-world results.
Remember, we’re in this to try and find a job we love that pays us what we deserve. That is worth a LOT more than a few paid freelance contracts. If the freelancing turns into a source of revenue, that is icing on the cake.
Leveraging Your Results To Land Your New Job
There you have it — a step-by-step plan to build the experience you need to land a join a different industry. Now it’s time to get out there and get your foot in there door.
First up, edit the resume.
Add Your Experience To Your Resume
As soon as you have some concrete results under your belt, you’re going to want to add them straight at the top of your resume.
This will be the first thing that your potential employer will see and it helps remove any doubt about your qualifications.
Way back up at the top of the article we took a look at why companies hire. The qualifications of X years is just an arbitrary number set by the company to make them feel like they are hiring someone who can do the job.
Adding in your freelance experience not only shows that you can do the job, but also that you have an understanding of how to run a business. This knowledge is extremely valuable to an employer, especially for a technical hire because technical folks typically get tunnel vision and have trouble seeing how their work relates to the larger picture — making money.
Identify Influencers At Your Target Company
Now that you have the relevant experience, you’re going to want to start connecting with influencers who can help refer you into your dream job.
I outline that exact process in my article How To Land A 6-Figure Job In Tech With No Connections so be sure to check that out when you’re ready.
Some people have very strong coding instincts. They can solve problems just by looking at them, and feel like rockstars. But being a rockstar coder can only get you so far. You need one other crucial element: discipline. In this podcast, Bill shares his disciplined approach to writing code and to work in general.
Written by Bill Sourour: http://twitter.com/billsourour
Read by Abbey Rennemeyer: http://twitter.com/abbeyrenn
Original article: https://fcc.im/2IzwWdH
Learn to code for free at: https://www.freecodecamp.org
Intro music by Vangough: https://fcc.im/2APOG02
Transcript:
I wrote my first few lines of code almost 32 years ago, when I was 6 years old. I developed very strong coding instincts. I could look at any problem and immediately know how to solve it, just by intuition.
By the time I started coding the web for a living, I felt like a rock star. I found and fixed bugs faster than any of my co-workers. My team started assigning me all the most challenging features and the most nagging bugs. They even started calling me a “wizard.”
But following your intuition can only take you so far. I hit a plateau. And no amount of coding instinct was going to push me past it.
The trouble with trusting your gut
Unfortunately, intuition as a technique for learning and problem solving doesn’t scale very well. When you rely on instinct and intuition alone, you get a curve that looks like this (See original article for graph).
Of course, you can choose to accept your limits and only ever deal with problems below the line. This will indulge your “rock star coder” fantasy, but it will quickly begin to limit your growth and your career. Plus, it’s boring.
As I pushed myself further and further ahead in my career — and started to really challenge my own abilities — I began to notice a disturbing trend. I was no longer the fastest kid on the block.
I had always known that I’d eventually run into people smarter and more talented than me. (My delusions of grandeur were still grounded in reality. I’m no genius.)
But when I looked around, I realized that some of the people beating me were not using a superior intellect or some sort of innate gift for code. They just had a secret weapon that I sorely lacked: discipline.
It turns out that a consistent, repeatable, methodical approach to learning and problem solving will eventually outperform any natural gifts — or instincts — that you may have developed.
Let’s tool up those problem solving abilities
Regardless of who you are, how much passion or natural talent you have, you will eventually hit a hard ceiling. I’m going to share with you a few techniques that will dramatically improve your disciplined problem solving abilities.
I’m assuming that, if you have a debugger, you’ve already run it, Googled the output, and had no luck.
I’m also assuming that if the problem was reported by someone else, you have been able to reproduce the problem. This second assumption is a big one. If you can’t reproduce the problem, then that needs to be your first step.
You need to compare the context and environment in which the problem occurred to the context and environment in which you are trying to reproduce it. Start eliminating any differences you can, one by one, until you can reproduce.
Once you can reproduce the problem, and after the debugger has failed to be of any use, you can try the following disciplined approaches.
RTFM
Read the documentation, you fool! (Admittedly this isn’t what RTFM stands for exactly, but there may be children reading.)
Actually read it — more than once if you need to. Don’t just skim it looking for something you can copy, paste, and pray will work.
The problem is you want an answer fast. You want that thrill of victory. But you’re not willing to put in the work. So slow down. Take a breath. Grab a coffee. And read the relevant documentation all the way through.
If you have no documentation, consider creating some, then sharing it with others after you’ve fixed the problem.
Test Your Assumptions
If you expect something to work and it doesn’t, it’s because you’ve made a bad assumption somewhere along the way. Take an inventory of your assumptions and try to prove that each one is true.
Start with the most basic assumptions that can be quickly tested. Is the server actually running? Is it connected to the network? Is everything spelled correctly? Are all the brackets and semicolons in the right place?
If you don’t start with the simple things, and it does turn out to be one of these things, when you finally figure it out you will want to jump out a window. So save yourself the headache.
Disassemble and Reassemble
Remove components from the solution until it starts working again, then put the components back one-by-one in order to find the broken piece.
This feels tedious and scary, but it is one of the most effective, disciplined ways to find the cause of a bug in your code. Make sure you have a backup before you start though, in case you accidentally end up with Humpty Dumpty code (code that you can’t put back together again).
By the way, if you find yourself in a situation where you don’t know how to reassemble the code back to how it was, this is an indication of a potentially bigger problem: you don’t understand the codebase you’re working with. That’s bad bananas, my friend.
If you’re on a tight deadline, seek help immediately from someone who understands the codebase better than you. If no such person exists, dig in for a long night, and prioritize getting to know and understand how this code works, so that you can fix it.
Eliminate Variables
Anything that can change from one trial to the next should be made to remain static while you’re debugging. You can’t hit a moving target. This is where Test Driven Development (TDD) comes in handy. If you’re using TDD, then you should have some mock objects at your disposal.
Mock objects are simulated objects that mimic the behavior of real objects in controlled ways. A programmer typically creates a mock object to test the behavior of some other object, in much the same way that a car designer uses a crash test dummy to simulate the dynamic behavior of a human in vehicle impacts. — Wikipedia
If you didn’t do TDD, then you’ll need to mock out any moving parts now, so that you can find the bug under stable conditions.
Here’s a tip: if you mock an object and the bug suddenly goes away, then the bug is likely in the object you mocked.
Use the “Saff Squeeze”
There’s a technique called the “Saff Squeeze” — named and popularized by Kent Beck — that is sort of a cross between the two ideas above.
He describes it this way:
“To effectively isolate a defect, start with a system-level test and progressively inline and prune until you have the smallest possible test that demonstrates the defect.” — Kent Beck
So instead of formal mocks or code disassembly, you simply add the body of the functions that you’re testing into the test itself, then move the assertions down until the bug goes away.
This has the added benefit of leaving you with smaller, more specific tests.
Edit: Thanks to Jim Balter for pointing out this link to a good example and explanation of the Saff Squeeze.
After You Fix It, Break It and Fix It Again
Never leave a bug until you fully understand how you fixed it. You should be able to reproduce the bug and fix it again at will.
I can’t stress this enough. If you fix a bug and you’re not sure exactly what caused it or how you managed to fix it, that bug will come back to bite you at the worst possible time.
What About Those Instincts?
Now that you’ve learned these techniques, does that mean you should always use them first instead of relying on your instincts? No. Absolutely not.
What I recommend is that you give your instincts a time box in which to succeed. If you have a strong hunch about what the problem might be — and you can test your hunch quickly — do that first. If the bug is below the green line in the chart above, chances are that your instincts will be the fastest path to a solution.
Once you’ve quickly tried your first or second hunch and been wrong though, stop the shotgun approach and start doing things methodically.
Having both instincts and discipline will make you one of the top coders on any team.
To help you even more, I have put together a free PDF list of my five favourite code refactoring techniques — that lead to fewer bugs — get it by clicking the link in the original article.
You’ve heard it before: “There’s no such thing as a free lunch.” We're taught so from an early age. But history has shown: you often can get something for basically nothing. In this episode, Quincy discusses how we can all enjoy the abundance economy and - for all intents and purposes - get a free lunch.
Written and read by Quincy Larson: http://twitter.com/ossia
Original article: https://fcc.im/2wxPlpS
Learn to code for free at: https://www.freecodecamp.org
Intro music by Vangough: https://fcc.im/2APOG02
Check out the book Abundance: The Future Is Better Than You Think by Steven Kotler and Peter H. Diamandis
Transcript:
You’ve heard it before. Maybe you’ve even said it. “There’s no such thing as a free lunch.”
“You can’t get something for nothing.”
“Somebody has to pay.”
People recite these sayings with confidence, as though they were quoting Newton’s Laws of Motion.
But history has shown: you often can get something for basically nothing.
And even when somebody has to pay, that somebody doesn’t have to be you, and the amount doesn’t have to be very much at all.
In some cases, the benefits so vastly outweigh the costs that it is — for all practical intents and purposes — a free lunch.
How we eradicated Polio from the face of the Earth
In the early 1950s, the US was recovering from its worst Polio epidemic ever. Thousands of children died from this virus, and many more suffered life-long paralysis.
No one was safe from this horrible disease. Even US president Franklin D. Roosevelt contracted it at age 39. He spent the rest of his life in a wheelchair.
Enter Jonas Salk, a medical researcher who had mainly studied flu viruses before turning his efforts toward Polio.
Dr. Salk spent 7 years assembling a team of researchers and working to develop a Polio vaccine.
He conducted the most extensive field test ever, involving what historian Bill O’Neal says were “20,000 physicians and public health officers, 64,000 school personnel, and 220,000 volunteers.”
The vaccine was a success. So Dr. Salk set to work immunizing everyone on Earth. He pushed the marginal costs of the Polio vaccine as low as possible — to just the raw materials necessary — by forgoing any financial benefits his intellectual property would have brought him.
When asked about his patent, he said, “There is no patent. Could you patent the sun?”
Dr. Salk stared down a massive problem and threw himself into it with everything he could, without any aspiration for personal gain. And in the process, he and his colleagues basically wiped out one of the worst diseases ever.
Today, everyone’s life is better off as a direct result of this one massive free lunch.
“The reward for work well done is the opportunity to do more.” —Dr. Jonas Salk
Free lunches are important
Before I run through some modern-day examples of free lunches, let me give you some background on myself, and why the notion of a free lunch is so important to me.
I run a nonprofit, open source community where you can learn to code, practice by building software for nonprofits, then get a job as a developer. Thousands of people have gotten developer jobs so far. And it’s free.
I was so committed to the idea of it being free that I put the word “free” in the name.
Free can mean both libre — free as in free speech, and gratis — free as in free beer. Just like the “free” in “Free Open Source Software” (FOSS), the “free” in “freeCodeCamp” means both of these.
But still, every day I encounter people who are skeptical. They tell me they don’t use freeCodeCamp because “it sounds too good to be true.”
“There’s no way all this can be free,” they say. “I’ll sign up and give you my email address, and only then will I find out that I need to pay $20 a month, right?” Or: “You’re free for now, but soon you’ll throw up ads and paywalls, like everybody else does.”
Well, I’ve said this publicly a hundred times, and I’ll say it publicly again: freeCodeCamp will always be free.
We operate on the fringe of capitalism. The frontier where marginal costs asymptotically approach zero, and the very laws of classical economics begin to unravel. A place called the abundance economy.
And we’re not alone.
Low overhead engineering with lichess.org
Meet Thibault Duplessis, the founder of lichess.org — the second most popular chess website on the planet.
As of a year ago, lichess had 78,000 unique daily visitors, who play a total of 260,000 games of chess each day.
Thibault has no employees. He doesn’t even work on lichess full-time. He still has a job at a development consultancy.
Lichess’s main competitor, Chess.com, is a privately-held behemoth that makes millions of dollars each year off of banner ads and premium membership up-sells, then spends that money acquiring their competition.
Contrast this with Thibault, who has open-sourced lichess’s server code. He has promised that lichess will be free forever, and that it will never show ads.
But wait — how can he do this?
Because of the nature of modern web applications, and the economics of their near-zero marginal costs.
Despite lichess’s complexity — and the scale at which it operates — Thibault’s server costs are a mere $416 a month.
This cost is covered by merchandise and donations from his grateful users, who increasingly include some of the best chess players in the world.
How Craigslist covers costs by charging only 0.1% of its users
Remember classifieds?
People used to pay a dollar per word for tiny ads that appeared in the backs of newspapers, sandwiched between other ads.
Then, 20 years ago, Craigslist utterly disrupted classifieds. They provided a directory of ads online, for free.
It was searchable. You could use as many words as you wanted, and include pictures. You could repost your ads as many times as you wanted, in as many nearby cities as you wanted.
But if placing ads on Craigslist was free, how did Craigslist make money?
Well, if you asked a random Craigslist user, they probably wouldn’t be able to tell you. Most people just assume that Craigslist is a nonprofit, supported by donations or something.
But Craigslist made $400 million last year.
They did it by charging to post in a few key categories within a few key cities. If you want to list an apartment in New York City, or a job in San Francisco, you have to pay Craigslist a small fee.
This means that less than one in a thousand people who use Craigslist actually pay any money to do so. Those real estate agents in New York City and those recruiters in San Francisco are paying for everyone else’s free lunch.
Craigslist doesn’t have investors. It keeps things simple. It has a small team of about 40 people.
Craig still works at Craigslist. He handed over the role of CEO to his long-time friend so he could focus on doing what he loves: providing support for Craigslist users around the world.
Like the other people mentioned in this article, he doesn’t seem to care about money. From what I can tell, he donates most of his money through his charity CraigConnects. And he spends his downtime advocating for causes he cares about, like supporting veterans and helping more women start their careers in tech.
Crowd-sourcing contributions with Wikipedia
Before Wikipedia, the most popular encyclopedia was written by paid experts, and printed in massive books. The Encyclopaedia Britannica was so expensive that they wouldn’t even tell you its price in their TV spots. (It cost $1,400.)
Jimmy Wales — Wikipedia’s visionary leader — had a better idea. He leveraged the power of the internet and the wisdom of volunteer contributors. And he made it free.
The number of volunteer-contributed articles on Wikipedia exploded. It quickly surpassed traditional encyclopedias in the scope of its content.
Instead of waiting for a new physical edition to hit the press, Wikipedia editors could instantly publish updates to articles. Wikipedia was so up-to-date that many people started using it for news on current events.
Traditional encyclopedias were quickly backed into a corner. They were paying expert writers and editors to create their content. Surely this resulted in more accurate information than Wikipedia’s volunteer-driven free-for-all.
But in 2005, a major academic journal published an analysis comparing the factual accuracy of Wikipedia versus the Encyclopaedia Britannica. It found:
“Jimmy Wales’ Wikipedia comes close to Britannica in terms of the accuracy of its science entries, a Nature investigation finds.” — The abstract from Nature’s analysis
In a last-ditch effort, The Encyclopaedia Britannica pushed back, but Nature upheld its finding.
This was the final blow to the encyclopedia industry, which had flourished for decades by selling stacks of books door-to-door to guilty parents.
A decade later, Wikipedia is now the 6th most visited website on the planet. And covers its operating costs through more than $70 million in donations each year from grateful patrons.
But despite all of Jimmy’s accomplishments, people seem to be much more preoccupied with his money. Or rather, his lack-there-of.
Here’s what you get when you type “Jimmy Wales net worth” into Google:
Below this result, Google shows you pictures of people who started other large websites. Each of them has a net worth that’s five orders of magnitude larger than Jimmy’s paltry $1 million.
People have a hard time accepting that someone would set out to build something as important as Wikipedia without bothering to make money out of it.
One person went so far as to ask straight up on Quora: “Is Jimmy Wales rich?”
Jimmy responded:
“By any sane standard of measurement, yes, of course I’m rich. Nearly half of the people on earth live on less than $2 a day. I spend more than that on my cellphone bill.”
There’s so much more to life than money.
Why are people so preoccupied by money, and the net worth of famous people? Because they’re operating in a scarcity mindset.
They are so preoccupied by the risk of not having enough that they can’t see the real risk: missing out on the potential for so much more.
The traditional scarcity mindset approach to creating value at scale goes something like this:
Figure out a problem you can solve for a large number of people
2a. If people will pay for your product, sell it to them, then re-invest the profits into growing your business (bootstrapping)
2b. If your solution isn’t something people will pay for, raise a bunch of venture capital to fund development. Once it’s big enough, make money some other way — usually by selling ads.
But there’s an alternative. An abundance mindset.
This approach shrugs off concerns for basic needs (worst case scenario, I have to get a job in fast food) and instead focuses on upside potential.
When you apply an abundance mindset, you approach problems from a different perspective. You try to identify opportunities for free lunches.
Your approach to creating value at scale will look something more like this:
Figure out a problem you can solve for a large number of people
Keep costs low, fund development yourself, and ask for donations, sell merchandise, or find a few users with deep pockets who can subsidize everyone else.
This is how all of these organizations I’ve discussed here operate. And this is how they can always be free.
There’s no time for anything. At least that’s how it feels doesn’t it? No time to refactor that ugly code, no time to work on documentation, no time to actually live your life. But if you take the time to listen to this podcast, you’ll find yourself with more time for what’s important.
Written by Bill Sourour: https://twitter.com/BillSourour
Read by Abbey Rennemeyer: https://twitter.com/abbeyrenn
Original article: https://fcc.im/2rqbKAp
Learn to code for free at: https://www.freecodecamp.org
Intro music by Vangough: https://fcc.im/2APOG02
Transcript:
There’s no time for anything. At least that’s how it feels doesn’t it? No time to learn all the things you think you need to learn to stay ahead of the curve. No time to go back and refactor that ugly piece of code. It works (sort of) and there’s a deadline approaching. No time to write unit tests for everything. No time to write documentation or comments for the next guy who gets stuck maintaining what you wrote. No time to think. No time to breathe. No time!
Well… if you take the time to read this article, I promise you’ll find yourself with more time for what’s important.
I used to think that the only way to be a great developer was to work myself sick. My health, friendships, and family all suffered because of it. Understanding the following 5 truths about time management for a developer is what saved me.
1. You don’t need to learn every new thing in order to stay relevant.
There is no question that a good developer should always be learning, but where you focus your learning can make a huge difference in the amount of time it takes to stay on top of your game.
“The old thing is dead. Long live the NEW, about-to-be-old thing!”
First of all, don’t get suckered in by headlines on dev blogs that announce a new standard every 37 seconds. Most new technologies, frameworks, and features will never get any real traction and you’ll never need to know them. Those that do emerge will take a lot longer to gain adoption than the blogosphere — and the vendors who hock these new technologies — would have you believe. Companies are invested in their tech stack and, other than a handful of tiny tech startups, they can’t just turn on a dime. So, relax, your career is safe.
Focus your learning on three areas, in the following order of priority:
Fundamentals — It’s a lot easier to pick up new skills when you have a real command of the underlying fundamentals. For example, if you understand JavaScript deeply, you can master any new JavaScript framework in record speed. If you understand Object Oriented Programming deeply, you can master new object oriented languages quickly, too. Deeply learning the fundamentals will 10x your learning efficiency. Always focus on improving fundamentals above all else.
The latest version/feature of the stack(s) you use the most — There’s a stack of technologies that you probably use every day. These are the tools that will put food on the table for you and your family. When new versions of these tools are released, it’s worth investing the time to learn about them.
In-demand tech that is backed by market leaders — if a big, well established company like Google, Facebook, or Microsoft puts out something new and it starts getting some buzz, it’s worth looking into. There were a hundred and one JavaScript frameworks all vying for attention and then Angular and React showed up and wiped them off the map. I’m not saying there won’t be disruptors that come from nowhere and become the next big thing but, more often than not, no-name tech is just noise.
Learning time should be a part of your schedule. Set aside a specific amount of time for learning every day. It doesn’t need to be a lot of time, even 25 minutes of reading and experimentation every day adds up quickly.
2. Writing good code takes less time than writing bad code, BUT it doesn’t feel that way.
You probably feel like the time you spend on a new feature ends when you run the code and it appears to work. But that’s just the beginning of your time investment. Time spent on a feature includes time spent debugging that feature later and also time spent refactoring and working other code around any poor design decisions you made when implementing that feature. When you start to understand your time investment this way, it becomes obvious that, in the long run, fewer errors and better design are a worthwhile investment.
There are two things you can do that will reduce errors in your code and lead to better design.
Use test-driven development. Write the test first, then write the code that satisfies the test. This not only leads to less buggy code but also to better design, because when you have to structure code in a testable way, you end up making smaller, simpler functions that have fewer dependencies.
Use an iterative design approach. Don’t spend time trying to make code perfect before you’ve spent time trying to make the code work. You’ll never, ever get it right completely in your head. You have to get those fingers banging on a keyboard and produce code that runs and does what’s expected. The problem is that developers tend to make one of two common mistakes; either they spend too much time thinking and not enough time actually doing, or they don’t spend enough time improving their first solution. Follow the mantra first stated by Kent Beck: “make it work, make it right, make it fast” — and in that order.
3. Working 24/7 does NOT make you a hero. Managing expectations does.
This is the one that nearly killed me. I used to agree and commit to any crazy timeline my boss or client could come up with. I was afraid of saying “no.” I was afraid of letting anyone down. I would do whatever it took to deliver. I have literally slept under my desk, and pulled multiple caffeine-fueled 40+ hour marathon coding sessions.
At first I was a shining star. I would get a big pat on the back and I felt like a hero. But I set an expectation that was impossible to live up to. Working like that is unsustainable. Eventually, I started to burn out, get sick, and miss deadlines. I started getting a reputation as unreliable and inconsistent. It was bad news.
What I eventually came to understand, and what you should commit to learning too, is that the real heroes are the ones who are consistently reliable. They say what they’ll do and do what they say. The only way to be that kind of hero is to manage expectations.
You need to take control of the timelines so that you are always and without fail delivering high quality work exactly on time. This is incredibly difficult at first. It means having to say “no” and having to push back.
In the beginning, your boss or client won’t be thrilled by your resistance, but once you demonstrate that you are trustworthy and reliable, everything will start to change.
Over time, other developers will be late, deliver sloppy work, or burn out and become unreliable. Then you will become the real hero of your team. In fact, learning this made me one of the most in demand consultants in my market. I’ve built a stellar reputation for quality and timeliness, because I vigorously manage expectations.
4. Not all time spent “improving” code has the same ROI.
Spending time is an investment. Like all investments, it’s reasonable to expect a return on investment (ROI). You should be getting back at least as much — and hopefully more — value than you put in.
We talked about “make it work, make it right, make it fast.” It’s a good mantra but there is a trap: “right” does not mean perfect, and “fast” does not mean absolutely as fast as possible.
“Right” means that the code works consistently and is easy to refactor. “Fast” means that the speed of execution does not have a negative impact on the overall user experience. The most important thing is that your application feels fast to the user.
So, don’t waste time trying to shave time off a function that is barely used, or trying to save another few milliseconds on something that already runs faster than a human can blink (~300ms). And don’t waste time trying to refactor working, well-structured code because you just learned some new technique or approach that you’ve convinced yourself you suddenly have to go back and apply to everything you’ve ever done.
5. Scheduled down time makes you more productive.
This was a very hard one for me to learn and accept. How can you possibly be more productive when you’re not spending all your time producing? Well, it’s true.
According to Allison Gabriel, an assistant professor of management at Virginia Commonwealth University who studies job demands and employee motivation, “There is a lot of research that says we have a limited pool of cognitive resources. When you are constantly draining your resources, you are not being as productive as you can be. If you get depleted, we see performance decline. You’re able to persist less and have trouble solving tasks”.
Always working sets off strain reactions, such as stress, fatigue, and negative mood. These drain your focus and your physical and emotional resources.
The brain’s ability to self-regulate — to stay disciplined — wanes with each exercise of self-control during the day. It’s a loss of resources that must be replenished. Otherwise it becomes harder to stay on-task, be attentive and solve problems.
Your mind and body need down time, and they’re going to get it whether you like it or not. So, schedule that down time. Actually plan and put on your calendar real scheduled breaks. This will allow you to take down time without feeling guilty about it. It will make work-time easier to endure because you’ll know that you have a scheduled break right around the corner.
More help and resources
To help you even more, I’ve put together a list of free and useful resources (videos, tutorials and websites) that can help you better understand and implement the insights I’ve just shared with you. You can get it here: https://www.devmastery.com/signup/time/index.html
Austin was stuck in a job he hated. But given his non-traditional background and lack of Silicon Valley network, he knew he'd have to work extra hard to launch a career in tech. In this podcast, he details the steps he took to land interviews at Google, Twitter, and other prestigious companies that led to his dream job.
Written by Austin Belcak: https://cultivatedculture.com
Read by Abbey Rennemeyer: https://twitter.com/abbeyrenn
Original article: https://fcc.im/2F8uE2H
Learn to code for free at: https://www.freecodecamp.org
Intro music by Vangough: https://fcc.im/2APOG02
Transcript:
Shortly after college, I began chasing something many people want but few ever get: a job they love.
I left school with a biology degree and a job in the medical field. It took me about two weeks to realize I absolutely hated it.
I was working 6 days a week, waking up at 3:30am in order to be at the hospital by 5:30. Making next to nothing, I quickly racked up $10,000 in credit card debt. I knew I deserved more, but I had no idea how to get it.
I saw people in my graduating class living in New York or San Francisco, making six figure salaries and going on exotic trips. I often wondered what they had figured out that I hadn’t. What was their secret?
I dedicated the next 12 months of my life to finding the answer. In this article I’m going to share everything I learned along the way.
First, I’ll walk you through the exact process you can use to get a job interview at your dream company even if you don’t know a single person there — you won’t even need to apply online.
Next, I’ll teach you how to ace the interview process, get the offer, and land a salary you deserve.
I personally used these exact strategies to get interviews and offers at companies like Google, Uber and Twitter. They are also the same tactics that my students have used to land interviews and offers at Google, Microsoft, Slack, Deloitte, PWC, American Express, ESPN and more.
Referrals Are The Most Effective Way To Get Hired A recent LinkedIn survey on talent trends showed that 1 in 3 people were actively looking for new work. As of January 2017, the population of employed people in the United States was 123 million. This means that, at any given time, 41 million people are looking for work.
On average, an open role at a well known company gets ~250 resumes. 75% of these resumes came from some sort of online portal (like the company’s online application, or a career aggregator site like Indeed.com).
Once submitted, these applications are screened by Applicant Tracking software that scans them for keywords. At the end of the process, ~5 resumes make it into the hands of a recruiter. That’s 2% at best.
Additionally, The Wall Street Journal published an article stating that 80% of jobs aren’t advertised online.
That means that 75% of people applying for jobs are all competing for 20% of the opportunities!
Oops.
When it comes to getting hired, referrals are the most effective way to secure an interview and land the offer. Here are some stats from a recent Jobvite survey:
40% of hires come from referrals, the next largest channel is via career sites at 21% (almost half as many)
Referrals get hired in an average of 3 weeks while other applicants take up to 7 weeks
Referrals get paid more on average than cold applicants
40% of hires come from referrals (courtesy of Jobvite.com)
Finally, over 50% of six figure jobs are filled via referral.
Moral of the story? If we want to get hired at our dream job, we need to find another way to get a referral from an insider.
The problem is, many of us don’t happen to have friends or family working at places like Google.
Part 1: How To Get A Job Interview When You Don’t Know A Single Person At The Company
Know Your Role (And Find It)
The first step is having a solid idea of the specific role you are looking for, down to the company and title if possible.
Next, you need to make sure that role is available. For today, let’s assume that you want to be an Account Manager in the Technology B2B vertical at Google. Looks like a spot is open in New York:
Locate Potential Influencers
Next, you are going to find someone who not only knows about the role, but could potentially have an impact on hiring for it. Time to fire up LinkedIn.
In the search bar, plug in the company name + all of the information I highlighted above (title, vertical/industry, preferred city). However, before you hit “Search,” we need to remember that you are looking for someone who can influence the hiring process.
With that in mind, I usually use a title that is one level up from the position that I’m looking for.
If you’re not familiar with title hierarchy structures in the corporate world, here is a quick guide (if you are already familiar with how titles are structured, feel free to skip this section):
Side Note: A Brief Guide To Company Organizational Structures By Title
Every company has a hierarchy starting at the top with the CEO/Founder all the way down to the entry level employees. When researching companies, especially people to speak to within those companies, it helps to know where certain titles fit in the food chain. That way you can ensure you are talking to the right person.
Here is a general list of titles that fits almost any company, starting at the top:
C-Level (CEO, CTO, CFO, COO, etc.) Vice President (VP) Director Senior Manager Manager Coordinator (Entry Level) Associates, Executives, and Seniors
In many companies, the above titles have some sort of variation that allows for greater segmentation within that level. The most common forms of this are Associate, Executive, and Senior. Here is what those mean:
Associate: this title is usually given to someone who is halfway between positions for some reason (maybe there is typically a 4 year gap between levels and they are 2 years in). A person with Associate in their title is usually one notch below a person with the original title.
For example, an Associate Account Manager would most likely be one level below an Account Manager.
Senior: this title is the more experienced version of an Associate. People with Senior in their title are usually one notch above the original title. For example, a Senior Account Manager would be one notch above an Account Manager.
Executive: this title is usually given to people who are very senior, or around the level of Vice President. The two most common cases are
Sales Executive/Account Executive (synonymous terms for a senior salesperson) or Executive Vice President who is two notches above a Vice
President and one notch above a Senior Vice President. That should be all the info you need to make an educated decision around where people stand within the company you are researching.
Now that you’re familiar with the company structure, let’s get back to finding that influencer who can help you land this job.
Since we are looking for an Account Manager role, the next step up would be Senior Account Manager so your LinkedIn search would look like this:
Our first result? A Senior Account Manager who works in B2B at Google:
Obtaining Contact Info
Now we’re going to reach out and set up a meeting. It’s best to do these in person but over the phone can work well if you’re dream job is in another state or country.
In order to get in touch with our influencer, we’re going to need their contact info. Here are 3 strategies you can use to find almost anyone’s corporate email address:
This one is obvious but it’s a big time saver and definitely worth the 10 seconds it takes to check.
On the person’s profile, right under their picture, there can be a button labeled “Contact Info” (I say “can be” because people have the option to remove it). Occasionally, people will have their email address listed right there — voila!
If not, let’s move right along…
Reverse Lookup
Head over to Voila Norbert and enter the first and last name of the person you are searching for, as well as their company’s website. For example, if we were trying to find Larry Page’s email, our form would look like this:
Once it spits out their email you can confirm it using MailTester.
Matching Formats
If that doesn’t work, you can try finding someone else’s email at the company and use that format reverse engineering your target email address.
For example, using Larry Page again, if I know that my buddy John Smith’s email is john at google.com then I can assume that Larry’s email is larry at google.com.
The easiest way to get a hold of a company email address is to reach out to someone in sales or media because both of these departments usually have inbound lead forms and people on the other end ready to pounce on those leads.
We can also use our LinkedIn method here and target salespeople.
Salespeople almost always have their corporate email listed on their LinkedIn because it’s a free win for them. If someone is looking for their product and then finds them on LinkedIn, boom — they just got an effortless inbound lead.
Once you have the format, you can use MailTester to confirm your target email address.
Research, Research, Research
Now that you have your potential influencer, it’s time to do some research so you can effectively reach out and build that relationship.
Start with the usual suspects — LinkedIn, Facebook, Twitter, Instagram, etc. and look for common points of interest. To be honest, most people are better at this online research thing than I am, so I’ll get back to the meat here.
One thing I will say is, don’t skimp. The more you get to know this person beforehand, the better your chances of landing a referral from them.
Some people have said to me, “Austin, isn’t this a little weird? I feel like I’m kind of stalking this person.” I totally get it. However, this information is critical for quickly building a strong relationship and getting that referral.
Also, in my experience, people tend to expect that you’ve done some research on them. The key is to understand what is kosher to bring up out of the blue and what isn’t.
People are OK with you checking out their LinkedIn, but they may be a little weirded out if you mention that picture from Saturday’s Bar Crawl you saw on Facebook.
My general rule of thumb is this: if it exists on LinkedIn, it’s fair game to bring up. If you found it somewhere else (Twitter, Facebook, etc.) use a different method. For example, if I see that my influencer is a skiing fanatic, I may bring up that I went on a ski trip a few weeks beforehand.
Sending The Email
Now that you have your potential influencer and their contact info, it’s time to reach out. Not only is this one of the scarier parts of this process, it is also the most pivotal.
To help you get past that hump, I’ve included the exact email script that I used to reach out to people. In this case, I’m reaching out to Tim who works at Google:
Subject: Quick Question
Hi Tim,
My name is Austin and I currently work at Cultivated Culture. I was browsing through LinkedIn and came across your information — I hope you don’t mind me reaching out of the blue here.
I saw that you have extensive experience in Google’s Technology B2B vertical and I’m very interested in learning more about that space. I would love to have the opportunity to run some questions by you, as well as tap into any advice you may have given your knowledge of the industry.
I know that your time is extremely valuable so please don’t feel to need to respond in depth. If you do have 5 minutes to chat, I would really appreciate it.
Best,
Austin
There are a few key points to the email above:
Address the person you are emailing by name
State who you are and make it personable
Include some flattery that positions the person as an “expert”
As for the subject, Fast Company did a study where they emailed 1,000 C-level executives from Fortune & Inc 500 companies. They found that the subject line “Quick Question” made up 66.7% of total replies. I saw similar results.
All of that said, this script is just a framework. You will most likely need to tweak your emails to fit the situation.
When that time comes, I recommend checking out Sam Parr’s incredible guide on how to cold email like a boss (Sam has started conversations with Jeff Bezos and Brian Lee (aka Jessica Alba’s Honest co-founder) via cold email). It’s the same guide I used to help craft my email templates.
Now hit Send!
Prepare For Your Meeting
In order to prepare, we have to know what we’re preparing for. The goal of your meeting is to position your influencer as an expert, make them feel special, and build a relationship.
You should not and will not mention anything about the opening at their company. People innately enjoy helping others and if you follow the steps above, they will bring this up naturally.
You will want to prepare a list of questions that gets them to open up about themselves and the company. I like to ask them several softballs to get things warmed up and then hit them with a few questions they are guaranteed to remember.
Here is a quick set that I’ve had success with in the past (I’ve found the last one really seems to stick):
I saw you worked at [Previous Companies]. How did you end up going from [First Industry] to becoming interested in [Current Company]?
You hear a lot about [Current Company] in the news, but I’d love to hear more about why you love working there. What’s your favorite part?
What is one totally unexpected lesson you’ve learned from working at [Current Company]?
The “Million Dollar” Question
Regardless of the questions you choose, there is one that you must always be sure to ask:
“What is the biggest challenge your team is facing right now?”
Really dig in here, get them to be specific. This information is going to be critical in helping you land a referral from this person, as well as getting the offer farther down the road.
Your Homework: Adding Value (In A Big Way)
Okay, so you met with your influencer, things went great, and you identified a major pain point that the team is having. Now we’re going to focus on that last piece.
Over the next week you are going to research the crap out of your influencer’s problem. Then you are going to come up with a solution and draft up a proposal for how you would solve it. Your proposal should include:
A summary of the problem (to illustrate that you understand their pain)
A step-by-step framework of how you would solve this problem
A brief outline of how your skill set positions you as an asset to implement that solution
Truthfully, this process deserves a post of its own but this should give you a good idea of what you need to do. If you’re the type of person that likes concrete examples, check out this guerrilla usability test that Raghav Haran ran for Airbnb.
Once you have all of this information, consolidate it into a Word document, head over to Upwork, and hire a graphic designer to make your proposal look amazing. If you’ve never hired on Upwork before, here is an amazing guide by Dave Nevogt on how to do it right.
Following Up With Your Proposal
Now we’re going to reach back out to our influencer with the proposal. Here’s the template I used:
Hi [Influencer],
Thanks again for taking the time out to chat last week.
I spent a lot of time thinking about what you said regarding [team’s biggest challenge]. In fact, I created a short framework that should help you solve it. Please find that attached.
If you have some time, I would love to chat about it in more detail.
Please let me know if you have any questions, I’m looking forward to hearing your thoughts!
Best,
Austin
It’s very important that you do not mention the open position in any of your emails or the proposal. Be patient and wait for their response. When they do get back to you, they will not only bring up the opening but they will ask you if you’re interested.
Kindly accept and play it cool. You’re in!
Part 2: How To Breeze Through The Interview Process
Fast forward — our influencer passed along our resume to HR and they have reached out to set up a phone screen. Once we get past that, we’ll be on to interviewing with the team, and then getting the job.
A note to developers: The advice below does not cover technical interviews, which are typically required for developer/software roles.
However, the advice below will help create more time to prepare for technical interviews by minimizing the amount of preparation needed for other parts of the interview process. If you are applying for a development role, I suggest you read Cracking The Coding Interview by Gayle Laakmann McDowell.
Interviews can be daunting, especially at companies like Google, Amazon, or Uber. I’m sure you’ve read the horror stories about crazy questions they ask people like “Quick — How many golf balls can fit inside a school bus,” or, “how many gas stations are there in Manhattan?”
The truth is, most of these companies have done away with those questions. They crunched the numbers and found that the answers didn’t correlate with high employee performance (shocker, I know). In fact, Google’s own Senior Vice President of People Operations called them a “complete waste of time.”
These companies have since reverted back to the standard style of interviews, which is great for us because it makes it much easier to identify patterns. We can essentially “guess” what questions will be on the test and prepare answers that will blow our interviewers away (it works way better than it did in college, I swear).
Here is the process I used to prepare for each one.
Nailing The Basics: Questions You’ll Get In Every Interview
According to renowned career guru Penelope Trunk, one of the easiest ways to be a better interviewer is to prepare for the most obvious questions. You may be saying “well duh,” but you’d be surprised by how many people spread themselves too thin by trying to prepare answers to every possible question.
99% of the interviews you go on will follow the exact same template. If you can master the format, your confidence will skyrocket and you’ll be prepared for almost any situation you get thrown into.
The Universal Job Interview Format:
Tell me about yourself (your experience, why you are interested in this role, etc.) A mix of behavioral questions, which we’ll dive into shortly What questions do you have for me (the interviewer)? Let’s tackle each individually.
Tell Me About Yourself
This is your first impression. More importantly, it’s the only part of the interview that you totally control. Do NOT rattle off your resume like a grocery list.
In order to nail this part you need to craft an interesting story — your story. You want it to be concise (around 2–3 minutes) and you need to think about what you want to convey. I recommend:
Choosing 2–3 themes to build your story around (for me, those themes were Persistence, Agility, and Success)
Including quantitative metrics whenever possible
Addressing the question of why you want to leave your current position (they are going to ask you this anyways, addressing it early shows that you’re aware it’s a concern of theirs and helps put them at ease)
To help get you started, here is what my story looked like. To give you some context, I was a biology major who was interested in landing a job in digital marketing:
Growing up, like most people, I wanted to be a doctor. I went to [college] where I majored in biology and planned my course to medical school. Not long after, I decided that pre-med wasn’t for me. I wanted to get into digital marketing, and I wanted to be in New York. I set my sights on this goal and created a plan that would get me there.
In 2013, I graduated with my biology degree and took a job in medical device sales where I worked from 5:30am — 12:30pm covering surgical cases in the operating room. Then, every day, I would come home and study digital marketing until 8:00pm. In order to gain relevant experience, I got certified in Google Analytics & AdWords and created my own consulting firm that focused on using search engine marketing to generate leads for private golf communities. We were able to increase home sales by an average of 20% while reducing the cost per lead by around 10%. Armed with my new credentials, I began to look for positions in New York.
Eventually, I was offered a position at my current company (a promotional analytics company in New York). During my tenure there I have grown my book of business by 467%, spearheaded the creation of an internal group dedicated to marketing the company on the internet, and helped close the second largest deal in company history.
However, the company has restructured several times since I was brought on. I’ve had 3 different managers over the past year, as well as 3 titles with different sets of responsibilities. I’m looking for something a bit more stable and [company I am interviewing at] has been somewhere that I have wanted to work since I got into this industry. I’m really excited to have this opportunity.
Pro Tip: You are telling a story. Don’t be afraid to embellish a bit. I’m not saying you should lie or make up stories, but you want to sell yourself and you can bet your butt that your competition isn’t afraid to inflate their credentials.
Behavioral Questions
Next up is the dreaded set of behavioral questions. The ones meant to tease out your thought process and your ability to be a “team player.” This is the part where our educated “guesses” are going to come in handy.
The behavioral section is broken down into two parts that I call Standard Questions and Company Specific Questions. Let’s start with the former.
Standard Questions
You are going to be asked a variation of one, if not all, of these questions in every single interview you go to:
Why do you want to work for us?
Tell me about a time you exhibited leadership
Tell me about a time where you had to work as a team
Tell me about a time you’ve had to work with a difficult person, or difficult people
Tell me about a time you failed
Tell me about a time you overcame an obstacle
Tell me about a time when you had success
If you can answer these 6 questions, you can handle 9 out of 10 interviews with no other preparation and be totally fine. Just follow the same set of rules I mentioned above in the Tell Me About Yourself section:
Craft a concise story
Make sure to include quantitative metrics that illustrate your success
Anticipate and address objections
Company Specific Questions
These are questions that fall in the middle of the 7 listed above and “why are man hole covers round?” Never fear though, we can anticipate these too.
Head over to GlassDoor. If you’ve never heard of GlassDoor, it’s a great resource for any job seeker that includes salaries, reviews, and interview information for almost any company in the world.
First, you are going to search for the position you’re applying for. In keeping with our theme, we’ll search for “Google” under Companies & Reviews:
Next, we’re going to click on the “Interviews” Tab:
Then scroll down and click on “Filter Interviews” which will bring up some advanced settings. Here we’ll type in the title of the job we want (Account Manager, in this case) and the location (New York, NY). We’ll also select “Received Offer” because the people who didn’t receive offers tend to be slightly, ahem, biased:
This will pull up a list of reviews from everyone who interviewed and received an offer for that position. The general comments are really helpful, but we want to focus on a section called Interview Questions towards the bottom. I usually comb through 10–15 of these and add all of the interview questions into a Word doc so I can answer them later:
Now you have your second set of questions to prepare for.
What Questions Do You Have For Me?
Finally, once they are done peppering you with questions, your interviewer will ask if you have any questions for them. This is the most crucial part of the interview.
Why? Because so many people neglect it. If you can ask some questions that are even slightly outside of the box, I’ve found that really sticks with the interviewer more than any other part of the meeting.
After every interview I’ve been on, I asked for feedback. Without fail, the interviewer made a positive comment about the questions I asked. The good news for you is that I asked the same exact questions in every single one. Here they are:
What is your favorite part about working here?
What is the biggest challenge you are facing right now?
Let’s say that, in one year, you are looking back on this hire. What has that person done to exceed expectations on every level?
Ask about a current event (for example — I saw that [Competitor X] came out with this product. How do you see that affecting your business?)
What is the most unexpected lesson you’ve learned while working at [company]?
Tell me a little bit more about you, what do you like to do outside of work?
These questions work because they are based on specific principles of behavioral psychology. They break down barriers and help build a positive association in your interviewer’s mind. If you’re interested in the details, you can read more about it here.
Say Thank You
While we’re on the subject, be absolutely sure to send a thank you note to everyone you interviewed with. Also include a personal touch to each one (something that you gained from that last question).
Many people I talk to say “but I don’t have their email.” Ask for it! At the end of every interview always, always ask for a business card or write down the person’s email in your notebook.
If you forget, try using the techniques I outlined above for finding people’s emails and you should be fine.
Part 3 — Following Up & What To Do If They Say No
This is one of the most common mistakes I see from job applicants. I understand how nerve wracking it is to sit there and wait while everything is completely out of your hands.
One of the toughest things I had to learn throughout my interview process was that, while this is a HUGE deal to you, it’s really just another agenda item on the hiring manager’s schedule.
They will get back to you, and if they don’t? You don’t want to work for someone who doesn’t have the courtesy of replying to the people they do business with.
When Can I Send Them A Reminder?
The rule of thumb is one business week. If you interviewed on a Tuesday, wait until the next Tuesday to email them (as J.T. O'Donnell says, never send a nudge on a Monday). When you do, don’t push or be blunt. Keep it short and sweet:
Hi [Interviewer],
I hope you had a great week!
I wanted to quickly follow up and see if there was anything else I could help with regarding the application process. If so, please let me know.
Best,
Austin
That’s it. If they don’t respond to that after another 3–4 days, you have your answer and it’s time to move on.
What Happens If They Say No?
Ugh. The worst case scenario. Don’t get down just yet though, we’re not done here.
I have this quality where I have trouble taking “no” as an answer. When I was interviewing with Google, the initial screener told me that she wasn’t going to put me through because she “didn’t think I was qualified, and didn’t want to waste the team’s time.”
I was not happy. So I sent her this:
Hi [Recruiter],
Thank you again for carving out the time to speak this afternoon. I really appreciate your feedback, and I wanted to add one final note: I completely understand your concerns regarding my experience with [skill]. You are correct that I didn’t have much experience with that at [previous company]. That said, this doesn’t stem from an inability to produce results, but rather a lack of opportunity to do so.
While my experience on paper may not match up to the initial expectations of the position’s description, I have do have two qualities that work in my favor: I am an extremely efficient learner, and am also very effective at translating those learnings into practice. Second, I’m much more tenacious than your average individual. My career has hinged on these two qualities. I left college with no digital experience and a biology degree — all of my digital knowledge was obtained through self study. I spent 8 months selling myself without the on-paper experience to back it up. When I was finally given the opportunity to apply my knowledge in a business setting, I playing a critical role in landing the company’s 2nd largest deal in history. I am confident that I can have the same success in this role. I have the resources necessary to learn what I need in order to be successful at [company], and am prepared to do whatever it takes to make that happen. I understand that [company’s] interview process is extremely challenging, and that only the top talent ends up with an offer letter at the end. I also believe that I am worthy of a shot at that letter. [Company] is known for hiring people who excel at the intangibles, as well the ability to learn new things and apply them to existing knowledge. That is my forte. I am not asking for an offer. I am simply asking for the opportunity to speak with the hiring manager to make my case for the position. I’m sure you will find the best person for the position, I would just like to have a legitimate shot at being that person. If you give me that chance, my next set of answers will not disappoint. Thank you again for your continued consideration. Best,
Austin
Now that may be a little aggressive…
Ok, it was pretty aggressive. But she wrote me back an hour later and pushed me through to the next round! Mission accomplished.
The moral of the story here is, don’t give up if you get a “No.” Try to identify why you were turned down and then send a note to hiring manager addressing those items (feel free to copy mine).
Taking Action
There you have it. The exhaustive, step-by-step guide to landing an interview and then getting an offer from the company of your dreams. What are you waiting for? Get out there and start researching!
From the publisher's feed

275 Listeners

380 Listeners

288 Listeners

624 Listeners

581 Listeners

287 Listeners

44 Listeners

303 Listeners

213 Listeners

985 Listeners

188 Listeners

212 Listeners

201 Listeners

62 Listeners

140 Listeners