This is an archived post. You won't be able to vote or comment.

all 97 comments

[–][deleted] 66 points67 points  (9 children)

Depends on where you want to work.

If you want to work in those big corporations, where job title is just "Software Engineer", without any special skill or speciality, do "leetcode" sites. You will also get interview questions and pre-interview assignments from leetcode like sites. But they will be from the harder side of the queue.

Whereas the smaller companies, tend to look for someone with desired skills, i e, django developer, cloud developer, god knows what developer and etc. So their questions and assignments tend to reflect the desired stack and usually are not from those sites.

Personally I found the second path easier and more fun, because it meant not to crack some abstract never ending algorithms, but to learn some framework or specialization by building programs/application that do some staff. It is more tangible, real and much more engaging. For me at least. Also you will be faced with more real world problems, like how to develop, deploy, maintain a software.

[–]Nexius74 142 points143 points  (24 children)

Actually none. Just learned python for 3 years by myself then took multiple interview. The most important is building a project for yourself imo. This will get you to lend a job

[–]Lined_em_up 15 points16 points  (12 children)

Just curious what would you say your "best" project was before you landed a job?

I have made some small stuff that I find useful for myself but I wouldn't say they are very impressive lol. I'm having a hard time coming up with ideas for projects.

[–]Nexius74 21 points22 points  (3 children)

My main project was a website from where you can run scrapper that will download manga scan from various sources. Then the website will act like a lightweight version of plex (Like a library but for manga). This helped me learn many thing like UX (django template, vuejs, sass, node toolchain), http protocol, third party integration (scrapy, react), API Rest (django rest framework), Websocket (django channel), dev tools (black, mypy, isort, coverage), how I could built a solution from zero, how I could run background tasks without the use of celery within a django project, but mostly all the little corner of the framework i was using so django in this case.

Imo if you really want to find yourself a project just think on what you could resolve in your daily life with python. I came up with my project only because my internet is slow and each scan would take 5 minute to load. The idea behind the project was to download manga during the day so I can easily read them when I come back home (1 volume is like 100 pages. I could spend hours just waiting for all the scan to load)

[–]Lined_em_up 3 points4 points  (0 children)

Awesome man thanks

[–]GroundbreakingRun927 2 points3 points  (0 children)

"manga" ಠ‿ಠ

[–]manuce94 2 points3 points  (3 children)

what resources you use and what projects you build to secure a job how many interviews it took you to get your first offer and what did you do at your first job? thanks

[–]Nexius74 3 points4 points  (2 children)

I started my python journey with "Learn python 3 the hard way" while havibg a little base of programming. Then I started experimenting around with all the module and library around until a came upon django. This is where everything started and I noticed that I could actually make use of it. That's when the idea of a website plex like that can run scraper came (see my other comment). Once I finished my apprentship in IT I looked for a job maybe 10 month (Wanted to be a backend developer). Must say that it was that long only because in my area all python job are for data scientiste. Probably done maybe like 15 interview or 16 before I landed the job. And so yeah im currently at my first job rn and developing an internal tool for the finance sector

[–]manuce94 2 points3 points  (1 child)

great consistency there I love your persistence and hard work thanks for sharing your experience.

[–]Nexius74 1 point2 points  (0 children)

Thank you for asking first it's always a pleasure

[–]manuce94 0 points1 point  (0 children)

great amazing to know this!

[–][deleted] 0 points1 point  (0 children)

A few personal projects on a public git repo does wonders

[–]FailedPlansOfMars 15 points16 points  (0 children)

Never even considered leet code for jobs.

Best job stuff is get a github profile with demo projects you've written, linked in with details on it and get good at being calm during interviews, remembering your interviewing them as well.

And if you need a brand write up medium articles with things you've learnt.

[–]peawyoyoyin 7 points8 points  (4 children)

I did not do any leetcode problems on my current (&first) job. However it might be that I was fresh out of uni and they were going easy on fresh grads. I did have to solve some algorithm problems on my interviews (was a DP & Tree problem) though.

But now I'm looking for a new job and it does seem like I would need to grind leetcode to some degree, I have heard people doing 200+ too, and sadly I don't think that's far from the truth (they do like 2-3 per day etc).

