<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="123833" data-post-id="123833">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="mjadczak" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mjadczak/120/3537_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  mjadczak
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="OvermindDL1" data-post="4" data-topic="21540">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/overminddl1/48/2677_2.png" class="avatar"> OvermindDL1:</div>
<blockquote>
<p>Scala isn’t bad for that, better than kotlin, but for working with money and the detail you need with that then I’d not opt for it either.</p>
</blockquote>
</aside>
<p>For what it’s worth, I write Scala for a hedge fund as my job. I find it’s actually really good precisely for modelling all sorts of complex financial situations with lots of numbers all meaning diffferent things flying around, thanks to its strong type system and easy introduction of “newtypes”, lightweight (or no-weight in the case of <code>AnyVal</code>) case classes whose only purpose is to tag e.g. an integer or <code>BigDecimal</code> with a domain-specific type. You can then define your business logic in terms of operations on these higher-level objects more specific to your actual domain.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="123833" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/recommendations-for-large-ecommerce-venture/21540/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-123833" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="123833"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #11"></div>
  </section>
</div>
    <div class="postbit" id="123835" data-post-id="123835">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dimitarvp" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/120/38664_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dimitarvp
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Well, Erlang has been around for 30 years already.</p>
<p>But in Erlang/Elixir you’ll end up writing almost everything from scratch. There were efforts and ideas about it but let’s be real: without real funding and somebody’s livelihood depending on coding that, nothing will happen. We all have jobs to do and families to support. And free time to enjoy.</p>
<p>Outside of that, either Solidus (Ruby isn’t a very good idea for the scale you’re looking for) or Java – although scale might be a problem there as well.</p>
<p>I’d naively pick Elixir and work my way through the difficulties, asking first if I’ll get guaranteed 3 years of funding first. Erlang/Elixir are technologically best equipped for the scale and longevity you’re looking for. But again, it’ll be a custom-tailored and hand-crafted solution.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="123835" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/recommendations-for-large-ecommerce-venture/21540/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-123835" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="123835"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #12"></div>
  </section>
</div>
    <div class="postbit" id="123844" data-post-id="123844">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="mmmrrr" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mmmrrr/120/12227_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  mmmrrr
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Hey Sammis,</p>
<p>before giving any technical advise, or seeking technical advise, I would always recommend to lay out the requirements as precisely as possible.</p>
<p>You state that</p>
<aside class="quote no-group" data-username="Sammis" data-post="1" data-topic="21540">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/s/b5a626/48.png" class="avatar"> Sammis:</div>
<blockquote>
<p>it’s got to last 20 to 30 years,</p>
</blockquote>
</aside>
<p>Let me put it this way: maybe. But this is most certainly not your real concern <strong>right now</strong>. Every choice you can make will inavitably have its downsides.</p>
<p>So the real questions are:</p>
<ol>
<li>Why is money a problem? If you’re going to do business for 20-30 years you <em>need</em> to make millions yourself with this enterprise. So if money is a problem <em>now</em>, developing from scratch is maybe not a smart option.<br>
(That beeing said: economically it makes sense to keep costs down. Just remember that licensing costs will almost always be lower than development costs if you can get the same system. This is true for almost any part of the world)</li>
<li>What are you up to? Are you a startup? Are you a development department or agency for a company that wants to expand or change its business? Is this a public government sector type of thing, where paying people is not a problem because they are “there anyway”?<br>
<strong>2b)</strong> How many people will be working on the project.</li>
</ol>
<p>Pointing to any particular technology is not doing any good, without answering at least question 2). Because it massively depends on what to optimize for.</p>
<p>That beeing said: if you are <strong>sure</strong> (and I mean absolutely, rock solid, <em>super dooper</em>, “I have seen the contract” sure) that this project will be very long running you need to optimize for one thing: changeability / refactoring. Don’t hardwire stuff, keep everything as separated as possible. Create clean APIs that stabilize fast and <strong>don’t change</strong>. Keep the scope of every part of the system as small and focused as humanly possible.</p>
<p>This advice is, I think, universal for large systems and does not depend on any particular technology. Just like: try to introduce as little side effects as possible and only in well defined and understood places.</p>
<p>So, if you can, please give us a little more info about your project <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p>
<p>(Not that I don’t enjoy a good technology discussion but I think this isn’t helping OP as much <img src="https://forum.elixirforum.com/images/emoji/apple/wink.png?v=15" title=":wink:" class="emoji" alt=":wink:" loading="lazy" width="20" height="20">)</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="123844" data-batch-url="/posts/batch_likers">
                        7
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/recommendations-for-large-ecommerce-venture/21540/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-123844" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="123844"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #13"></div>
  </section>
</div>
    <div class="postbit" id="123853" data-post-id="123853">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Sammis" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Sammis
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I like what you saying.  Very pragmatic.  Thanks</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="123853" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/recommendations-for-large-ecommerce-venture/21540/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-123853" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="123853"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #14"></div>
  </section>
