| well, so here's exactly what I worked on just the other day and how it went. Step 1 - there's a user story that is telling me that one of the services needs to have ONE new data field added to the data model of the domain object it is in charge of. The actual data for that new field will be sent in by the existing services which now will optionally provide the data for the field in the payload. Simple right? Step 2 - I check that data service out from the repo and start hacking. After about 45 minutes I have the change made locally, have the functional tests added (copypaste existing ones/rename them/add my new field in there), can hit the service endpoint with altered POST and PATCH payloads and GET gives me back what I need. In the monolith days, my next step would be to alter the tests that will drive the service I worked on to add the data field I added, run complete functional test suite, once everything passes/builds - deploy locally, hit it with integration tests, fix whatever breaks, check into repo, wait for the CI flow to be done and I'm DONE. But. We're in the microservices world. So I'm now on to Step 3:
Step 3a - identify "data provider" services, pull them down from the repo, import into my IDE. Alter the simulators representing the service I changed to have the change I introduced reflected in there. Step 3b. Alter the services themselves, run tests against the simulators. Step 3c. Fun part - messing with newly altered client service config settings locally so that they'll simulate every external call except when hitting my altered service's endpoint. This uncovers some unpleasant dependencies like I now need to pull down a docker image with the MQ provider 2 of these services won't start without. Image pukes on startup, takes time to figure out, but now I'm on to the next step. Step 3d. Now that I can hit my service from the client services I run the tests. Separate test suites from separate projects so I need to switch between terminal windows, IDE projects etc. I mean I'm not digging trenches but my command-tabbing is getting old so I go to lunch :) Step 3e. Integration tests. What a pain in the ass. Too much to type to describe the ordeal :) Step 3f. Checking in changes for 4 projects, so basically CIx4 compared to monolith. Now I also have to make sure my changes will get merged into the branches that drive CI with integration tests in proper order, otherwise the CI job will fail on the integration test step. Of course, re-running the build will fix the problem after the "backend" changes are there but still. And plz don't tell me to wait for my pr for the backend service change to be merged and CI completed before checking the client ones in :) Good thing I didn't have to mess with any configs, that would be even more fun. |