<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: ladyofcode</title>
    <description>The latest articles on Forem by ladyofcode (@ladyofcode).</description>
    <link>https://forem.com/ladyofcode</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F551581%2F2bbadc4f-0ffb-4b7a-8114-2ad169994d57.jpg</url>
      <title>Forem: ladyofcode</title>
      <link>https://forem.com/ladyofcode</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ladyofcode"/>
    <language>en</language>
    <item>
      <title>Factors to consider in choosing a tech stack for a project</title>
      <dc:creator>ladyofcode</dc:creator>
      <pubDate>Tue, 30 Jul 2024 02:06:48 +0000</pubDate>
      <link>https://forem.com/ladyofcode/choosing-tech-for-a-project-2368</link>
      <guid>https://forem.com/ladyofcode/choosing-tech-for-a-project-2368</guid>
      <description>&lt;p&gt;In the middle of writing a rant and a half (thanks, Twitch chat), I ended up with a list. That list &lt;em&gt;kept&lt;/em&gt; growing, so it's now its own article instead.&lt;/p&gt;

&lt;p&gt;Below is a non-exhaustive list of things I consider when picking a tech stack for a project. The weighting of all of these differs between projects. What I'm looking for is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How flexible is the stack?&lt;/li&gt;
&lt;li&gt;Where does customisation to the project happen?&lt;/li&gt;
&lt;li&gt;How will the piece of tech affect the wider workflow and pipeline it's a part of?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The list
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Team presence&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Teams are a double-edged sword; sometimes decisions are made for us, and at other times are a minefield of opinions. Often we'll need to take everyone else's (everyone relevant 🫥) strengths and views into consideration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why does it perform well?&lt;/li&gt;
&lt;li&gt;Where are the bottlenecks?&lt;/li&gt;
&lt;li&gt;How does it perform at scale (not just for a li'l starter repo)?&lt;/li&gt;
&lt;li&gt;How is the tech managed at scale?&lt;/li&gt;
&lt;li&gt;How does this piece of tech compare to other similar pieces of tech?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Benchmarks&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There are &lt;em&gt;many&lt;/em&gt; different benchmarks. You'll have to look and consider the relevant ones for your use cases.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How are the tests performed?&lt;/li&gt;
&lt;li&gt;Are the tests standardised, and appropriate?&lt;/li&gt;
&lt;li&gt;Are they updated?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are there any massive vulnerabilities?&lt;/li&gt;
&lt;li&gt;Are there special features to address security concerns?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Developer experience&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this a test of spiritual endurance, or will I be mentally frolicking through a meadow?&lt;/li&gt;
&lt;li&gt;Are there features I appreciate?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;People have varying opinions on these —  just take a look at the CLI- vs GUI-based crowds. If you prefer GUI tools just be prepared for someone, somewhere, who won't take you seriously as a developer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Replaceability (of me!)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Aside from being convenient for my employers, what about me (yes I am &lt;em&gt;definitely&lt;/em&gt; making everything about me here)?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Should I want to leave, will my employers find a replacement quickly?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Side note: There's no need to fabricate a situation where one can't be fired by using more complicated tech. Do good work, be a good employee, and they won't want to fire you. It's not like you work in DevRel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maintenance&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How difficult is it to maintain a project once it's 'completed' by me or others?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(We know projects never get finished - they're either maintained or confined to the depths of Davy Jone's Repo).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compatibility/integration&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How compatible is the tech with any existing tech or tooling?&lt;/li&gt;
&lt;li&gt;How does the tech integrate with other tech we're looking at in the stack (especially for testing)?&lt;/li&gt;
&lt;li&gt;How seamless is the integration process?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Ecosystem and support&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In my case, if I'm picking a new technology, I'll need either solid documentation or a community to badger if the documentation is sub-par, which is often the case.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How strong is the community surrounding the tech?&lt;/li&gt;
&lt;li&gt;How responsive are they?&lt;/li&gt;
&lt;li&gt;How many plugins/tools have been made available for development?&lt;/li&gt;
&lt;li&gt;How easily readable are the docs?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Speed of building&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Believe it or not, not everything has to be built ASAP. There are tradeoffs for everything - if there's time to learn tech to use the right tool for the job, that is preferable.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does this need to be really quick?&lt;/li&gt;
&lt;li&gt;If so, is the level of familiarity important?&lt;/li&gt;
&lt;li&gt;Is generating income quickly (or a deadline) from the product factoring into my decisions?&lt;/li&gt;
&lt;li&gt;If there's the added difficulty of adding certain features without any existing plugins or libraries to make it quicker, how will that affect the time to implement?&lt;/li&gt;
&lt;li&gt;How steep is the learning curve?&lt;/li&gt;
&lt;li&gt;Will I need to purchase training?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cost&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What costs and resources will be affected when it comes to building?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Future-Proofing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Using outdated tech can hurt projects.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this technology 'future-proof'?&lt;/li&gt;
&lt;li&gt;How frequently is the tech being updated i.e., will it become obsolete soon, especially at risk of security updates or clashing as a dependency?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Vendor Lock-In&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not always a bad thing... But usually not preferable.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is there a risk of vendor lock-in?&lt;/li&gt;
&lt;li&gt;How easy is it to switch to a different technology if needed?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Compliance/regulations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Who knew laws are a thing?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are there any compliance and regulatory requirements to consider?&lt;/li&gt;
&lt;li&gt;Does the technology meet industry standards and regulations?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Whew!
&lt;/h2&gt;

&lt;p&gt;That was long. Congrats and condolences on making it this far. What else do you look for?&lt;/p&gt;

&lt;p&gt;Perhaps I should make this into a checklist as a part of a website funnel, eh? "20 things to look for when you start a project - just enter your email below". Too bad I don't care.&lt;/p&gt;

&lt;p&gt;Good luck with your projects!&lt;/p&gt;

</description>
      <category>planning</category>
      <category>design</category>
      <category>stack</category>
    </item>
    <item>
      <title>How being a designer reduced my pedantry in arguments and affected my language</title>
      <dc:creator>ladyofcode</dc:creator>
      <pubDate>Mon, 19 Feb 2024 19:45:41 +0000</pubDate>
      <link>https://forem.com/ladyofcode/how-being-a-designer-reduced-my-pedantry-in-arguments-and-affected-my-language-1i4m</link>
      <guid>https://forem.com/ladyofcode/how-being-a-designer-reduced-my-pedantry-in-arguments-and-affected-my-language-1i4m</guid>
      <description>&lt;p&gt;Design has impacted how I handle myself in various situations across all spheres of my life - personal, professional, social, and everything in between. More specifically - trying to become better at design has led me to practice a certain subset of skills involving empathy and related characteristics.&lt;/p&gt;

&lt;p&gt;I try to do things to the best of my ability. When I first started learning about design as a discipline beyond the confines of graphic design, which was my first introduction, I settled on a  notion of design consisting of two things: how well we understand people, and how well a solution could be creatively tailored to that understanding. I focus on the former in this article; that's where this all started: the psychology of people.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/1Evwgu369Jw"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;It could be said this was a likely effect of my journey into adulthood. I venture that this maturation meant I was more receptive to what I could understand and the depth of what I was able to learn and subsequently apply. These changes also started fairly early in my twenties and well before my current capabilities. At this stage of my life (thirties, o no), the jar of fucks I have to give about most energy-draining things is slowly emptying and being replaced with cookies, which are far tastier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conflict resolution
&lt;/h2&gt;

&lt;p&gt;One of the areas heavily impacted by design is the way I handle arguments. This was most easily seen in text. The level of pedantry to counter every single point was excruciating; more so if I was engage in an argument with someone with the same behaviour.&lt;/p&gt;

&lt;p&gt;At some point I subconsciously decided that being right wasn't worth it. Arguments are unavoidable; ugliness isn't worth the effort. Leaving my ego at the door was nigh painful; becoming outcome-focussed meant resisting the urge to comment on everything and instead focus on resolving the conflict. &lt;/p&gt;

&lt;p&gt;At this point in my self-development journey, I no longer feel wronged in a similar manner. How people behave is a reflection of themselves, and not necessarily myself; who am I to take their feelings personally? Those are theirs, and they're usually valid. Most people I engage with (luckily!) aren't unreasonable, and feelings on both sides can be valid even if they're contradictory - which leads me to my next point:&lt;/p&gt;

&lt;h2&gt;
  
  
  Both can be true
&lt;/h2&gt;

&lt;p&gt;There is a lot of black-and-white when it comes to people being steadfast in their emotional standpoints when the reality is we're swimming in a grey area. I find a lot of my responses these days have become 'both can be true'. Someone could feel hurt at something seemingly innocuous I said that wasn't intended to do so; I don't have to feel like I did anything wrong (depending on what it is), but I can still apologise for having that effect. Someone hurting, or being right (perhaps with a hint of superiority or smugness, hm? Yes, the irony was intentional 😆) - what's more important? Most people aren't careful with language in they're communicating.&lt;/p&gt;

&lt;p&gt;Another design epithet that hit home: focus on what people mean, not what they say. Imagine the agency I felt when I discovered active listening skills.&lt;/p&gt;

&lt;h2&gt;
  
  
  Character development
&lt;/h2&gt;

&lt;p&gt;Early on I came to the conclusion people are the eventually the receivers of most things we do - be it ourselves or someone else. Even when we do things for altruistic purposes, we usually benefit internally to some degree. Being kind &lt;a href="https://theconversation.com/five-reasons-why-being-kind-makes-you-feel-good-according-to-science-92459" rel="noopener noreferrer"&gt;makes us feel good&lt;/a&gt;. While I became more kind and enjoy helping people, I became selective to whom I gave my energy and no longer tolerated toxicity.&lt;/p&gt;

&lt;p&gt;Note that this doesn't mean one must tip-toe around the feelings of others all the time. In reading the situation 'correctly' we're able to make more appropriate decisions; personally, I'd rather someone found me to be an asshat only when I intended to be one (and yes, I do this, albeit rarely!).&lt;/p&gt;

&lt;h2&gt;
  
  
  Changes in communication
&lt;/h2&gt;

&lt;p&gt;Being empathetic and outcome-focussed in more difficult conversations has required changes in communication both verbally and in text:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Language: The nature of the language I use is more tactful than it used to be. I've always been straightforward in communicating issues, but not necessarily as careful with my language.&lt;/li&gt;
&lt;li&gt;Efficiency: I hesitate to call myself articulate, as I could be more concise and efficient, so I often describe myself as wordy or talkative (oh, the &lt;em&gt;irony&lt;/em&gt;). I would like to think I've become better at being concise when the situation warrants it.&lt;/li&gt;
&lt;li&gt;Reception: Fewer text walls in social messaging apps or emails. Whatever is being communicated often gets amplified and tinged with overwhelm, which is not something I would like received. Calls are better.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My use of an obscene number of emotes and emojis has remained, however. They're a fantastic indicator of tone, which can be difficult to glean through text. I'm &lt;a href="https://youtu.be/dQw4w9WgXcQ?si=dtXDi5MVdSzVH77R" rel="noopener noreferrer"&gt;never gonna give them up&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Hehe. :3&lt;/p&gt;

&lt;h2&gt;
  
  
  There can be downsides
&lt;/h2&gt;

&lt;p&gt;There's a lot I've learnt about handling people. Ultimately, much about becoming a better designer was tightly coupled with becoming a better person. Empathy overload combined with kindness can contribute to deteriorating mental health. If someone were to go down this route of self-development with empathy there needs to be growth of self-awareness and emotional regulation. Boundaries need to be slammed down when appropriate, and protected. I may have a long way to go, but the learning process has been invaluable in many facets of my life already.&lt;/p&gt;

&lt;h2&gt;
  
  
  In conclusion
&lt;/h2&gt;

&lt;p&gt;In giving advice to developers, I encourage them to learn about design: at minimum learn to have more empathy for users, if nothing else - though there's plenty on designing effective systems and solutions that is relevant to a developer, especially if you work in small teams or alone. I advise designers to learn some code too; many who take their work seriously do it because they value that understanding. &lt;/p&gt;

</description>
      <category>design</category>
      <category>empathy</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Be a paradigm-agnostic developer</title>
      <dc:creator>ladyofcode</dc:creator>
      <pubDate>Sun, 11 Feb 2024 20:22:39 +0000</pubDate>
      <link>https://forem.com/ladyofcode/be-a-paradigm-agnostic-developer-3l8g</link>
      <guid>https://forem.com/ladyofcode/be-a-paradigm-agnostic-developer-3l8g</guid>
      <description>&lt;p&gt;Programming paradigms dictate the way programs are implemented - conceptually, they give them a specific structure, style, and characteristics. I use 'paradigm-agnostic' to mean someone who doesn't constantly advocate specifically in favour of one programming paradigm.&lt;/p&gt;

&lt;p&gt;Do you &lt;em&gt;need&lt;/em&gt; to be paradigm-agnostic?&lt;/p&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;Plenty of developers make a great living having learnt one language, and perhaps a relevant framework, as well.&lt;/p&gt;

&lt;p&gt;So should you?&lt;/p&gt;

&lt;p&gt;That depends on the kind of work you want to do, how far you're taking your career, and, by extension, the kind of developer you want to be. I'd answer 'yes' for any of the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Architecting systems&lt;/li&gt;
&lt;li&gt;Detecting anti-patterns&lt;/li&gt;
&lt;li&gt;Becoming a highly-experienced 'senior developer'&lt;/li&gt;
&lt;li&gt;Reaching the mythological mythological unicorn developer of legend&lt;/li&gt;
&lt;li&gt;In rarer instances, when your favourite not-favourite language decides to migrate or include features from another (guess who had it easier when JS and React started leaning into the functional paradigm, &lt;em&gt;ahem&lt;/em&gt; 👀)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Admittedly, these things are all related; I'd file them under 'being a great software engineer'. &lt;/p&gt;

&lt;p&gt;During an interview for which I was approached once upon a time, the interviewers (both tech people - the founder and CTO) specified that while solid React developers were aplenty and easy to come by (&lt;em&gt;ouch&lt;/em&gt;), they wanted someone with strong programming skills: someone who could spot anti-patterns and be responsible for the health of their codebase. 'Someone who can actually program'. That stuck with me.&lt;/p&gt;

&lt;p&gt;If you're going to be doing actual software engineering, and not simply coding, that suggests you're moving across numerous projects with different languages, tooling, and architecture. To navigate them well - or, further to that - pick and use the right languages and tools for the project, being able to understand their applicability is important. Being able to use a variety makes &lt;em&gt;you&lt;/em&gt; more employable as well as benefiting projects, too; a business may be less inclined to feel limited by their developers' language knowledge.&lt;/p&gt;

&lt;p&gt;Truly experienced developers will often have a personal preference, and that's fine - but they won't use this as a reason to pick something for a project, like children over Pokémon vs Digimon (did you just pick one internally? 😆). I know the line height isn't especially large, but you should be able to read between them and hide that sort of &lt;em&gt;paradismal&lt;/em&gt; behaviour if you ever feel inclined towards it.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to get there
&lt;/h2&gt;

&lt;p&gt;Learn different languages with different paradigms, if that wasn't obvious. I'm sure it was. But do so with intention:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One of the best things you can do is reinvent the wheel in different paradigms, across multiple languages (e.g. manipulating arrays) and understand how they work under the hood. This will help build the mental model for each paradigm. The more you work with them the easier it'll get.&lt;/li&gt;
&lt;li&gt;Understand how algorithms and data structures are implemented within different paradigms.&lt;/li&gt;
&lt;li&gt;Learn best practices for various languages and tooling. You don't have to memorise them all; it's more about doing things well. Patterns will reveal themselves and those will stick.&lt;/li&gt;
&lt;li&gt;Actual understanding is important. Doing a course quickly with a couple of cookie-cutter projects isn't necessarily going to consolidate that understanding internally. Be thorough.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I only realised how useful this was after I had done this for years, courtesy of my degree, and it's something I recommend others to look for in their education. This was out of sheer luck; it's difficult to be intentional about picking a degree as a noob.&lt;/p&gt;

&lt;p&gt;If that's something you decide to do, good luck - and don't forget to make learning enjoyable!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>softwareengineering</category>
      <category>tutorial</category>
      <category>programming</category>
    </item>
    <item>
      <title>Things you should know before learning Three.js</title>
      <dc:creator>ladyofcode</dc:creator>
      <pubDate>Sun, 04 Feb 2024 19:36:59 +0000</pubDate>
      <link>https://forem.com/ladyofcode/things-you-should-know-before-learning-threejs-2p70</link>
      <guid>https://forem.com/ladyofcode/things-you-should-know-before-learning-threejs-2p70</guid>
      <description>&lt;p&gt;For one of my 100-Day Challenges, I chose to dive into &lt;a href="https://threejs.org/" rel="noopener noreferrer"&gt;Three.js&lt;/a&gt;, a JavaScript 3D library. It's easy to start learning, and it becomes difficult to master with the inclusion of shaders.&lt;/p&gt;

&lt;p&gt;If you're too lazy to click that and don't know, it leverages &lt;a href="https://www.khronos.org/webgl/wiki/Main_Page]" rel="noopener noreferrer"&gt;WebGL&lt;/a&gt; . For the portion of readers who are consistently and ignorantly (fair, we all do it) in character:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WebGL is &lt;a href="https://www.khronos.org/opengles/" rel="noopener noreferrer"&gt;OpenGL&lt;/a&gt; wrapped up for the web.&lt;/li&gt;
&lt;li&gt;OpenGL is an API for rendering 2D and 3D vector graphics.&lt;/li&gt;
&lt;li&gt;Vector graphics are defined by equations (like SVG - Scalable &lt;strong&gt;Vector Graphics&lt;/strong&gt;) instead of storing data for each pixel (like JPEGs!)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are important to acknowledge. Three.js requires an understanding of multiple things to make decent headway:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Foundations of programming&lt;/li&gt;
&lt;li&gt;Solid vanilla JavaScript skills, along with HTML and CSS&lt;/li&gt;
&lt;li&gt;Understanding of the DOM - how to access elements and manipulate them&lt;/li&gt;
&lt;li&gt;3D modelling skills; building models, lighting, structuring scenes, and so on&lt;/li&gt;
&lt;li&gt;Art! Understanding colour, perception, and so on to make something appealing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Three.js is a library sitting staunchly in that intersection of tech and art.&lt;/p&gt;

&lt;p&gt;That's not to say someone couldn't get started without those. These skills have to be developed anyway to create beautiful pieces of work - either before starting Three.js or along the way. Personally, I wouldn't recommend learning Three.js to someone who just started learning how to code, but I wouldn't stop them if they had the determination either. I could just imagine their developer training montage set to Eye of the Tiger, burning their retinas instead of the midnight oil. Developers may be masochists but individuals who persevere through Three.js (or WebGL, or OpenGL - or to be honest, any graphics coding) early into their programming foray are next-level. 💀&lt;/p&gt;

&lt;h2&gt;
  
  
  3D modelling
&lt;/h2&gt;

&lt;p&gt;Three.js is particularly intertwined with skill in 3D modelling; the best experiences feel like a brilliant combination of art and technology. It's best to start with &lt;a href="https://www.blender.org/" rel="noopener noreferrer"&gt;Blender&lt;/a&gt; early - it's forever free, and open source. Autodesk's Maya is also freely available for students with an academic email address; I'd recommend it for someone who wants employment at places that consider Maya the industry standard - a contentious topic if Xwitter is anything to go by!&lt;/p&gt;

&lt;h2&gt;
  
  
  Shaders
&lt;/h2&gt;

&lt;p&gt;Shaders, the little programs that manipulate images before they're rendered, are where mastery lies. Shader programming can be a bitch and relies heavily on maths and understanding textures. Have a look at &lt;a href="https://www.shadertoy.com/" rel="noopener noreferrer"&gt;Shadertoy&lt;/a&gt; to see what people accomplish without much on the 3D model front.&lt;/p&gt;

&lt;p&gt;I found myself needing to go back and refresh my maths to understand some of the programming involved. This process can be complex and take &lt;em&gt;quite&lt;/em&gt; some time; I had to return to maths at the pre-calculus level and take it from there because the kind of work I do requires none of that whatsoever. If matrices, vectors, geometry, and the like aren't things you're intrinsically motivated to understand, you'll cap out at which level you can use Three.js.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tips for your learning journey
&lt;/h2&gt;

&lt;p&gt;If you're not going to do a solid course on Three.js, I suggest having a look at their syllabi, ensuring you learn about the topics listed. Do a 3D course of some kind if you have no familiarity with 3D modelling at all. Watching people build models is also useful once you have some understanding of the software; live and recorded videos have different advantages so give them both a shot.&lt;/p&gt;

&lt;p&gt;Make a pathway based on what you lack. I wouldn't recommend trying to get all the maths sorted early on, unless you're motivated to do exactly that. You could make Agile finally useful for something and cycle around 3D, art, programming, and maths as you manoeuvre the output into increased complexity as your capabilities expand.&lt;/p&gt;

&lt;p&gt;It'll take time, but make sure you're enjoying the process. I still lurk in the recesses of Three.js noobdom and have to revisit various topics every so often in between my other projects and obligations, but the continued enjoyment makes the long journey worth it.  &lt;/p&gt;

&lt;p&gt;glhf 💖&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>threejs</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to get clients as a freelancer</title>
      <dc:creator>ladyofcode</dc:creator>
      <pubDate>Sun, 28 Jan 2024 18:51:14 +0000</pubDate>
      <link>https://forem.com/ladyofcode/how-to-get-clients-as-a-freelancer-2e2h</link>
      <guid>https://forem.com/ladyofcode/how-to-get-clients-as-a-freelancer-2e2h</guid>
      <description>&lt;p&gt;I'd like to make one thing clear before we approach The List:&lt;/p&gt;

&lt;p&gt;Behave like a professional before you start advertising.&lt;/p&gt;

&lt;p&gt;Make a free website, buy a domain, make your profiles, set up the relevant socials, and put some examples of your work out there so people can see what they're signing up for. People will ask for this to verify your work, and to refer you. If you can't verifiably demonstrate what you're capable of, it'll be much harder to gain the trust of someone to pay you to do work for them. At least &lt;em&gt;look&lt;/em&gt; like a professional starting out and demonstrate you are capable of effort particularly if a beginner's skillset is being advertised.&lt;/p&gt;

&lt;p&gt;Okay? Okay. Let us begin:&lt;/p&gt;

&lt;h3&gt;
  
  
  Do volunteer work
&lt;/h3&gt;

&lt;p&gt;This one is for the nooblancers struggling to get pieces into their portfolios. Do a project for a family member, or a local religious institution, or an underfunded organisation/cause you find meaningful. Having something in use is better than nothing, and you can potentially generate leads from that, too.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lower your rates
&lt;/h3&gt;

&lt;p&gt;Another one for the super nublet nooblancers. It's okay to take a pay cut temporarily while you get your network going, especially if you're still learning, like many students are. Just ensure that you are being clear with your clients about this discounted rate (in case they refer you or want additional work done). After I moved countries I cut my rate (my student rate!) for some time until I built up experience, clientele, and the gall to say no to projects I didn't to do and people with whom I didn't want to work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tell everyone
&lt;/h3&gt;

&lt;p&gt;Tell yo' kids, tell yo' wife, tell yo' husband. Everyone should know - your family, friends, and friends of friends. They may refer you if something comes up - to other professionals, if not to potential clients. Your existing network should know.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cold calling and emailing
&lt;/h3&gt;

&lt;p&gt;Cold emailing sometimes works, but be sure to personalise them and make them specific; tailor your emails to the business you're emailing. Canned templates are easy to spot and usually get deleted instantly as spam.&lt;/p&gt;

&lt;p&gt;A step up would be to pick up the phone and call to deliver your pitch.&lt;/p&gt;

&lt;p&gt;A bigger step up? Knock on doors and show up at businesses physically. If you're armed with an understanding of their business needs and highlight it to them, your time and effort may be appreciated enough to get clients.&lt;/p&gt;

&lt;h3&gt;
  
  
  Networking
&lt;/h3&gt;

&lt;p&gt;This is likely going to be where you find your best clients, whether they're your first ones or not. Personally, once I found great clients, their referrals brought me other great clients; they were referred to me because the IT department at my university knew me as someone who did custom design and development work outside of my day job.&lt;/p&gt;

&lt;p&gt;Relationships need to be built with people. Establish trust and provide value before you ask them for things. This applies to both online and offline. Here are some types of relationships to build:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Twitter/X, Instagram, LinkedIn, and other social media sites are underrated for getting projects. You don't need a popular account to share your work and network well; plenty of people get offered work in DMs after building these relationships with people representing businesses or themselves as professionals.&lt;/li&gt;
&lt;li&gt;Join local groups in your niche to network with other freelancers around your industry.&lt;/li&gt;
&lt;li&gt;Start a community of your own with a specific purpose. I'd learnt this when I'd started a community of my own to have fun with tech, but as our reputation grew, so did work requests. Facebook groups are a good example of this and may have communities that operate offline as well.&lt;/li&gt;
&lt;li&gt;Network with other professionals at local meetups.&lt;/li&gt;
&lt;li&gt;Agencies often hire and contract out work, so you could let them know you're available for work. It would be better to develop relationships with them first.&lt;/li&gt;
&lt;li&gt;Join a co-working space.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Post on your local classifieds
&lt;/h3&gt;

&lt;p&gt; -especially if it's free. Post in newspapers if necessary, but online classifieds sites work as well. For me this was Gumtree - I included snippets of my university projects and other paid work in my ad and got responses.&lt;/p&gt;

&lt;p&gt;Side note: people offered items or services in exchange for my services. Bartering is underrated.&lt;/p&gt;

&lt;h3&gt;
  
  
  Freelancing websites
&lt;/h3&gt;

&lt;p&gt;This is here because it should be a part of the list. It is competitive on the most popular platforms and high effort, but not impossible. While I wouldn't dismiss them, I would make this a later-priority item unless there is a local website in which to stand out. It takes effort to bid and handle your rates, but it's definitely doable and beginners have had some success.&lt;/p&gt;

&lt;h3&gt;
  
  
  Special note for web devs and designers
&lt;/h3&gt;

&lt;p&gt;It's easy to start with WordPress sites and similar, popular CMSes, and in particular themes that use page builders. &lt;a href="https://w3techs.com/technologies/details/cm-wordpress" rel="noopener noreferrer"&gt;Over 40% of websites&lt;/a&gt; are built with WordPress, and it's a better tool to pitch to small businesses who want to create and manage their content with a more user-friendly experience than other open-source tools available. These sites are not the most performant, but they don't need to be for small projects.&lt;/p&gt;

&lt;p&gt;A personal opinion here: I prioritise the user experience of my clients over upselling software that would force them to hire someone for small changes, particularly constantly. I pick popular tools and software that are appropriate for my clients' projects; being replaceable is a good thing - the value I bring to the table isn't simply the ability to code. My clients refer me and return with new project requests as a result, and because they have the confidence I'll do right by them and their projects. This is a better reputation to build as a part of your brand.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lastly...
&lt;/h3&gt;

&lt;p&gt;I have to make another point now as I made my final point at the beginning of this article, so here: have a contract ready to sign. You can prepare one from a free template in the meantime while you start generating leads for yourself. Do yourself that favour: be prepared to actually take on work. Good luck!&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>freelance</category>
      <category>beginners</category>
      <category>business</category>
    </item>
    <item>
      <title>'Which programming language should I learn first?'</title>
      <dc:creator>ladyofcode</dc:creator>
      <pubDate>Fri, 19 Jan 2024 19:13:55 +0000</pubDate>
      <link>https://forem.com/ladyofcode/which-programming-language-should-i-learn-first-1i7d</link>
      <guid>https://forem.com/ladyofcode/which-programming-language-should-i-learn-first-1i7d</guid>
      <description>&lt;h2&gt;
  
  
  Spoiler alert: it's not automatically JavaScript
&lt;/h2&gt;

&lt;p&gt;We have on our hands another &lt;em&gt;contentious&lt;/em&gt; topic (at least according to Tech Twitter/X): recommending a language to learn. People are often so unfoundedly opinionated on which language to recommend to coders and staunchly back specific languages much like the fanboying behind PS2 vs. Xbox of yesteryear (yes, emo millennial present 🙋🏽‍♀️). Why aren't we recommending languages the way we'd pick them for projects - or do you just pick your 'favourite' language and roll with it regardless of whether it's appropriate or not for every project?&lt;/p&gt;

&lt;p&gt;I've encountered a variety of opinions on the web:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why do people even bother recommending C or C++&lt;/li&gt;
&lt;li&gt;Learn JavaScript or Python; it's more beginner-friendly&lt;/li&gt;
&lt;li&gt;Everyone should recommend JavaScript because the barrier to entry is easier&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and far too many other, equally grating statements.&lt;/p&gt;

&lt;p&gt;I find the advice varies more with developers who are paradigm-agnostic and can code in a variety of languages;  y'know, the kind of expert who has their preferences but doesn't behave like their favourite fandom &lt;a href="https://en.wikipedia.org/wiki/Shipping_(fandom)" rel="noopener noreferrer"&gt;ship&lt;/a&gt; sailing around the very core of their identity is being attacked.&lt;/p&gt;

&lt;h2&gt;
  
  
  The List
&lt;/h2&gt;

&lt;p&gt;The following scenarios I give are not exhaustive. Here are some languages and stacks I've recommended based on people's situations:&lt;/p&gt;

&lt;h3&gt;
  
  
  'I need to freelance ASAP [with a future in web]'
&lt;/h3&gt;

&lt;p&gt;WordPress, HTML+CSS, and PHP if they can't afford to be selective about clients. Any popular CMS stack works - see what's common in their local area. Copy and paste JavaScript to start with. Use a site builder they must. Doing work for small businesses is an easy way to get started, build a portfolio, and then raise rates. See also: Shopify and Liquid.&lt;/p&gt;

&lt;p&gt;Some agencies just want basic templating skills from a beginner because they do work for smaller businesses or departments. Though few, there are roles that exist requiring just HTML and CSS with minimal JavaScript. UI design skills would likely be more beneficial here than advanced programming skills.&lt;/p&gt;

&lt;h3&gt;
  
  
  'I want to learn enough to get a web dev job'
&lt;/h3&gt;

&lt;p&gt;Pick a popular backend/frontend language and/or framework that jobs popularly request in their local area and start building projects. Companies with a good culture want to invest in their employees and products; they will train them to have good habits. Companies with crappy cultures may not train new employees, or may encourage hacking (the quick-fix kind that breaks things down the line), so be wary. Agencies and companies might want different stacks; have a look.&lt;/p&gt;

&lt;p&gt;The same applies to remote work, but it'll be more difficult to land a junior role without a solid portfolio, particularly without networking.&lt;/p&gt;

&lt;h3&gt;
  
  
  'I want to program well'
&lt;/h3&gt;

&lt;p&gt;C (procedural), followed by object-oriented (perhaps some Objective C =/C++, then Java/C#), then Haskell/equivalent (for functional programming). You'll cover a lot of paradigms, system knowledge, and hone habits you don't even know you'll benefit from until later. Throw in a logic programming language like PROLOG, or assembly (MIPS, anyone?) for additional pain. Algorithms and data structures are good to study. They're prepared for this undergrad level of effort. They'll probably find it easier to pick up other languages after they've willingly spent time tearing their hair out. If my hair were thinning I'd have a valid excuse.&lt;/p&gt;

&lt;h3&gt;
  
  
  'I want to work for govt or large institutional organisations'
&lt;/h3&gt;

&lt;p&gt;Look at the job ads for positions in those departments, and the tech they use in their deliverables. Start with those languages. I can tell you straight off that in my area I know the government uses Java, Spring, .NET, and Angular. SharePoint too. Agencies tend to use Drupal for government department projects. It'll be different in other locales and countries.&lt;/p&gt;

&lt;h3&gt;
  
  
  'I want to analyse my data'
&lt;/h3&gt;

&lt;p&gt;Python, R,  etc. Usually, academics or students are asking me this, and they're doing mostly light work: copying and pasting with a bit of editing. Whatever is most suited to the data they need to process should be the language and tool suite. Sometimes they might just need enough to use a Jupyter notebook and be done with it.&lt;/p&gt;

&lt;h3&gt;
  
  
  'I just feel I should know some code'
&lt;/h3&gt;

&lt;p&gt;Tell code to piss off. If one must, learn problem-solving and planning skills because that is at least transferrable. Most people likely will not be set back by not knowing how to program in their lifetime. Sorry, Gen Alpha &amp;lt;3&lt;/p&gt;

&lt;h2&gt;
  
  
  Juggling priorities
&lt;/h2&gt;

&lt;p&gt;So to even get to the above, in choosing a language one should consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is being created and why&lt;/li&gt;
&lt;li&gt;The ultimate purpose of the projects&lt;/li&gt;
&lt;li&gt;The nature of the projects&lt;/li&gt;
&lt;li&gt;The intentions for the deliverable (some people only want to learn to code to bootstrap apps they can then use to generate income and do something else, and that's fine)&lt;/li&gt;
&lt;li&gt;The job market&lt;/li&gt;
&lt;li&gt;Whether the need for income is dire&lt;/li&gt;
&lt;li&gt;The intentions of the coder for themselves (not everyone cares about being an expert or becoming a senior developer)&lt;/li&gt;
&lt;li&gt;The level of tutorials and documentation available (newer languages often have far less support, &lt;em&gt;especially&lt;/em&gt; at the beginner level)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  In summary
&lt;/h2&gt;

&lt;p&gt;Recommending a language or tool is subjective. It always should be. We spend time debating and considering stacks for every new project we undertake - why should someone seeking advice not benefit from an iota of that deliberation? If someone is already choosing a solution without understanding personal, user, and project needs, perhaps consider what that says about their attitude towards problem-solving.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>tutorial</category>
      <category>learning</category>
    </item>
    <item>
      <title>Coming up with good personal projects - Part 2: Planning and scoping</title>
      <dc:creator>ladyofcode</dc:creator>
      <pubDate>Mon, 15 Jan 2024 16:41:18 +0000</pubDate>
      <link>https://forem.com/ladyofcode/coming-up-with-good-personal-projects-part-2-planning-and-scoping-3471</link>
      <guid>https://forem.com/ladyofcode/coming-up-with-good-personal-projects-part-2-planning-and-scoping-3471</guid>
      <description>&lt;h2&gt;
  
  
  The key to successful, finished projects
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;It was a dark and stormy night&lt;/em&gt;... Not that you noticed, seeing as you were probably holed up in your home, alone, buying a domain name for your next big &lt;em&gt;idea&lt;/em&gt; before it has even materialised. Key point: alone, as in working solo, and not as in a B-rated horror film with a jump scare around the corner.&lt;/p&gt;

&lt;p&gt;To get from that domain name, or idea, to an actual project deliverable, you will require:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A plan; however rough&lt;/li&gt;
&lt;li&gt;Grit; to execute said plan&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are, of course, variable.&lt;/p&gt;

&lt;p&gt;We're also assuming you have the resources to execute said plan. If not, tough cookies.&lt;/p&gt;

&lt;h3&gt;
  
  
  A few things to note
&lt;/h3&gt;

&lt;p&gt;'&lt;del&gt;Art&lt;/del&gt; Software is never finished, only abandoned', as the adage from Leonardo Da Vinci doesn't go.&lt;/p&gt;

&lt;p&gt;'Finished' or 'complete' anywhere in this post refers to software being in an 'acceptably complete' state. That could be a minimum viable product, or it could be every feature that's on the list - the state will be determined by your criteria.&lt;/p&gt;

&lt;p&gt;If you haven't planned a project before, know there is a high likelihood of getting things way off the mark. You may readjust projects quite a bit after working through them. You'll get better at it the more projects you undertake; such is the benefit of developing experience and expertise. Just don't forget to multiply the total time you think it takes by Pi (&lt;em&gt;multiPi&lt;/em&gt;? 😇); I jest, but mildly - that is, in fact, a common attitude for better time estimation.&lt;/p&gt;

&lt;p&gt;It's easier to think in terms of larger milestones first. You may find milestones shifting the more you break them into tasks while you scope and figure out where the complexity lies.&lt;/p&gt;

&lt;p&gt;Lastly, time tracking may be useful for you. Outside of this personal context, it is appropriate to react with abhorrence and distaste, as though you accidentally put soap on your toothbrush instead of toothpaste. Many supervisor-types use it as a way to micromanage or evaluate performance. Never encourage that.&lt;/p&gt;

&lt;h4&gt;
  
  
  A notier note: leave your comfort zone
&lt;/h4&gt;

&lt;p&gt;If you're learning something new at any level, you're likely using tutorials, documentation, and other informative resources.&lt;/p&gt;

&lt;p&gt;Tutorial hell isn't the best place in which to get stuck. People end up doing projects other people have already built forever and that's... Not really anything new. We also stay inside our comfort zone. A few ways to get around this are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do projects you find easier and then add features to them.&lt;/li&gt;
&lt;li&gt;Take more complex projects and break them down into smaller, more manageable tasks.&lt;/li&gt;
&lt;li&gt;Make sure you have ways to get help if you're out of your depth. Learning in a community is usually better for this.&lt;/li&gt;
&lt;li&gt;Add a deadline. A real, tangible deadline, that feels hefty.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The underlying point of a tutorial is to teach you something; not give you a portfolio deliverable. Much like how great artists make a song their own when creating a cover version, you should make projects yours.&lt;/p&gt;

&lt;h3&gt;
  
  
  How planning changes across different types of projects
&lt;/h3&gt;

&lt;p&gt;Obviously, smaller projects should require less planning. There are different ways to plan, and honestly, you don't really want scope creep happening to your &lt;em&gt;planning&lt;/em&gt;. Most work should be done on the actual deliverable. ;)&lt;/p&gt;

&lt;p&gt;Smallest projects: you probably have an idea of how this should pan out without much written planning, and you'll mainly want to be aware of creeping feature lists.&lt;/p&gt;

&lt;p&gt;Larger projects: these take much longer. Duh. 🤣 As personal projects grow to become larger, they tend to require either expertise or more time dedicated towards learning in lieu of the former.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Will the project stay just yours?&lt;/li&gt;
&lt;li&gt;How is the workload getting managed?&lt;/li&gt;
&lt;li&gt;What do you need to learn to produce the deliverable?&lt;/li&gt;
&lt;li&gt;What resources would you need?&lt;/li&gt;
&lt;li&gt;If important, how will you avoid scope creep?&lt;/li&gt;
&lt;li&gt;Is there a deadline, for some reason?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Personal side projects, of course, come in variable sizes. The great thing about ownership of the project being yours is you can adjust as you go.&lt;/p&gt;

&lt;p&gt;Things will change as you learn new information; embrace this attitude early and adapt your plans as you go. It's okay.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tailor the project to your needs
&lt;/h3&gt;

&lt;p&gt;Use shortcuts to help you create the final product you want:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Libraries&lt;/li&gt;
&lt;li&gt;Frameworks&lt;/li&gt;
&lt;li&gt;Programs and services&lt;/li&gt;
&lt;li&gt;Ask experts for advice!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The idea is to not build everything yourself, especially for large projects. Sometimes the point of a personal project is to build it yourself (for your understanding, or whatever), so if that's the point... Have at it!&lt;/p&gt;

&lt;p&gt;I have a piece of off-the-cuff advice:&lt;/p&gt;

&lt;p&gt;Don't use best practices (sometimes!). I know how that sounds - but sometimes, for practice purposes, you're better off having a working project than not much of a project at all.&lt;/p&gt;

&lt;p&gt;A half-baked project will get you further towards your goals than none at all. The preferable solution would be to take a shortcut and use a solution that's already implemented best practices, even if you don't understand them (particularly if there are going to be any security loopholes). Context matters, though; for example, we don't store passwords in plaintext or send them in emails. I hate to say it, but companies exist that do this.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bend to the brain
&lt;/h3&gt;

&lt;p&gt;Don't forget to account for a realistic cadence when it comes to working on the project. What time do you actually have available every week to work on the project? After full-time work, family obligations, socialising, sleep, commutes, and everything in-between - what's left that's going to be spent on the project?&lt;/p&gt;

&lt;p&gt;Our brains are wired differently, and psychology that works for one person may not be suitable for another. Do you need to be able to visualise progress? Can you follow a schedule well ahead of a deadline? If not, how do you need to manage yourself to get there? What do you actually need to get your work done? If something has stopped you in the past, what can you change this time around to help mitigate that?&lt;/p&gt;

&lt;p&gt;If you haven't figured out a system that works for you yet, bear in mind this adds to your cognitive load. Please don't feel guilty if you haven't figured out your own brain yet. It can - disappointingly - take years of trial and error. But hey, real self-development is a lifelong endeavour.&lt;/p&gt;

&lt;p&gt;There are many questions you could ask yourself; the idea is to cultivate the system by which you operate, instead of just the project, as if it exists in its own void.&lt;/p&gt;

&lt;h3&gt;
  
  
  Get the project acceptably finished
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Yes&lt;/em&gt;, yes, we know the old adage - a project is never finished. At best, it enters maintenance mode. Personal projects are regularly 'unfinished', and if this is something you intend to use as a portfolio piece, and the code is public, it's best to leave it in an acceptable state even if archived.&lt;/p&gt;

&lt;p&gt;You can choose some qualifiers ahead of time for different versions of the project. What would be the minimum qualifiers to release it, to consider it done, or usable? What's beyond the minimum, and how necessary are they? They don't have to be necessary; you should just be intentional with your choices and have reasons.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reasons projects fail and how to avoid them
&lt;/h3&gt;

&lt;p&gt;There are a multitude of reasons projects fail, and they're often due to a combination of reasons under the umbrella of terrible project scoping. When it comes to personal projects, you know yourself best (condolences if you don't), so of course you'd need to learn and adjust accordingly. It'll be more difficult to avoid them in the beginning; you can, however, become someone who halts patterns early. That self-awareness will do you better in the long run.&lt;/p&gt;

&lt;p&gt;Some reasons for failure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unrealistic expectations&lt;/li&gt;
&lt;li&gt;Not breaking down larger milestones into tasks with enough granularity&lt;/li&gt;
&lt;li&gt;Poor time estimation&lt;/li&gt;
&lt;li&gt;Poor personal time management&lt;/li&gt;
&lt;li&gt;Resources run out&lt;/li&gt;
&lt;li&gt;Choice of tools and software (How familiar are they to you? Are resources plentiful?&lt;/li&gt;
&lt;li&gt;Scope creep&lt;/li&gt;
&lt;li&gt;Poor communication&lt;/li&gt;
&lt;li&gt;Poor health management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some of these are difficult to avoid without experience. Research and advice will be important for better planning, especially for larger projects. And, more importantly, &lt;em&gt;leave space&lt;/em&gt; for things you won't have accounted for, whether that be time, money, effort, or something else. Plan for your worst days, not your best, and you'll probably have better expectations in the long run.&lt;/p&gt;

&lt;p&gt;The consequences of these variables failing affect your ability to perform - as a human, not just as a creator. Your physical, mental, and emotional energy will be affected. If that happens (for most newbies,  &lt;em&gt;when&lt;/em&gt;), prioritise your health first. Fatigue is easier to handle than burnout, so slow down early. You can always return if you want to.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to scope
&lt;/h3&gt;

&lt;p&gt;Scoping your project out is easy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Step 1: What do you want?&lt;/li&gt;
&lt;li&gt;Step 2: When do you want it by?&lt;/li&gt;
&lt;li&gt;Step 3: ???&lt;/li&gt;
&lt;li&gt;Step 4: Profit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Okay, so while I jest - again - there is some truth to it. Scoping is about defining what will be done, and how:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Define your goals and objectives&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What are you doing? Why are you doing it? Goals are the higher-level achievable outcomes. Objectives are measurable and intended to help towards a goal.&lt;/p&gt;

&lt;p&gt;A clearly defined audience is important, even if that audience is just yourself.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Define the project's deliverables&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What are the important features and capabilities? What are the goals going to achieve?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;List out requirements&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Requirements may involve resources or timelines. A series of deadlines, for example. Requirements can come from any part of the project - you could have a design requirement. Minimum launch criteria are good to consider here. Termination criteria are also good to consider here; what's required to have met the project's purpose?&lt;/p&gt;

&lt;p&gt;Axing criteria is also important - what would be required to end the project prematurely?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;List constraints and exclusions&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What are you going to not do? If there are reasons for this, even better.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Break down the deliverables into milestones&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;...Then break down the milestones into tasks. Keep doing this until you understand the different parts of the project and it looks feasible. Tasks should be actionable and clearly defined.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a roadmap&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Timelines aren't as important for personal projects are juggling multiple personal projects, working better with deadlines, or other specific requirements that involve reasons for deadlines. Finishing a few projects is preferred to many unfinished projects.&lt;/p&gt;

&lt;p&gt;If you aren't pressured, deadlines are less important and you can constantly work on the project until you're happy to consider it finished. At the minimum, order your tasks so you have a roadmap; add your time constraints as required.&lt;/p&gt;

&lt;h3&gt;
  
  
  Organising your projects
&lt;/h3&gt;

&lt;p&gt;Tools!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Trello&lt;/li&gt;
&lt;li&gt;ClickUp&lt;/li&gt;
&lt;li&gt;Basecamp&lt;/li&gt;
&lt;li&gt;Asana&lt;/li&gt;
&lt;li&gt;Google&lt;/li&gt;
&lt;li&gt;Microsoft Projects&lt;/li&gt;
&lt;li&gt;Whiteboard with Post-it notes&lt;/li&gt;
&lt;li&gt;Paper&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're working alone, it'd be more effort to adopt a project management methodology than to simply undertake the project. Personally, I would just spin up a board in Trello or ClickUp Kanban-style; if it's a small project, I keep a to-do list inside my project repository instead. Most of the software's extra features are unnecessary for personal projects - you basically just need to be able to construct a roadmap of some sort.&lt;/p&gt;

&lt;h3&gt;
  
  
  Good luck!
&lt;/h3&gt;

&lt;p&gt;That's it!&lt;/p&gt;

&lt;p&gt;Good luck with your project. As always, I'm happy to hear about it, so feel free to share them &lt;a href="https://twitch.tv/ladyofcode" rel="noopener noreferrer"&gt;during my streams on Twitch&lt;/a&gt;!&lt;/p&gt;

&lt;h4&gt;
  
  
  Thanks
&lt;/h4&gt;

&lt;p&gt;Thanks to &lt;a href="https://twitter.com/adamtolcher" rel="noopener noreferrer"&gt;Adam&lt;/a&gt; for proofreading!&lt;/p&gt;

</description>
      <category>sideprojects</category>
      <category>management</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Coming up with good personal projects - Part 1: Inspiration</title>
      <dc:creator>ladyofcode</dc:creator>
      <pubDate>Tue, 04 Apr 2023 14:00:00 +0000</pubDate>
      <link>https://forem.com/ladyofcode/coming-up-with-good-personal-projects-part-1-inspiration-186p</link>
      <guid>https://forem.com/ladyofcode/coming-up-with-good-personal-projects-part-1-inspiration-186p</guid>
      <description>&lt;h2&gt;
  
  
  Approaching the crux of the project
&lt;/h2&gt;

&lt;p&gt;Contrary to popular belief, a project need not be helpful to other people. If creativity is one of your core personality strengths, tossing aside the notion of usefulness now and again in favour of joy would do you good.&lt;/p&gt;

&lt;p&gt;Let's get into it.&lt;/p&gt;

&lt;h3&gt;
  
  
  What makes a project &lt;em&gt;good&lt;/em&gt;?
&lt;/h3&gt;

&lt;p&gt;A good project is one that properly serves its purpose. So first things first:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why are you doing this project?&lt;/li&gt;
&lt;li&gt;Who is the audience?&lt;/li&gt;
&lt;li&gt;What are you communicating to them?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Explicitly specifying the reason is essential as that'll dictate the type and scope of the project you undertake. You may want to:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Demonstrate capacity: strengths, variety, upskilling, etc. These often go into portfolios.&lt;/li&gt;
&lt;li&gt;Satisfy an emotional need of yours; perhaps you enjoy a challenge and find it fulfilling. 'Because I can' is an attitude plenty of creators have.&lt;/li&gt;
&lt;li&gt;Generate income; whether it's for stability or fuck-you money, both are still valid.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You could end up with something like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As an unemployed designer, I want to showcase what I'm capable of so potential employers understand the breadth of my skill set.&lt;/li&gt;
&lt;li&gt;As a junior developer, I want the ability to build a robust authentication system so I can aim for specific roles above my experience level.&lt;/li&gt;
&lt;li&gt;As a homeowner baited by the very tech I love yet hate so much, I want to program my blinds to open in the afternoon to quell my desire for an anti-hustle culture rebellion.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Did I just user-story a project idea? Yes.&lt;/p&gt;

&lt;p&gt;(Did I just use user-story as a verb? Also, yes.)&lt;/p&gt;

&lt;p&gt;((Do you need to do that? Ye - No. You do not.))&lt;/p&gt;

&lt;p&gt;Tailoring those projects will involve scoping and adjusting the technical depth. Scoping should include 'termination' criteria; when would the project be considered acceptably finished, and when would this be? Detailing this will be approached in Part 2.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Side note:&lt;/strong&gt; If you intend to make money, validate that potential opportunity against customers from your market segment, i.e. you'll need to treat it like a business project, not a portfolio or passion-only piece. When they say 'execution is everything,' that includes making practical business decisions and solving problems in a way that eventually generates revenue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding inspiration for projects
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Solve your own problems
&lt;/h3&gt;

&lt;p&gt;In other words: if you find something inherently annoying or inconvenient, see if there's a way to fix it. Even something small and niggling is a great place to start. Look at your daily routine, hobbies, and other things you may enjoy - or &lt;em&gt;really&lt;/em&gt; don't enjoy. It's okay if you chuck this onto GitHub and it fades into oblivion over the next ten years, forkless and lifeless. It served its purpose.&lt;/p&gt;

&lt;h3&gt;
  
  
  Look for patterns of problems
&lt;/h3&gt;

&lt;p&gt;Finding these patterns requires being observant of the people around you, what annoys or inconveniences them en masse, and some level of knowledge on a specific topic or field. You need that combination to figure out what makes their lives easier.&lt;/p&gt;

&lt;p&gt;Don't solve problems other people have by solving problems for yourself. Pick one.&lt;/p&gt;

&lt;h3&gt;
  
  
  Project-based courses and tutorials
&lt;/h3&gt;

&lt;p&gt;There's no shame in it: pick something new to learn and follow along. Ensure you're actually paying attention instead of going through the motions. You could:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Summarise content in your own words&lt;/li&gt;
&lt;li&gt;Blog your progress&lt;/li&gt;
&lt;li&gt;Struggle through tasks before you go for the solutions&lt;/li&gt;
&lt;li&gt;Play videos at normal speed to consider more deeply&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Additionally, consider customising the project enough so that you don't end up with a cookie-cutter project in your portfolio if that's where it's going.&lt;/p&gt;

&lt;h3&gt;
  
  
  Idea generators and online lists
&lt;/h3&gt;

&lt;p&gt;Go ahead and try out a bunch of them to spark ideas. Remember you'll need to flesh it out and scope it appropriately before embarking on the project. Many of these lists online are general; find a way to customise the project to your needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  May the force be with you
&lt;/h3&gt;

&lt;p&gt;Thanks for reading! I'll see you in Part 2 for planning and scoping. Feel free to catch me on &lt;a href="https://twitch.tv/ladyofcode" rel="noopener noreferrer"&gt;my streams&lt;/a&gt; or in &lt;a href="https://inatlantis.io/community" rel="noopener noreferrer"&gt;Atlantis&lt;/a&gt; if you'd like to chat about your projects. Good luck!&lt;/p&gt;

&lt;h4&gt;
  
  
  Useful resources
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/sindresorhus/awesome" rel="noopener noreferrer"&gt;Awesome lists about all kinds of interesting projects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/codecrafters-io/build-your-own-x" rel="noopener noreferrer"&gt;Build your own x&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/public-apis/public-apis" rel="noopener noreferrer"&gt;Collective list of free APIs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/n0shake/Public-APIs" rel="noopener noreferrer"&gt;Public APIs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://web-dev-resources.com/#/" rel="noopener noreferrer"&gt;Web development resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sharpen.design/" rel="noopener noreferrer"&gt;Sharpen: Open-ended project prompts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://appideagenerator.com/" rel="noopener noreferrer"&gt;App idea generator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://designercize.com/" rel="noopener noreferrer"&gt;Designercize&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.whatshouldidesign.com/" rel="noopener noreferrer"&gt;What should I design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.dailyui.co/" rel="noopener noreferrer"&gt;Daily UI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dailylogochallenge.com/" rel="noopener noreferrer"&gt;Daily Logo Challenge&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Special thanks to:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/MoodyHikmet" rel="noopener noreferrer"&gt;Mahmood&lt;/a&gt; for the link to &lt;a href="https://github.com/codecrafters-io/build-your-own-x" rel="noopener noreferrer"&gt;Build your own x&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/Alomoadev" rel="noopener noreferrer"&gt;Alom&lt;/a&gt;, &lt;a href="https://twitter.com/vonExplaino" rel="noopener noreferrer"&gt;Colin&lt;/a&gt;, Adam, and Mom for feedback on my writing&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>sideprojects</category>
      <category>beginners</category>
      <category>management</category>
    </item>
  </channel>
</rss>
