[HN Gopher] Code-First vs. Product-First
       ___________________________________________________________________
        
       Code-First vs. Product-First
        
       Author : luigi23
       Score  : 37 points
       Date   : 2021-08-29 10:47 UTC (12 hours ago)
        
 (HTM) web link (thezbook.com)
 (TXT) w3m dump (thezbook.com)
        
       | rchaves wrote:
       | Related: https://josephg.com/blog/3-tribes/
        
       | larzang wrote:
       | Context is incredibly important. The author is writing from the
       | standpoint of a startup trying to fine tune an MVP. Of course it
       | doesn't matter if it lasts if you don't know what you're building
       | and rewriting everything isn't hard.
       | 
       | Code-first matters a lot when you're trying to make a 15 year old
       | cobbled-together system last another 15 when you don't have the
       | resources to stop everything for the many engineer-years it would
       | take to do a full rewrite. Anything you touch is going to have to
       | last too and people have to care about adding more technical debt
       | because it's already the 500lb sled they have to drag behind them
       | every single day.
        
       | shureluck wrote:
       | Some useful insights for sure.
       | 
       | Although some programmers care about both product and code and
       | know how to balance it: based on the budget.
       | 
       | Code-first programmers might have not had to face a deadline and
       | a company running out of money. Not all of them are like this,
       | but if you find yourself in this camp, I encourage joining a
       | startup with some eyeballs into the finances as a way to balance
       | that tendency to infinitely nitpick over small code details.
        
         | Andys wrote:
         | In response to budget constraints, I have seen some programmers
         | respond with "maybe the company just shouldn't exist"
        
       | noway421 wrote:
       | Overgeneralising as usual, but I tend to group engineers into 2
       | camps: builders and optimisers.
       | 
       | Builders build product, they can ship something from scratch,
       | doing whatever it takes to take the product over the finish line
       | and in the hands of customers.
       | 
       | Optimisers are the people who like to come to already built
       | products and iteratively solve one bottleneck after the other
       | that builders made while getting from 0 to 1.
       | 
       | Both camps are valuable and both are needed, albeit at different
       | stages of a company life. I tend to think I belong to the first
       | camp.
       | 
       | I think being purely code-first is a temporary phase and you tend
       | to get into the first or the second camp at some point.
        
       | Madeindjs wrote:
       | I not totally agree with this. Architecture is really important
       | because it can make new feature less expensive in term of
       | development. If you judge a work only in terms of final product
       | UX, you miss this point.
        
         | darkhorse13 wrote:
         | I don't disagree with you, but I've also seen working products
         | get thrown away because of "bad architecture", only to waste
         | tons of money and time. The worst part: the users literally
         | never cared either way, they just wanted the product to solve
         | their problem.
        
           | ipaddr wrote:
           | They care later when new features cannot be added, changes
           | are delayed. A bad architecture is sometimes what you need
           | but it will only take you so far.
           | 
           | Architecture is important but not as important as getting the
           | data-model right. We can refactor out bad architecture but a
           | bad datamodel will have missing or inaccessible data since it
           | was created and you cannot get that back.
        
             | darkhorse13 wrote:
             | Not if your company goes bankrupt trying to prematurely
             | upgrade the architecture, which is usually a huge
             | undertaking. I think that's the entire point of the
             | article, the guy who wrote it is clearly using a startup
             | POV.
        
               | xupybd wrote:
               | It makes sense to build a cheap and dirty system to
               | start. Especially if you want to build it then inject
               | loads of cash when it takes off. But it is still a cheap
               | and dirty system.
               | 
               | Too many people do build like this initially but are not
               | willing to pay to fix the mess when it starts to get hard
               | to add new features.
        
             | arcbyte wrote:
             | The data model serves the architecture. The architecture
             | serves the use cases.
             | 
             | Data models are a dime a dozen and are throwaway.
        
         | noway421 wrote:
         | Product-first engineers don't avoid architecture. They tend to
         | know when you can skim on building it, or when the common
         | development tools already provide enough of it.
         | 
         | Sometimes, it's as simple as "frontend, backend, and a way to
         | deploy it".
         | 
         | Not to mention so many developer tooling products out there
         | already decide on the architecture for you. Use anything
         | firebase for example, and you'll be pretty railed in around the
         | way your system is architected.
        
       | sfvisser wrote:
       | Language, syntax, test coverage, performance, coding style,
       | linters, none of it really matters. No code is more beautiful
       | than code that perfectly matches your problem domain. Being able
       | to build a product in terms of high level building blocks that
       | are sensible for the problem you're trying to solve is what makes
       | great code.
       | 
       | A few nice abstractions that allow you to pivot quickly without
       | too much thought. Everything underneath is irrelevant and
       | replaceable.
        
         | noway421 wrote:
         | I agree in spirit. Setting up a linter takes an hour though and
         | is a worthwhile investment even if you are a cash-strapped
         | startup with no customers. Given how many static analysis
         | errors it reports these days, it will pay off dividends with
         | less debugging.
        
         | haolez wrote:
         | There is also the time dimension. Some tools (languages et al)
         | are misfit for some problem domains and might compromise your
         | time to market and the viability of your product idea.
        
       | [deleted]
        
       | xupybd wrote:
       | I get what he is saying but you can't say build it fast without
       | tests, don't worry we will have to rebuild anyway and say you
       | care about quality.
       | 
       | Good quality code is code that has a low bug count and can be
       | changed quickly. Over engineered code doesn't fit as it can't be
       | changed quickly. But the same is true for a hacked together mess.
       | 
       | He has a good point the best programmers will create a simple
       | easy to maintain system quickly. These are generally the
       | experienced and expensive veterans. They won't be pushed into
       | taking silly short cuts, nor will they play with new toys at the
       | cost of the product.
        
         | noway421 wrote:
         | Good programmers know when to cut corners. Not having tests is
         | always a contentious topic, but it's also hard to justify when
         | you don't have a product market fit yet.
         | 
         | But then again, you might be building reusable components that
         | you will reuse when rebuilding or relaunching. So it's better
         | to get test coverage on at least those.
        
         | rchaves wrote:
         | Sometimes people claim to value "quality" of the product over
         | engineering, but by quality they actually mean short-term
         | profits increase, which is very valid for a startup if you ask
         | me
        
           | xupybd wrote:
           | Yeah I agree, I just like people to be straight up about it.
           | In that sense you are building a medium to low quality proof
           | of concept to get revenue. This is the only way many products
           | can ever get off the ground. If everyone knows the costs go
           | way up when you attempt to scale this up that is fine.
           | 
           | I come from a consulting background. Many companies are never
           | willing to pay for that jump in quality. You end up stuck,
           | with a customer that doesn't want to pay for improvements but
           | is always complaining about the cost of new features. You
           | have short deadlines and no scope to fix the mess. It becomes
           | death by a thousand paper cuts. You pass by the same mess
           | over and over never given the time to fix it. Knowing it
           | would have paid for it's self if you had been able to do it a
           | year ago. Sometimes this was something as simple as a
           | database script to replace a manual task you are doing over
           | and over. Once I created such a script but was told I had do
           | it manually for the customer until they paid us for the
           | script. It is truly soul crushing.
        
       | breckenedge wrote:
       | Takes about 2/3 of the article to say that the best programmers
       | do both, but lean slightly toward shipping product faster with an
       | eye on quality. I hope I saved you some reading.
        
       | tdstein wrote:
       | Don't worry. It's an art. Not a science.
        
         | avaldes wrote:
         | Is it when you're writing for example mission critical embedded
         | software?
        
       | bluewalt wrote:
       | I think this mindset can lead to missing opportunities to build
       | products actually faster. Having both code-first and product-
       | first in your company is truly complementary IMO.
       | 
       | CEOs that only wonder "can it be built fast" have a very short
       | term vision. I keep hearing things like: "anyway, we are a
       | startup so we will pivot hence code quality is not important
       | right now, we need to push features!". The thing is, you don't
       | need to reach many years so that "average to bad" code makes a
       | new feature 10x longer to be delivered. Any experienced developer
       | understand how a good code is truly valuable to a company for
       | delivering. And even if it's very true in long term, this is true
       | as well at the very first stages.
       | 
       | But I'd say a very good developer is not product-first or code-
       | first, he's both, you don't need to oppose both profiles. This
       | very good developer is mature enough to know when a code
       | refactoring will lead to a better productivity. And he's mature
       | enough to know that this imperfect function is OK to keep as is
       | because it has no real implication.
        
         | [deleted]
        
       ___________________________________________________________________
       (page generated 2021-08-29 23:00 UTC)