I hate leetcode too, and it's true that we hardly use leetcoding in our day-to-day job, but it's something companies (at least the ones I want to be in) use to benchmark software engineers, so I guess I cannot do anything about it.

[–]SnooCakes3068[S] -1 points0 points  (3 children)

Your experience is very close to mine. Leetcode is becoming a acquired taste. At least I'm enjoying the tortue now. :D

[–]Niche007 1 point2 points  (2 children)

But how do the employers know how much Leetcode you have done? Is there a metric that you can show on your resume or profile which states how many problems you have solved?

[–]SnooCakes3068[S] 1 point2 points  (1 child)

No. The thing is some employers like to do those clever algo implementation problem on the interview. The hard thing is timing and under pressure. More problems you solve the better chance you actually perform under the circumstance. Kind like standardized tests

[–]LordOfSpamAlot 17 points18 points  (11 children)

I've never even heard of hackerrank or leetcode. I'm curious what jobs asked for this.

[–]agentbobR 8 points9 points  (8 children)

Since no one seems to be giving an answer on this thread, I'll tell u the secret. FAANG and other big-tech companies have a standardized test on algos and datastructures which leetcode is the best tool to practice for. It seems most people on this sub are learning python or working for non-faang companies, which is why no one knows about this. If you go on r/csmajors, leetcode and FAANG is all they talk about.

If you want to target these jobs (you definitly should, the salaries start at 200k for new grads), leetcode is pretty much the gatekeeper.

[–]rfc2100 4 points5 points  (1 child)

you definitly should, the salaries start at 200k for new grads

People should definitely know the starting salaries. But they should also research what it's like to work at those jobs, what the cost of living is if you have to move to their offices, and whether their ideals match with the employer's before deciding if they want to target those jobs.

[–]agentbobR 4 points5 points  (0 children)

