OK so here's the thing. My girlfriend is passionate about designing her own jewelry line. She already has a (Blogspot) website and a nice array of clients, so things are going pretty well on that front.<p>The natural next step would be an own website, including webshop; that should give her more flexibility and would definitely be perceived as more professional than the current blog/shop setup.<p>With me being a software engineer, she turned to me and (as I am a good guy) I want to help her as good as I can. I basically gave her two options. The first option was to create her webshop using Shopify, since they basically have everything she will need at an OK price.<p>The second option was that I would develop a very simple webshop with just the basic functionality she would need, like managing products and orders.<p>Of course she chose the "free" option and because I wanted to learn Django, I was actually glad she did.<p>So I started of developing some basic stuff and gathering "requirements". The thing is, when I started developing ten year ago, this stream of requested features was all fine with me, and I was sure it could be done. I had a "can-do" attitude back then...<p>Now when I hear stuff like "Products should be groupable", what I think of is things like "can a product be in multiple groups?", "can groups be nested in other groups?", "are these groupings based on color or function?", "how we will filter this in the UI?", ...<p>An endless stream of derived requirements will fill up my brain and then I just get to the point where I realize this will all take way to much time to implement and I abandon the project altogether.<p>I guess that my "experience" has made me (maybe too) cautious on which projects I will take on and that this fact will limit my results and success on the long term... Have you guys and girls noticed a similar evolution in your career or am I just getting lazy?<p>Can't wait to know what you all think!
Totally normal. You're not lazy. You just haven't learned how to overcome your own experience yet. Beginners have the advantage of not knowing what pain they're creating for themselves down the road.<p>The solution is simple: just dive in head first. Do the simplest and fastest thing possible. Get something working. Don't worry about extensibility or maintainability that much. Make a mess and then clean it up.<p>Some of the most successful software in the world was terrible in its first versions. Embarrassingly bad.<p>Also: just use Shopify for this, at least until you've got your own version working.
Hah. Yes, you have reached the edge of grey-land where the number of black and white statements become fewer and fewer. :-)<p>Yes this is entirely a function of your experience, so now that you know what can be done your ability to choose is compromised. Its funny because this happens with anything where there is a surplus of the currency [1]. The short answer is that the next step on the journey is to prune meta-requirements. You have this endless tree stretching before you and you start writing the code where you put blocks in the group and you note how it would have to change if it would need something more complex and then you stub that off with a comment like:<p><pre><code> # this only handles one level of grouping to group further
# will require a subclass for groups which identify the type
# and a method for invoking that groups display policies.
</code></pre>
Then move on. People will be amazed when they come to you and say "Uh, we kind of want to group by color..." and you say "Ok" and then blam that change is in. Basically you build your potential into the structure of the code so that if any of these possibilities are realized you can do them quickly.
This parallels my own experience. I too had a "can-do" attitude 10 years ago but now just can't be bothered with many things that I used to spend time on. This, however, is not laziness, it's maturity. You have now reached the level of maturation in your understanding of technology to know that things you learn for a one-off project will be forgotten within 6 months. And you are nearly at the level of maturity in relationships to know that if your girlfriend is truly passionate about selling her jewelry that she can learn to maintain her own eStorefront
I'll quote a tumblrer:<p>"When you except to run into brick walls you usually don’t go as fast as you can. When you let go of fear and focus on results, it’s freeing and effective."<p><a href="http://infjdoodles.tumblr.com/post/28056863738/" rel="nofollow">http://infjdoodles.tumblr.com/post/28056863738/</a><p>Basically, stop thinking about the what ifs. Focus on making something work and relish the result.
don't reinvent the wheel. shopify is good enough and it's an incremental cost on each of her sales. how do you feel about maintaining this code if you guys break up?<p>yeah... your caution is well founded. she's a client (who isn't paying you, in this case). And, you don't want to get this client upset if you are too busy with a paying client to solve her problem. that's not going to be good for your relationship... is it?<p>I think your analysis is good, but it needs to go one step further. is your desire to dive into Django the best option for her long term interest? if she is your first client for a jewelry designer web-shop product, then cool. but if not ask yourself what is in her best interest.<p>And take her out some where nice and romantic after she gets the shopify website set up as congratulations. and surprise her with flowers, a clean kitchen, and a make out session so she feels better when she's frustrated that she can't get shopify to work right.
When building projects people can utter a few sentences that equate to days and days of work for you.<p>Your experience has taught you to check & double check exactly what's really needed.<p>You aren't lazy, else you would have persuaded her to use Shopify. You just don't want your time wasted.
That's why MVPs were invented- define a minimum set of features and stick to the plan and get something out of the door, then build upon it.<p>I find that some of the longest product-related discussions occur over features/edge cases that very few users may need/will seldom occur.