Creating a value-adding project
Who is the target audience for this article?
Although the title is quite generic, most tips and overall content is best suited to
- Undergraduate/Graduate students who are pursuing a degree (or) are interested in software domain.
- Working folks who are interested to create value-adding side projects.
What can be called a project?
Quoting some definitions I found online
TutorialsPoint — “A Software Project is the complete procedure of software development from requirement gathering to testing and maintenance, carried out according to the execution methodologies, in a specified period of time to achieve intended software product”
Wikipedia— “Software development is the process of conceiving, specifying, designing, programming, documenting, testing, and bug fixing involved in creating and maintaining applications, frameworks, or other software components”
Ouch, that’s a bit cryptic with a lot of jargon mixed in (particularly if you’re a newbie to tech).
Let’s break it down, what should a project include at minimum?
- Requirements — “What” you intend to achieve from the project exactly
- Design — “How” you will achieve the requirements (using XYZ software components in some organization)
- Development — Actually “creating” what you designed by using tools (like programming languages, and frameworks)
- Testing — “Verifying” if what you created works as expected (by matching against your requirements and expected behavior)
- Results — Something often missed but still important, is “measuring” the success or issues identified.
This is important to know not only while creating a project, but to document it later as well (the “STAR” format referred to in my other article).
Why did I take the trouble of defining it here?
To make sure you understand that something can be called a project, only if it includes all the above parts. For example, only testing if something built by somebody else wouldn’t count as a project.
What is a value-adding project?
Types of projects
Before we get to what is “value-adding”, let’s see some types of projects.
Note: This is an unofficial categorization based on my personal understanding.
- Learning projects — Typically created by following along a tutorial (like a medium article or an online course), where most of your source code is directly available. The objective here is to simply learn a new technology and to create a demo application on it. For example, if I was just learning website building and created one by following this article.
- Research projects — Here the target is to attempt to provide answers to one or more research problems, and possibly publish a paper. Usually, this involves studying some tech or domain at depth and applying it towards solving theoretical or practical problems. For example, see this research paper for predicting traffic using Machine Learning.
- Real-world application projects — To build a real-world application, one needs significant understanding of their target audience, commercial viability, and serving users at scale. The target here is to build application which is efficient and has good user experience, and then launch it (playstore/website) for people to actually use. For example, check out Imgur which is a image hosting website that started as a side project and is now used by millions of people.
- Inventive projects — Technically, research and real-world projects also need to be “innovative” in some sense to be successful. This however is different, as to “invent” means create or discover something entirely new. While it may not be possible to invent something like the internet or bitcoin, the target here is to create a solution significantly different than anything existing. For example, check out this patent by Yahoo for pay-per-click advertising on search engines (which sued Google for infringement).
Value-adding project types
As you may have guessed, out of the above — research, real-world application and inventive projects are highly value-adding as they contribute to the community. While learning projects are fun and help you improve your skills, they don’t add value externally.
Note: Open source contributions are a subset of real-world application projects per above classification.
Measuring value in a project
Going a step further, it’s possible to measure the value among projects of the same type. For example, a movie-booking app integrating with several theaters with 1000s of daily users is more valuable than a hostel-booking app which is just hosted online without any actual users (assuming both started as side projects).
The common factors for all types of projects are
- Impact of problem: If solved, how many people can it help; how much money can it generate; can it be extended as a generic solution for more problems
- Distinctive results: How significantly different is your solution in terms of results (compared with the average/best solutions) it produces — accuracy, performance, and other factors.
More specific factors are
- Research projects: If paper published — Published where (IEEE, Springer, etc), RG score, Citations, etc.
- Real-world application projects: If application launched — Number of users, revenue generated, scale/performance, etc.
- Inventive projects: If patented — level of invention(breakthrough/apparent), T score, C score, P score.
Why a value-adding project?
There’s no mandate to create a value-adding project at all, neither by colleges nor by companies. So there’s no need to feel compelled to do one, without a strong drive for it.
However, if you feel an inclination towards it, then here are some advantages you could gain from it
- Useful during job placements, candidates with value-adding projects have the edge over those without (if most other qualifications are similar). This is because they indicate more individual exploration and depth in knowledge of the candidate.
- Helps you discover your inclination for a career — if you feel a strong interest towards research projects, then perhaps you’re suited to the academia domain. And on the other hand, if real-world applications are more appealing, then corporate may be the right fit for you.
- And going even beyond, if you’re highly innovative (not necessarily inventive) with some business sense, you may very well be the next startup founder! Though rare, side projects have turned into giant businesses.
How to get started with a value-adding project?
Ready to get your hands dirty? This will be comprehensive, but definitely worth it if you get through it. So brace yourselves! :)
First, pick a problem
Probably the hardest part in building a good project is knowing what problem to solve.
PS: If you already have a problem which you’re passionate about (and can be solved by tech), perhaps related to your childhood/background then go for it by all means!
Now if you’re as clueless as I was about picking problems, here are some suggestions to develop awareness first about what’s happening in the tech world
- Know more about what’s happening in the research world — read recent papers in IEEE, Springer or even company specific ones like Amazon Science. You can also use Google scholar to search across organizations. Find a topic that interests you and read 5–6 recent papers on it to get a high-level idea of how the research community is progressing.
- Know what’s happening in the real world — read about recent disruptive startups in India, USA, and tech crunch articles. There is no single source of information for knowing about the real world, even newspapers and tech magazines can increase your awareness.
- And in the inventive world — Using google scholar or other sources, read some patents to know about IPs, their viability and level of invention. You will also see there is significant overlap of business and tech in many IPs, often broadly encompassing both.
After reading a little of all the worlds, you might soon know which of the 3 interests you. In that area, search for actively pursued problems (if you like challenges, search for unsolved ones).
You may either pick an actively pursued problem or might consider brainstorming to create something new on your own (now that you’re aware of the current trends). Preferably it should be relatively unique and at least slightly ahead in the curve.
Notes
- A simple way to check if the problem is relatively unique— there should not be many medium articles, tutorials, and resources showing exactly how to solve the problem chosen.
- Don’t limit the problem to something you can easily solve using tech stacks you’re familiar with, be ready for a challenge to build something of value.
Then, pick a technology domain
The slightly easier part — picking a “tech stack” as people may refer to it.
Which programming language should I use? And framework? Wait, why should I even use a framework?
This can be answered based on the problem you’ve picked.
- In most cases of research, invention, and real-world applications, frameworks are a handy choice. They are efficient and made for the purpose of fast development. For example, for some XYZ website instead of writing a number of HTML elements for a responsive screen (different view in mobile vs desktop) one could use the responsive grid offered by Bootstrap framework.
- If you’re researching or inventing something very new which may not be possible with existing frameworks, you may have to write your own framework from scratch using core programming languages. For example, if you discovered a more efficient algorithm to train ML models than anything in existing frameworks (TensorFlow, PyTorch) then you can write your own framework using core python.
So seems like frameworks are mostly your go-to choice. Based on your problem and it’s domain, you can use some of below resources
- A full stack web application (i.e. front end view and back end DB storage): The top choices are MEAN stack, MERN stack, Django framework.
- An ML application: Python is the largely used language for this, with TensorFlow, PyTorch, Scikit being some of the top choices. If you need to train your model on the cloud, you can also consider Vertex AI (google) and AWS Sagemaker.
- A blockchain application: Ethereum, Hyperledger among others.
- An IoT (internet of things) application: KAA IoT, Arduino among others.
Other use cases may require core languages like
- Cybersecurity related: Core languages like C, C++, SQL, PHP among others.
- Core website research: HTML, CSS, JS, PHP, etc.
- Core ML research: Python, R, and even C++ in some cases
- Core Blockchain research: C++, JS, etc.
Don’t know the language/framework you have chosen for your problem?
Naturally, go start learning the new language/framework which you deem to best per latest research! Many free open sources are out there like Geeksforgeeks, tutorialspoint, YouTube, and tons of articles like this one (a paid course also works, but is not strictly necessary) :)
Brainstorm, research and create a solution
Now, you have the problem and the tech stack to apply for it.
- Break down your exact problem into requirements that can be specifically answered by a tech solution. For example, a booking website may need specific features like showing something on “front-end” and saving some data on the “back-end”.
- Research, research and research! Figure out how to implement each specific feature with the knowledge you’ve built up on the tech stack. Stackoverflow is your go-to place for 99.999999% of the questions you may get.
- Put together the overall solution by integrating all the components you’ve built across features. It may take significant effort to debug each individually and then as a whole project.
Almost there!
Verify, document and launch it
After tons of debugging and integrating all the components your project is now functional, and has reached a near finish state.
- Prepare a test plan to at least verify the key features which will make your solution stand out (remember we talked about a “distinctive solution” earlier during value measurement). Execute the tests and fix as necessary.
- Document how your solution is working as per your expectations and actual results. Also do measure other factors necessary for your research/application like scale, performance and optimization.
- Finally, if everything looks good to go, then launch your solution! You can publish a research paper (more documentation), a patent (more documentation + legal + money), or an application (user complaints +market needs + legal). Just kidding, while more extra issues may come, the humungous work you have done will truly shine when you actually publish something back to the community.
And now, it’s finally completed! A truly value-adding project to your name, congratulations. :D
Word of advice — if you reached here NOT achieving the result you set out to (i.e. distinctive solution), do not worry at all! After all, not every attempt can be successful. From personal experience, I’ve failed more often than not, and still it’s worth it every time. Whether you achieve a distinctive solution or not, the learnings are equally satisfactory.
That’s it, go out there and build the great projects you were meant to. Good luck! :)
References
- Sample learning project medium article
- Sample IEEE research paper
- Sample real-world application imgur
- Sample patent, yahoo net ppc
Others are directly linked.