Selling the Bottom, Software Dev Black Belt, Internal Promotions
3.03 | "If you have achieved any level of success, then pour it into someone else. Success is not success without a successor." - T.D. Jakes
News and Numbers
Markets this Week:
S&P 500 is up 1.5%
NASDAQ 100 is up 3%
Bitcoin-USD is down 1%
Ethereum-USD is trading flat
Headlines from this Week:
Ford strikes deal with Tesla to allow its electric vehicle owners to gain access to more than 12,000 supercharger stations in North America in early 2024.
Neuralink wins FDA approval for human study of brain implants.
Nvidia stock surged on earnings beat, signalling higher than anticipated demand for A.I.
Finance
By Vlad Estoup, B.Comm. (Finance), working in Ethereum cybersecurity
Those Who Sold at the Bottom: The Tale of Missed Opportunities and the Fuel for the Next Rally
2022 was a year many investors would prefer to forget. With tumultuous market swings, economic uncertainties, and, most significantly, the plunge in major indexes, it seemed as though the market was heading into a financial abyss. However, as the saying goes, "it's always darkest before dawn," and those who managed to weather the storm are now reaping the rewards.
Since the start of 2023, the market has been on a tear, with the NASDAQ soaring by 30% year to date (YTD), and the S&P 500 not far behind with a 10% rise. In retrospect, the bottom of 2022 was an excellent opportunity to buy - a golden opportunity that many panicked sellers missed out on.
For those who sold at the bottom, it was a painful lesson learned. The sellers of 2022, spooked by the prospect of further losses, missed the early-2023 upswing. Now, as these investors witness the ongoing rally, there is a strong likelihood they will return, acting as the fuel for the next leg up of this bull run. However, there is also a risk associated with this action.
The sellers-turned-buyers might again be susceptible to the psychological pitfalls of investing. While their entry could boost the market further, it's likely they could fall into the trap of failing to sell at the peak, thereby repeating their previous mistakes in a different guise. The important point to understand is that there are times to hold, times to fold, and most importantly, times to take profits, especially when dealing with risky assets.
This brings us to the intriguing world of cryptocurrency. Still down over 50% from its peak, it stands as a stark reminder of how quickly the tide can turn in the world of investing. Yet, the world of digital assets, particularly Ethereum and its key ecosystem tokens, has shown resilience despite the downturn. As they continue to underpin a growing decentralized financial system, there's potential for a significant surge from these levels.
Investors who decide to venture into the cryptoverse should keep in mind the volatile nature of these assets and ensure they have a risk management plan in place. Crypto investments can provide substantial gains, but they can also lead to severe losses.
There is an old adage in the investing world - "bulls make money, bears make money, but pigs get slaughtered." This implies that you can profit in rising or falling markets if you stick to a strategy. But if you get too greedy and fail to take profits when necessary, you risk losing it all.
So, whether you're jumping back into the stock market after selling at the bottom in 2022 or considering an investment into the world of cryptocurrency, always remember the importance of taking profits. Buy low, sell high may be the oldest cliché in the book, but it's still the most valuable piece of advice an investor can heed.
Navigating the turbulent waters of the financial market is a challenge, but with a disciplined strategy, knowledge, and patience, you could turn these trials into triumphs. 2022's bottom-dwellers can become 2023's success stories. The future of investing always has room for redemption and growth - for those who are ready to learn from their past.
This is not financial advice and you should always do your own research before investing in any securities or cryptocurrencies.
Sci-Tech
By Keyann, Software Engineer in Web3
Visualizing Cryptography
When it comes to programming, specifically full-stack development, i’ve learned a lot in the past year and a half. I feel more and more confident that I’m a senior engineer at this point.
But most of the valuable skills and knowledge I’ve acquired and use on a daily basis that enabled me to get a job and perform well at it, didn’t come from school or small coding projects like a simple notes app or web scraper, as much as it came from actually solving problems and taking on bigger, more long term projects, whether personally or at work. There’s so much I learned about how to code, after I learned to code.
Below is a list of questions and answers that I wouldn’t have been able to answer 2 years ago but, in my opinion, highlight strong qualities in a full-stack developer, which can help you impress interviewers or perform better at work.
SDLC: What is the SDLC, and what are some key stages for you in your development process?
The Software Development Life Cycle (SDLC) is a process framework that outlines the steps and iterations involved in developing software applications, such as Requirements Gathering, System Design, Implementation, Testing, Deployment, and Maintenance and Feedback. As a developer, I really value requirements and design. Properly conducted requirements gathering and and systems design streamlines up the implementation stage, reduces iterations, and optimizes focus. If you don’t properly design, there’s a much higher chance your implementation is inadequate. It either won’t work in all edge cases, be insecure, or incompatible with other systems or 3rd party services, which will require you to spend time refactoring code and repeating the initial task.
Typed Languages: How do Typed languages enhance type safety and aid in writing code? As an example how does Typescript differ from Javascript, or C# from Python.
TypeScript is basically javascript but typed-based. It’s developed by Microsoft and well maintained. It can be used in conjunction with Node.js to develop backend systems and APIs. TypeScript allows developers to catch type-related errors earlier in the development process, such as in their IDE rather than during runtime, making it easier and quicker to write robust code, for those that are experienced with the language.
Programming Language choice: What’s your favourite programming languages and frameworks, and which would you choose for project?
I like Typescript and Javascript as languages, as well as frameworks like NextJs, NodeJs, and React. They all have a large and active community making them well maintained, easier to find examples, and use existing code to build applications. NodeJs, specifically, has an event-driven, non-blocking I/O model, which allows it to handle large numbers of concurrent connections efficiently, making it well-suited for building scalable and high-performance backend systems. That said, if i’m working on a team I’d consider the other’s fluency in a particular language or framework before making a decision.
APIs: Why are APIs crucial for building scalable, secure, and interoperable backend systems? What are some best practices for designing APIs?
APIs provide a critical layer of abstraction between backend systems and clients or users, and should be designed to be robust, scalable, and secure.
Microservices: How do microservices differ from monolithic architectures, and what benefits do they provide in terms of maintenance, scalability, and agility?
Microservices provide a modular and flexible approach to building backend systems, which can be easier to maintain and scale than monolithic architectures.
Software Design Principles: What are some essential software design principles, and how do they contribute to building maintainable and flexible backend systems and APIs?
Key principles like SOLID principles, which include Single Responsibility, Separation of Concerns, Dependency Inversion principle, encapsulate a set of patterns to decouple code, which promotes maintainability and flexibility. Similarly, DRY principles (Don’t Repeat Yourself), promote reusability and maintainability. Additionally, consistency. Code is much easier to read and maintain if it adheres to consistent conventions, like naming or error handling.
Software Design Patterns: what are some software designs pattern that help in organizing code and separating concerns in backend systems and APIs?
MVC (Model-View-Controller) is indeed a software pattern, used to separate concerns and organize code in a structured manner.
Similarly, DAL (Data Abstraction Layer) helps facilitate separation of concerns. Abstraction and encapsulation help hide implementation details. If a function is used or called in multiple instances of your application, you don’t want to have to define or refactor each instance. It should be centrally written somewhere, this way you only have to change its implementation details in one instance as opposed to each of them.
Singleton patterns, dependency injection, provide similar benefits, except towards objects instead of function. If you’re constructing a client object, like your database connection, you don’t want to construct the object and declare credentials each time you need to query it. This leads to repeated code, makes it harder to maintain, and may lead to indirect consequences like poor connection management or memory leakage. Instead, you define and export it from one instance, using a singleton pattern, and inject the credentials from one spot, using a dependency injection. Other good patterns might include factory pattern
Tools and Services: Which are some tools and services you’ve used in your stack, and why?
Tools and services, such as GitHub, VS Code, Digital Ocean/AWS / Azure, PgAdmin for Postgresql, Prettier, Postman, Sentry, Swagger, Docker, can help to simplify the development, deployment, and management of applications.
Testing and Debugging: What frameworks and tools can be utilized for writing comprehensive tests and debugging backend systems and APIs, and why are testing and debugging important for ensuring system reliability?
Testing and debugging are critical aspects of building and maintaining backend systems and APIs, and should be supported by tools and frameworks such as Jest, or editors like VS Code.
Error Handling and Logging: How can effective error handling practices, along with centralized logging, enhance the reliability and maintainability of backend systems and APIs?
Implementing proper error handling with clear messages, proper try/catch blocks, and centralized logging tools, like Sentry, for effective diagnosis and issue tracking.
Docker: What is Docker, and how does it simplify the packaging, deployment, scalability, and collaboration aspects of backend systems and APIs?
Docker is a platform that ‘containerizes’ applications to simplify packaging and deployment, ensuring consistency across different environments to facilitate collaboration, maintainability, scalability.
Documentation: How do you document your code to improve communication, readability, and learnability?
By maintaining a proper README in your repo or a central document in the cloud, with clear instructions on how to run, and maintain the app. If the code has any strict software patterns, ambiguous names, or vague acronyms, there should be a reliable reference to it and enforce it.
All this said, if this is all new to you, then it’s also important to be aware of premature optimization, so don’t worry too much when trying to learn either. But by knowing these principles, you can save you and your coworkers hours or even days per week, and your company 10s of thousands of dollars overall.
Paradigm Shift
By Roman Kuittinen-Dhaoui, BBA (Hons.), CPHR Candidate
Internal Promotions
Every interaction in the workplace carries significance, from emails and meetings to conversations and projects. Each action serves as a deposit into the social capital accounts of the people you engage with. Think of it as building a referral network where you accumulate positive balances. This social capital is crucial for positioning yourself for internal transfers, external promotions, and other career opportunities.
By consistently demonstrating your value and building a rock-solid reputation over time, you cultivate a reservoir of trust and support. Ideally, when an opportunity arises, your reputation should be so strong that your boss becomes your biggest advocate, confidently recommending you to hiring managers. In internal transfers, where your current department is aware of your high performance, the hiring process may become a mere formality, as they already recognize your capabilities.
However, securing a promotion isn't always solely about being the most qualified candidate. Sometimes, it involves factors like grooming a successor or maintaining performance standards. For example, a leader shared an anecdote where she missed out on a promotion because she hadn't identified a clear replacement for her current role, while another candidate had effectively prepared someone to step into their shoes. Promoting her would have created a significant void in her current position, while the other candidate had a smooth transition plan in place.
It's important to acknowledge that insecure individuals might perceive high-potential colleagues as threats and attempt to hinder their career progression. This behavior aligns with Robert Greene's rule of power, "never outshine the master." While it's crucial to make your superiors feel comfortable, elite leaders go beyond that by actively developing their team members and building a strong bench of talent. They understand that their own success is interconnected with the success of their subordinates and work towards creating opportunities for growth.
TLDR:
By consciously building strategic relationships, nurturing social capital, and positioning yourself as a reliable and high-performing professional, you increase the likelihood of receiving internal transfers, external promotions, and other career advancements.
As a leader, you can foster the growth of your team members and actively work towards your own promotion by cultivating a pool of talented successors.
(Head)Space
Improving your odds of success: how to learn and get good fast.
By Keyann
Going hand in hand with my tech piece above, I’m going to shed light now on the mindset that enabled me to advance in programming.
I take all my strategy from what I learned practicing MMA.
With martial arts like jiujitsu, but perhaps any competitive sport, you really see all the factors that separate people’s progress and growth. Rarely does it boil down to genetics, age, or wealth. It usually boils down to mindset and ethic.
Consistency Rate: You can show up once a week or you can show up twice a day. A person who starts and goes every day will out-pace someone, who’s been there for years but only goes twice a week, within a couple months.
Discipline: Sacrifice is required. You may prefer partying and getting lit, or even just relaxing at home and watching Netflix, but that’s definitely not going to enable your growth. You gotta discipline yourself to show up consistently.
Humility and Perseverance: Your ego hinders growth. The quickest and easiest way to learn what works is to learn what doesn’t work, but you can’t do that if you’re unwilling to take on challenges, ask questions, fail or look inferior. The most common reason I hear from people for not coding is that it’s ‘hard’ or ‘frustrating’.
Perspective: What’s harder, showing up to the gym every day, or showing up every other day without energy because your stamina isn’t conditioned? You think showing up is hard but if you can train your mind to perceive not showing up as even harder on you, then you’ll have an easier time showing up consistently.
Deep learning. You don’t improve unless you actually seek and focus on what you’re doing wrong, what works, and why.
For example, do you have a strategy that’s tried and tested or do you wing it and hope for the best that you’re training somehow prepped you? For instance, I got way better when I picked a sequence of moves, like wrestling take-down → to guillotine choke → rear naked choke if guillotine fails → arm bar if chokes fail. I then drilled this sequence over and over, improving upon it each way and time someone blocked it.
Similarly with coding, I got way better when I stopped trying to learn every language and technology, and instead focused on a few languages, for a few technologies, for a few industries, and repeated that over and over for a long period of time.Diverse sources and circumstances: If all you ever do is just spar at your one gym, you’re not going to learn as much as if you drill and spar across different gyms, competitions, seminars, or watch videos online, to get the most perspectives possible.
A few months of consistent deep work, where you persevere through challenges and think deeply about your lessons will compound tremendously in the long run.
Company (software) of the Week
GrapheneOS
GrapheneOS is an open-source privacy and security-focused mobile operating system that's based on Android. It's designed to provide a higher level of security than the standard Android OS while still maintaining the usability and performance of the original system.
One of the primary goals of GrapheneOS is to improve the privacy and security of the user's data. It achieves this through various enhancements such as improved app sandboxing, hardware security, and network security.
GrapheneOS also offers advanced features that aren't available in the stock Android system, including more granular permissions control and a hardened memory allocator.
Here are some key features of GrapheneOS:
Open Source: GrapheneOS's codebase is open source, meaning anyone can review, audit, and contribute to its development. This transparency provides an additional layer of trust and security.
Hardened Memory Allocator: GrapheneOS uses a hardened memory allocator to prevent certain types of memory corruption attacks.
Enhanced Permissions: GrapheneOS offers more granular control over app permissions than standard Android, allowing users to have better control over their data and privacy.
Sandboxing: GrapheneOS uses enhanced sandboxing to isolate apps and system components from each other. This makes it harder for an attacker to compromise the system even if they manage to exploit a vulnerability in an app or system component.
Security Updates: GrapheneOS provides regular security updates to protect users from known vulnerabilities.
Remember, while GrapheneOS provides enhanced security and privacy features, no system can guarantee complete security. It's important to follow best practices for privacy and security, such as using strong, unique passwords, keeping your device and apps updated, and being cautious about the apps you install and the permissions you grant them.
Written by: Vlad Estoup, Keyann Al-Kheder, and Roman Kuittinen-Dhaoui