</div>
    <div class="postbit" id="123890" data-post-id="123890">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="OvermindDL1" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/OvermindDL1/120/2677_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  OvermindDL1
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="mjadczak" data-post="12" data-topic="21540">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mjadczak/48/3537_2.png" class="avatar"> mjadczak:</div>
<blockquote>
<p>For what it’s worth, I write Scala for a hedge fund as my job. I find it’s actually really good precisely for modelling all sorts of complex financial situations with lots of numbers all meaning diffferent things flying around, thanks to its strong type system and easy introduction of “newtypes”, lightweight (or no-weight in the case of <code>AnyVal</code> ) case classes whose only purpose is to tag e.g. an integer or <code>BigDecimal</code> with a domain-specific type. You can then define your business logic in terms of operations on these higher-level objects more specific to your actual domain.</p>
</blockquote>
</aside>
<p>Those are still HM level types though, meaning actually dealing with the monetary values has to be done in runtime code.  As a basic comparison take Idris, where you can enforce how the money values change in the type system itself (not just the money type, but rather <em>how</em> it changes), or a not near as powerful Rust where the refined typing can ensure that money is not mishandled at runtime (that is of course if you use rust’s typing system for that), neither of which Scala’s types handle.</p>
<p>Still though, I entirely state that use something off-the-shelf that is well tested and well used.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="123890" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/recommendations-for-large-ecommerce-venture/21540/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-123890" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="123890"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #15"></div>
  </section>
</div>
    <div class="postbit" id="123910" data-post-id="123910">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Sammis" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Sammis
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>mmmrrr</p>
<p>Thank you for your insight.</p>
<p>This is really great advice I am receiving.</p>
<p>Much appreciated.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="123910" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/recommendations-for-large-ecommerce-venture/21540/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-123910" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="123910"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #16"></div>
  </section>
</div>
    <div class="postbit" id="123911" data-post-id="123911">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Sammis" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Sammis
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>dimitarvp</p>
<p>Thank you for your words of wisdom.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="123911" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/recommendations-for-large-ecommerce-venture/21540/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-123911" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="123911"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #17"></div>
  </section>
</div>
    <div class="postbit" id="123920" data-post-id="123920">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="mjaric" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mjaric/120/7788_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  mjaric
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>If I were you, I would start with language and database I know the best. If you are learning language now then you will be lost for some time doing nothing about your business nor building your sales skills.</p>
<ol>
<li>Define what is your MVP,</li>
<li>set KPIs</li>
<li>do MVP it (implement) and then release it and see what happens.</li>
<li>Do some cheap marketing, e.g. put some $ on FB adds and wait for result. Check what audience is best for you and then add more $ just for such audience. Open FB page, Instagram or what ever is popular thees days.</li>
</ol>
<p>At some point, you will see that you are spending 10 grades more on marketing than on licenses and infrastructure. But that marketing money is returned in revenue probably. If you do this carefully you will quickly build some value. Then go with this value to some investors and present it and give 15-30% of your company so you get funds, BUT prepare new plan how you will spend that money to create bigger value.</p>
<p>As you see above, only one point is about coding.</p>
<p>If you are still concern about what platform and tools to use, I can say from my 20 years experience that every company I worked for or consult, had smaller or bigger platform change at later point, did some “rewrite” in same or new language or add new service using new platform. What so ever, people that should work for your company (developers) will always try to find new DB engine or language to replace current. Luckily the change happens rarely <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"> otherwise it would slow down business development.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="123920" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/recommendations-for-large-ecommerce-venture/21540/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-123920" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="123920"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #18"></div>
  </section>