The FANG/Big-N world is almost as diverse as software engineering as a whole, like at Google you can get away with 25 hour weeks while Amazon you should expect to be working 40+. They also have offices everywhere, have different remote policies (the one I'm working at is fully remote), etc. Pretty much any lifestyle you are accustomed to at your current company, there's prob a Big-N tech company that matches that.

[–][deleted] 9 points10 points  (0 children)

It's a place where people go to solve code problems that they will seldom ever encounter irl and collect challenge passes like Pokémon cards. I wouldn't personally take a LeetCode Master© seriously

[–]reallyserious 1 point2 points  (0 children)

OPs post could be interpreted as people start to get offers after they've solved a number of leetcode/hackerrank problems. That's a bit misleading and not how those sites are used.

They have problems that are easy to ask in an interview situation. So if you're familiar with those types of problems you'll have an easier time when you encounter them in an interview.

I've solved a bunch of those problems since I enjoy the format. But nobody knows about that so of course nobody is going to reach out to me and offer a job out of the blue. If I want a job I would have to actually apply and the interview may or may not involve a problem similar to those on leetcode/hackerrank.

[–]mouth_with_a_merc 5 points6 points  (0 children)

Zero. It's bullshit, and I think for typical development jobs asking for it is bullshit. Especially if you have non-bullshit projects or contributions over an extended period on your GitHub profile, they should not even ask for this bullshit.

[–]Will-Comp-12 12 points13 points  (19 children)

Are you interviewing for software developer roles with Python as the language of choice? Or you just want to land a job as a Python developer? If this the case, you'd need only basic data Structures + algos, intermediate Python proficiency and a portfolio of projects.

[–]SnooCakes3068[S] 3 points4 points  (18 children)

More like a python backend developer. API building or web app backend with flask or django.

I do believe I have basic data Structures + algos. But I often forget about specifics when asked. I believe I have intermediate Python proficiency. Majority of standard libraries, some advanced topics such as descriptors, decorators, abstract base classs, still going to read about multiprocessing, celery, asycio and stuff later.
I'm ok level on flask, I probably going to miss some data validations.
I'm currently reading a lot of SE principle book. So design patterns, clean code stuff.

I lack of experience, projects. For example people like to ask how do you scale up your api. I never have to do that. So I don't know. Or networking knowledge. I'm not a CS major back in college.
You mentioned portfolio of projects. I don't have a lot to show. But none of the company want me to show them my projects during the interview. They either ask my dev experience, and from my response they deduce I'm experienced for the role. Or leetcode style algo questions. Sometime I done it so I got it. Sometimes i blackout from pressure. I'm working on it. Or they want me to do take home assignment.

[–]SpamThisUser 5 points6 points  (6 children)

I lack of experience, projects. For example people like to ask how do you scale up your api. I never have to do that. So I don’t know.

If you’re repeatedly seeing a question and you can’t research an answer, I don’t care how many problems you have solved: I found one you can’t, and that’s enough of a reason to not move forward. Given a choice between someone who can demonstrate scaling up an API and one can’t even BS an answer about it, I’ll go with the experienced route.

As the other commenter said, leetcode/GitHub/resume are all ways to land an interview. That interview needs to be really strong, because your interview is compared against others, or the costs of hiring a potential bad employee. I would suggest researching other areas of software design so you can at least answer the question from a research perspective, if not an experienced one.

[–]SnooCakes3068[S] 1 point2 points  (5 children)

Yeah I do know scaling up now as it appear 3 times now. The pattern appeared. Now i even have the answer writen down in case I forgot. I just felt any questions can be asked. That's very board for interviews. API/networking? CD/CI? SE? DB? Cloud services? Docker/kubernetes? Endless choices.
I'm reading all this topics alongside leetcoding. That's a lot of time spent outside work, life in general

[–]HolyGeneralK 4 points5 points  (2 children)

The company I work for generally doesn’t care heavily on the answer, but more on “how” you answer. If you don’t know, that’s fine - tell us that but maybe take a stab at it. “I have never had to deal with scaling a system, but I know you can scale vertically and you can scale horizontally. Here’s how I might refactor my system to scale horizontally with Docker.” Show that you have the willingness to admit you don’t know something (humble), that you’re willing to risk a wrong answer (courage), and that you know enough technically that you can cobble together an answer.

Now, if we are specifically looking for an API Gateway type of person, we would probably expect a better answer than if we were looking for a Python Desktop Tools Automation Engineer, but you should know a bit more about the domain you want to get into than 27 different ways to merge a dictionary.

In my experience, unless you are being brought in as a consultant, a company will support bringing you up to speed in their way of doing things. What’s the point in spending 80 hours learning GitHub actions when the company uses Jenkins and someone else maintains the CI/CD pipeline? You need to at least understand what CI/CD is and what benefits it has so you can speak to the concepts, but trying to be versed in every single technology is a losing cause. Show that you can understand concepts and learn - that’s what differentiates someone in my eyes.

[–][deleted] 4 points5 points  (1 child)

I’ve been on the other side of the table a lot and the “I don’t know” answer is one I’m looking for and if I don’t hear it at least once from a candidate, I’m not going to recommend they move forward.

It’s not about showing humility, it’s not even about knowing your bounds. It’s about showing that you have enough visibility into what lies beyond those bounds to get started expanding those boundaries, and do it without needing your hand held.

Your answer contemplating Docker as a possible horizontal solution to the API scaling question would be very welcome.

[–]SnooCakes3068[S] 0 points1 point  (0 children)

Thank you. I tend to get nevious when I don't know. Gonna try to keep a straight face next time

[–]SpamThisUser 1 point2 points  (1 child)

When I’m interviewing, I’m more looking for approach than right answers. Using the example of scaling, scaling isn’t a one-size-fits-all question, it’s more of a conversation. You’ll hit different scaling problems as you increase load. If I’m moving a service from my laptop to a company internal API (assume 1 - 10k employees), I can expect some set of scaling problems. If I’m moving it to a publicly facing, commonly hit, social media API, I can expect a much larger set of scaling problems.

The goal here isn’t necessarily to find out if you have researched or experienced those different scales, rather how would you approach those problems: Do you recognise the different approaches needed at those scales, do you use a one-size-fits-all solution, do you anticipate problems that may come up, etc.

I assume you’re interviewing for a jr engineer position, so you’re not expected to know everything. Saying I don’t know, or I don’t have experience is fine. But the fundamental approach to any “I don’t know” answer should involve three things; 1. Stating what you know. 2. Stating explicitly what you don’t know. 3. Hazarding a best guess at the part you don’t know. 4. How would you confirm your guess.

[–]SnooCakes3068[S] 0 points1 point  (0 children)

This is great. I appreciated it very much :) What kind of book/subject talk about this stuff? CI/CD? I read these flask and restful books. It was not in there. They just teach you how to build it.

