I agree with Andrew B, except that for readability purposes I would not recommend using only whitespace there. Use the @ symbol or the fully qualified name of the zone ("mydev.") in that spot to make things significantly more readable. Disk space is no longer expensive and saving a few characters at the expense of having a file where you don't understand what the zone parser is doing is not a win.
To explain a little further, each resource record declaration consists of a label, a ttl, a class, a type, and a value. But you can leave out any of those except the value and they will be inherited from above.
The snippet you have posted is trying to declare records with name "mydev." for records of class IN and type SOA, NS, MX, and A, but because you've left out important whitespace at the beginning of the lines for the NS, MX, and A record declarations you're running into problems.
If the items surrounded in square brackets are inherited defaults, instead of:
[mydev.] IN NS mydev.
[mydev.] IN MX 10 mydev.
[mydev.] IN A 18.104.22.168
you are inadvertently declaring:
IN.[mydev.] [IN] NS mydev.
IN.[mydev.] [IN] MX 10 mydev.
IN.[mydev.] [IN] A 22.214.171.124
and as a result no NS record is ever declared for plain old:
mydev. IN NS mydev.
resulting in the error message you are seeing, "zone mydev/IN: has no NS records"