</div>
    <div class="postbit" id="123924" data-post-id="123924">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="mjadczak" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mjadczak/120/3537_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  mjadczak
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>(This is getting offtopic so perhaps a thread-split is in order.)</p>
<p>I do quite a bit of Rust on the side, and I love it, but I actually don’t see how its type system would be superior for the types of business logic problems that we solve. In fact, the couple of feature of Rust that I occasionally miss in Scala are the <code>Result</code> type (but mostly just because it’s consistent across libraries) and move semantics—I’d love to be able to express that a function uses up a value and it can no longer be accessed—but even then that mostly comes up when I’m interfacing with some mutable outside Java thing. Neither of these are really a property of the type system. I can do ADTs/enums (<code>sealed trait</code>), I can do traits (“typeclasses” aka implicits), and even some more heavyweight functional stuff with scalaz (though only a few projects use that).</p>
<p>I’m not sure what you’re picturing exactly when you say</p>
<blockquote>
<p>Rust where the refined typing can ensure that money is not mishandled at runtime</p>
</blockquote>
<p>—do you just mean that I won’t e.g. add 100GBP to 100USD? That I won’t accidentally mix up balances on two different accounts? Because all of those things we can ensure with Scala, with e.g. overloaded operators. Yes, the checks happen at runtime, but I really don’t think they could happen statically, because all of this data is only seen at runtime, and we cannot make static assumptions about our data sources, because they are sometimes unreliable. I’m no expert with Idris or other languages with real dependent types, so perhaps I am missing something there, but no matter what the compiler / type checker must work with static information only, and I’m not sure whether we could capture any more static information about our domain using dependent types, than we already do.</p>
<p>If what you mean by the fact that Scala doesn’t “guarantee” this things is “if you tried, you could write code which would compile and do the wrong thing”, e.g. by explicitly extracting <code>100</code> from the object representing 100 USD, and another <code>100</code> from the object representing 100 GBP, and adding them together, and packing it back into a 200 USD object, then sure, I agree. However, we have the luxury of a reasonably small team of extremely competent people and always doing code review, and we enforce disciplined code which does things the “right way”, to allow all of the necessary checks to occur.</p>
<p>I do have complaints about Scala, but they’re pretty much all about the JVM itself, or the ecosystem (Akka is extremely painful after having programmed Elixir), and not the type-system.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="123924" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/recommendations-for-large-ecommerce-venture/21540/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-123924" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="123924"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #19"></div>
  </section>
</div>
    <div class="postbit" id="123937" data-post-id="123937">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="OvermindDL1" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/OvermindDL1/120/2677_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  OvermindDL1
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="mjadczak" data-post="20" data-topic="21540">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mjadczak/48/3537_2.png" class="avatar"> mjadczak:</div>
<blockquote>
<p>(This is getting offtopic so perhaps a thread-split is in order.)</p>
</blockquote>
</aside>
<p>Hmm, perhaps, I’ll keep succinct for this:</p>
<aside class="quote no-group" data-username="mjadczak" data-post="20" data-topic="21540">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mjadczak/48/3537_2.png" class="avatar"> mjadczak:</div>
<blockquote>
<p>—do you just mean that I won’t e.g. add 100GBP to 100USD?</p>
</blockquote>
</aside>
<p>Not at all, that is enforced via standard HM typing, pretty trivial.  The harder parts are things like enforcing not performing improper math on the values, like taking <code>$2.53</code> and dividing it by 2, it is super easy to forget things like the half cents in each and that you actually need to pick a place (still can be done via HM though enforcing usage is not), and things like the move semantics (which is part of the refined typing since it linearizes the usage of a type) so you can’t do something like accidentally add a payment twice or deduct <code>$50</code> from a <code>$60</code> account twice in two different threads (since you can’t forget a synchronization primitive for example on your type access).</p>
<p>Idris on the other hand goes far <em>far</em> beyond.  Dependently typed type systems not only hold type information (HM typing), and linearized types and all that, but far far more, including even having knowledge about the values that will be held at runtime.  The prime simple example of a dependently typed language is a language that can take something like a list that you can pass into, say, a <code>head/1</code> function, and it will fail to compile unless you verify that it is not empty, and that check is not a check built in to the language, those are checks you can ‘build’ on any type.  In essence it lets you program in the type system, thus making check and bounds that are impossible otherwise.  Why something like Idris and Coq are so useful for monetary systems is that they can absolutely prove the flow of a value through a system, ensure it is only accessed properly, that nothing is forgotten about, and I’m still only scratching what a full dependently typed language can do.</p>
<p>Now because the types are so powerful in dependently typed languages the programs also tend to be a good bit bigger, with type signatures that are…impressively large to put it mildly, but once it compiles you can be sure that not only your types are correct in their usage but you also aren’t breaking any potential runtime <em>logical</em> contracts either.</p>
<aside class="quote no-group" data-username="mjadczak" data-post="20" data-topic="21540">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mjadczak/48/3537_2.png" class="avatar"> mjadczak:</div>
<blockquote>
<p>However, we have the luxury of a reasonably small team of extremely competent people and always doing code review, and we enforce disciplined code which does things the “right way”, to allow all of the necessary checks to occur.</p>
</blockquote>
</aside>
<p>You have this ability now, but will that remain in the future?  What if Scala finishes dying off (it almost has really…) and they start writing interface code in Java or Kotlin then?  A small team of competent people ‘now’ does not equate the same to the maintainers in the future, and over a multi-decade timescale spoken of prior, then I’d still vote on grabbing a pre-made, very well tested and used prior-existing product instead.  <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p>
<p>(I do like Scala, much more so than Java or Kotlin, it just doesn’t have much backing anymore…)</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="123937" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/recommendations-for-large-ecommerce-venture/21540/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-123937" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="123937"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #20"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/21540/load_more?page=3">Load more posts (2 remaining)</a>
</div></template></turbo-stream>