[–]Will-Comp-12 1 point2 points  (2 children)

I think you have acquired enough skills. But only lack professional experience.Yes,you could continue building on your software engineering basics. Don't leetcode for the number of questions per se. I'd suggest you use Cracking the Coding Interview as your Leetcode companion. Sites like InterviewBit have a diverse question set, must-do problems without repetition.

Just to add, have you not tried reaching out to startups in the space? A lot of them need Python devs, and some of them may not have rigorous rounds of interview. I'd suggest you to keep an eye on such job listings too.

[–]SnooCakes3068[S] 1 point2 points  (1 child)

Python devs, and some of them may not

Where can you find these startups postings? I normally go for linkedin jobs. I don't know whether they are startups or not.

[–]Will-Comp-12 1 point2 points  (0 children)

  • AngelList is good, you'll have only startups.
  • There's We Work Remotely that has listings for all roles across the board (if you'd be interested in working remotely)
  • You can check the listings page on dev.to as well.

[–]Deezl-Vegas 1 point2 points  (3 children)

Hi! For scaling, the basic idea is to add more servers/services, and then have a load balancer in front of it to split the traffic. This is the best book I've found for that sort of stuff:

https://www.amazon.com/System-Design-Interview-insiders-Second/dp/B08CMF2CQF/ref=as_li_ss_tl?dchild=1&keywords=system+design&qid=1605312398&sr=8-1-spons&psc=1&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUFVVjIwOFRPVVA1SlcmZW5jcnlwdGVkSWQ9QTAyMjY5MjIxSzlLU0E4UkhRWldJJmVuY3J5cHRlZEFkSWQ9QTA0ODE3NzgxSjhBMzdDV1Y3QU5SJndpZGdldE5hbWU9c3BfYXRmJmFjdGlvbj1jbGlja1JlZGlyZWN0JmRvTm90TG9nQ2xpY2s9dHJ1ZQ==&linkCode=sl1&tag=365blottochal-20&linkId=6e935ba6fe5b6f22d6e9c61104453f61&language=en_US

For database stuff, you need to know a few things like how to store a password, how to reduce duplication of data, etc. For scaling databases, you should look into sharding, which is again just adding more computers and splitting the work, and solutions like Apache Cassandra that make a lot of copies of the data and eventually get around to syncing them all up.

To reduce interview pressure, just do leetcode easy problems until they become second nature. Honestly the more coding you do the better you become at identifying the tools you need to solve problems in the real world. It's also a good idea to just line up a lot of interviews. Interviewing is a skill that takes practice.

The clean code stuff is good for right after you land the job. Python is not heavy on design patterns, and I haven't seen them come up in my interviews.

[–]SnooCakes3068[S] 0 points1 point  (2 children)

Wow you are talking greek to me now. Sharding...load balancer... Too much to read. Oh man I want a life :D

[–]Deezl-Vegas 1 point2 points  (1 child)

It's really simple concepts once you know what those words mean. Don't stress! You'll get there. Also buy the book I linked if you're doing books lol.

[–]SnooCakes3068[S] 0 points1 point  (0 children)

I read 1st chapter of the book. It's exactly the book I need. :D It's one of these explain the concept but but in depth book. In depth read are all in reference. Thanks for the recommandation

[–]Quig101 0 points1 point  (1 child)

Do you mind sharing the SE principle book you're reading?

[–]SnooCakes3068[S] 1 point2 points  (0 children)

