<story><title>Ask HN: Does anyone else find the AWS Lambda developer experience frustrating?</title><text>Hey HN,&lt;p&gt;I&amp;#x27;ve been using AWS lambda a bit recently, mostly as a way to glue together various bits and pieces.&lt;p&gt;Maybe I&amp;#x27;m doing this wrong but does anyone else find the experience to be really frustrating?&lt;p&gt;I can unit test bits of the code just fine, but at some point I always end up stuck in a slow feedback loop where I deploy the code, do some manual invoking, go and dig through the logs in CloudWatch, add another print statement in my lambda... and so on.&lt;p&gt;What I want is to run the lambdas locally, ideally more than one, and then exercise them with streams of test events (perhaps captured from a real environment). It would be quite cool if I could define BDD style tests around them too.&lt;p&gt;Anyone have any suggestions or share my frustrations?&lt;p&gt;I have heard localstack is quite good although I haven&amp;#x27;t given it a go yet. Would that work for me? I did try SAM but I was a bit underwhelmed and I don&amp;#x27;t want to use a separate IaC tool for these.&lt;p&gt;Alternatively, do other FaaS providers solve this problem?&lt;p&gt;Thanks for any help.</text></story><parent_chain><item><author>jiggawatts</author><text>You&amp;#x27;ve discovered what many other people have: The cloud is the new time-share mainframe.&lt;p&gt;Programming in the 1960s to 80s was like this too. You&amp;#x27;d develop some program in isolation, unable to properly run it. You &amp;quot;submit&amp;quot; it to the system, and it would be scheduled to run along with other workloads. You&amp;#x27;d get a printout of the results back hours later, or even tomorrow. Rinse and repeat.&lt;p&gt;This work loop is incredibly inefficient, and was replaced by development that happened entirely locally on a workstation. This dramatically tightened the edit-compile-debug loop, down to seconds or at most minutes. Productivity skyrocketed, and most enterprises shifted the majority of their workload away from mainframes.&lt;p&gt;Now, in the 2020s, mainframes are back! They&amp;#x27;re just called &amp;quot;the cloud&amp;quot; now, but not much of their essential nature has changed other than the vendor name.&lt;p&gt;The cloud, just like mainframes:&lt;p&gt;- Does not provide all-local workstations. The only full-fidelity platform is the shared server.&lt;p&gt;- Is closed source. Only Amazon provides AWS. Only Microsoft provides Azure. Only Google provides GCP. You can&amp;#x27;t peer into their source code, it is all proprietary and even secret.&lt;p&gt;- Has a poor debugging experience. Shared platforms can&amp;#x27;t generally allow &amp;quot;invasive&amp;quot; debugging for security reasons. Their sheer size and complexity will mean that your visibility will always be limited. You&amp;#x27;ll never been able to get a stack trace that crosses into the internal calls of the platform services like S3 or Lambda. Contrast this with typical debugging where you can even trace into the OS kernel if you so choose.&lt;p&gt;- Are generally based on the &amp;quot;print the logs out&amp;quot; feedback mechanism, with all the usual issues of mainframes such as hours-long delays.</text></item></parent_chain><comment><author>Olreich</author><text>While that’s generally true, the inputs and outputs and execution environment that you can count on is well-documented on AWS Lambda. That means that recreation of execution environment for the function in question is pretty reasonable locally (why is this not a thing then Amazon?!?). For the rest of AWS, you can either get credentials in place for access or mock those out somehow, but that’s not officially supported either.&lt;p&gt;I feel like the service is leaving a bunch of easy work on the table that would let people have a local development process that mirrors the remote development reality.</text></comment>
<story><title>Ask HN: Does anyone else find the AWS Lambda developer experience frustrating?</title><text>Hey HN,&lt;p&gt;I&amp;#x27;ve been using AWS lambda a bit recently, mostly as a way to glue together various bits and pieces.&lt;p&gt;Maybe I&amp;#x27;m doing this wrong but does anyone else find the experience to be really frustrating?&lt;p&gt;I can unit test bits of the code just fine, but at some point I always end up stuck in a slow feedback loop where I deploy the code, do some manual invoking, go and dig through the logs in CloudWatch, add another print statement in my lambda... and so on.&lt;p&gt;What I want is to run the lambdas locally, ideally more than one, and then exercise them with streams of test events (perhaps captured from a real environment). It would be quite cool if I could define BDD style tests around them too.&lt;p&gt;Anyone have any suggestions or share my frustrations?&lt;p&gt;I have heard localstack is quite good although I haven&amp;#x27;t given it a go yet. Would that work for me? I did try SAM but I was a bit underwhelmed and I don&amp;#x27;t want to use a separate IaC tool for these.&lt;p&gt;Alternatively, do other FaaS providers solve this problem?&lt;p&gt;Thanks for any help.</text></story><parent_chain><item><author>jiggawatts</author><text>You&amp;#x27;ve discovered what many other people have: The cloud is the new time-share mainframe.&lt;p&gt;Programming in the 1960s to 80s was like this too. You&amp;#x27;d develop some program in isolation, unable to properly run it. You &amp;quot;submit&amp;quot; it to the system, and it would be scheduled to run along with other workloads. You&amp;#x27;d get a printout of the results back hours later, or even tomorrow. Rinse and repeat.&lt;p&gt;This work loop is incredibly inefficient, and was replaced by development that happened entirely locally on a workstation. This dramatically tightened the edit-compile-debug loop, down to seconds or at most minutes. Productivity skyrocketed, and most enterprises shifted the majority of their workload away from mainframes.&lt;p&gt;Now, in the 2020s, mainframes are back! They&amp;#x27;re just called &amp;quot;the cloud&amp;quot; now, but not much of their essential nature has changed other than the vendor name.&lt;p&gt;The cloud, just like mainframes:&lt;p&gt;- Does not provide all-local workstations. The only full-fidelity platform is the shared server.&lt;p&gt;- Is closed source. Only Amazon provides AWS. Only Microsoft provides Azure. Only Google provides GCP. You can&amp;#x27;t peer into their source code, it is all proprietary and even secret.&lt;p&gt;- Has a poor debugging experience. Shared platforms can&amp;#x27;t generally allow &amp;quot;invasive&amp;quot; debugging for security reasons. Their sheer size and complexity will mean that your visibility will always be limited. You&amp;#x27;ll never been able to get a stack trace that crosses into the internal calls of the platform services like S3 or Lambda. Contrast this with typical debugging where you can even trace into the OS kernel if you so choose.&lt;p&gt;- Are generally based on the &amp;quot;print the logs out&amp;quot; feedback mechanism, with all the usual issues of mainframes such as hours-long delays.</text></item></parent_chain><comment><author>bombcar</author><text>People sometimes don’t understand the “why” of something like Literate Programming - it wasn’t really for documentation purposes. Part of it was to reduce as much as possible what we would call “compiler errors” as much as possible.&lt;p&gt;Arguably that’s a more dignified form of programming for a more elegant time but it doesn’t really mesh with the reality of “try fail print retry”.</text></comment>