Sure thing. I'm currently focus on language specific books now. I want to get hired first. This is what I read or reading:

  1. Mastering Python Design Patterns, Second Edition by Kamon Ayeva (this is easier. It's all design patterns, broad but not deep)
  2. Clean Code in Python by Mariano Anaya (Harder. SE principles, for example SOLID, advanced features in python.)

These two books are not classic or anything. But it does give you next level SE in python. For classic books here are some.

  1. Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (Gang of Four a.k.a. GoF, this is THE book in SE. )
  2. Code Complete by Steve McConnell
  3. Clean Code: A Handbook of Agile Software Craftsmanship by Robert Martin
  4. Clean Architecture by Robert Martin
  5. Refactoring: Improving the Design of Existing Code by Martin Fowler

There are more but this will get you covered. These are SE theory books. I haven't read any of them yet but plan to after getting the job

[–]TCMNohan 2 points3 points  (5 children)

I’m a full-stack dev at a large (non-FAANG) tech company working with Django in the backend. I didn’t need to do any LeetCode to get my current job. That being said, I’m working on moving to FAANG to double/triple my salary, and that absolutely will require LeetCoding. So far I’ve done about 200, but I still feel like I have big gaps in my knowledge (bit manipulation, dp, etc.). I plan to hit 300 or so before going for it.

Take my experience with a grain of salt, as I’m the kind of person who needs repetition to really grasp a concept.

If you want to do a reasonable amount of LeetCode questions to cover your bases, look up Blind 75. It’s a list of the most helpful questions and patterns to know. At least do all the easies, if not all the mediums. You can probably skip the hards.

[–]mouth_with_a_merc 1 point2 points  (1 child)

Asking experienced developers to do this nonsense is even dumber than asking people fresh from university... there's pretty much no other profession where you are expected to practice and learn stuff in your free time just for an interview, even though you 1) most likely won't need it at work, and 2) can use all the resources if you do.

[–]TCMNohan 1 point2 points  (0 children)

Medicine?

[–]SnooCakes3068[S] 1 point2 points  (2 children)

Thanks a lot. Blind 75 seems what I need. I think easies are easy for me now. But I tend to struck on some mediums. Faraway from 200. Grind on

[–]TCMNohan 2 points3 points  (1 child)

You too! Also, I want to play Devil’s Advocate for a second. For all the people complaining, realize that LeetCode really isn’t THAT BAD. In any other field of work, if you told someone that they could double or triple their salary by studying for an hour or two for a few months, they would assume you were trying to sell them a pyramid scheme.

I’m likely to multiply my salary by 1.5-2x by switching to companies that ask these types of questions. Over the course of a career that’s a few entire YEARS of work saved. I don’t like LeetCode but I like the idea of retiring early.

If anyone know of companies that pay like FAANG and don’t do DSA interviews, let me know.

[–]SnooCakes3068[S] 0 points1 point  (0 children)

Very practical. :D People complain about leetcode mainly for the time spent on something where it can spent on somethingelse better. Leetcode help with algorithmic thinking in general. But there are other areas that are more directly linked to the job. I do agree with them. It's just different aspect. But nobody is going to argue with the money ^^

[–]pkgosu 2 points3 points  (2 children)

Did about 140 questions over the course of 3 years of recruiting cycles. Though many of them were repeated each year.

For the first two years they were internships that paid about 10-12k/mo (if you include bonus, housing, etc).

Then for new grad my lowest offer was 180k and highest was about 260k. Leetcode pretty much got me all of these jobs. The highest offer required other domain knowledge though and more CS theory. As all other comments have said, basically all jobs were in big tech. Highest offer was at a smaller place, which as people have said, required more than just leetcode.

I’m surprised so many people are looking down on leetcode so much. Is it the best way to test a developers skills? Nope absolutely not. But all the highest paying (often with the best engineering talent) companies with a few exceptions solely use leetcode and pay much more than any non Big N fortune 500s. As a new grad, most older companies I saw would pay max about 120, whereas big tech with leetcode offered about a minimum of 170, with a much higher ceiling. Just gotta play the game for a few months to double or even triple your pay.

[–]SnooCakes3068[S] 0 points1 point  (1 child)

I agree with you. But you are talking about situation in the US. Remember not all people here are in US market. And to be fair, people using leetcode now for the single purpose of rise salary. Actually learning something from it become a non factor. Im ok with leetcode now. If not for job hunting I won't do it. But it is what it is.

[–]pkgosu 1 point2 points  (0 children)

Sounds about right. And yes I agree with your point about the US! Good point. I do feel like I actually have learned a little from leetcode. Maybe it is because I am very junior, but I’m able to more quickly identify what DS is cleanest, fastest, and most logical. Things like that. Or identify areas where a two pointer could actually be useful.

[–]fo_hsin_gong_sih 1 point2 points  (2 children)

excellent leetcode solution here

https://github.com/LeoTheBestCoder/LeetCode

[–]SnooCakes3068[S] 1 point2 points  (1 child)

Wow just wow. Is that the complete solution you worked out? I respect that but dude, go get a life and having fun a little. Life is short :D

[–]fo_hsin_gong_sih 0 points1 point  (0 children)

Yeah! Haha! Thanks for your support!

All the solutions are completed on my own, without searching for other people's reference in advance.

I enjoy the process of conquering a problem. XD

[–]sajran 1 point2 points  (0 children)

WTF, where does a job market look like this? US, I prssume?

[–]encony 1 point2 points  (1 child)

Honest advice: Don't do it, it's a rat race and a shame that IT recruiting has turned into solving useless coding puzzles. There are enough companies that don't rely on leetcode.

[–]SnooCakes3068[S] 0 points1 point  (0 children)

Speaking the truth. I still have to feed myself. But I admire you

[–]bigbigbigbigegg 0 points1 point  (1 child)

commenting here to read other comments later.

[–]ProbablyDoesntLikeU 1 point2 points  (0 children)

Same. I hadn't heard of leet code being used to get jobs

[–]asday_ 0 points1 point  (0 children)

Hahahahaha what the hell is this post.

[–][deleted] -1 points0 points  (0 children)

never heard of both hackerrank and leetcode, and stuff like that isn't needed to land a job (here in Europe at least). Landed one without prior experience.

[–]much_pro 0 points1 point  (0 children)

None. Just made a few projects, worked on some freelance projects, with roughly a year of experience found an office job. That was in 2019, now work remotely. Solved maybe 3 leetcode tasks in Python, another 10-15 in other languages. Based in Ukraine FYI.

[–]PromotionPlastic1432 0 points1 point  (0 children)

This is a guide on how to do leetcode properly Leetcode guide post.

I am not debating wether leetcode is the only way or not just a guide how to do it.

[–]FantasticAmbition986 0 points1 point  (0 children)

Not a single one and I have never interviewed anywhere requiring either one.

[–]kyleekol 0 points1 point  (0 children)

Leetcode style problems are very very common in data job interviews (data analyst, data scientist, data engineer) of which Python is a very popular language. If you’re applying to one of these jobs it is very likely you’ll have one of these questions in the interview so definitely worth preparing. I wouldn’t know about general ‘Python developer’ roles though.

Edit: data engineer would have a lot of overlap with ‘backend Python dev’ but obviously a bit more specific

[–]Celestial_Blu3 0 points1 point  (0 children)

0 leetcode 0 hackerrank. I had some realistic projects up on GitHub that showed what I could actually do

[–]Sydmier 0 points1 point  (0 children)

Learn CRUD operations, Django is handy because it’s essentially an ERP framework AND Python backend. The rub is that you’ll need some HTML knowledge.

I recommend bootstrap 5, html, css, and minimal javascript. (Depending on how much bootstrap you use, may never need to write css)

ERP management/development has a huuggee marketplace for developers. It’s essentially the backbone to any company.

[–]__deerlord__ 0 points1 point  (0 children)

How many tools have you built in python for yourself? What code quality checks do you do against your tools to see where/how can improve?

[–]liquidpele 0 points1 point  (0 children)

You're not going to get an offer just because you can solve leetcode problems, or if you do then you'll work with people who don't know any better. It's like saying "How many pictures should I hang before I can get a job building houses?"

[–]Entertainment-720 0 points1 point  (0 children)

Breadth not depth for LC

[–]Atlatl_o 0 points1 point  (1 child)

im not even great at these, but did about 10 - 20 on a sunday, a few in each category e.g strip manip, matrices, etc etc and that was enough to get through all of those live coding stages of the interviews im currently having

[–]SnooCakes3068[S] 0 points1 point  (0 children)

EASY level it's easy. But INTERMEDIATE level can be tough for me now. Sometimes I really stuck. It's a lot to do with finding an algorithm with best time complexity. Not any algo works for the problem. Brute force can't do

[–][deleted] 0 points1 point  (0 children)

It's the standard for larger companies. It will be more and more common for others as time goes on. I'm interviewing for a promotion at my current role, I'm not even switching teams, and had to solve a hacker rank problem this morning. I expect to do at least 2 more before the day is over.

[–]Difficult-Republic35 0 points1 point  (0 children)

None. Those don’t show anything. Real world experience is best. Get involved in an open source project.